/** * For a given list of metrics, figure out the shard and slot they belong to and for those shard * and slot combinations, get all the locators from metrics_delayed_locator column family. * * @param metrics * @return * @throws IOException */ protected Set<Locator> retrieveLocatorsByShardAndSlot(List<IMetric> metrics) throws IOException { Set<String> slotKeys = new HashSet<String>(); for (IMetric metric : metrics) { int shard = Util.getShard(metric.getLocator().toString()); int slot = DELAYED_METRICS_STORAGE_GRANULARITY.slot(metric.getCollectionTime()); SlotKey slotKey = SlotKey.of(DELAYED_METRICS_STORAGE_GRANULARITY, slot, shard); slotKeys.add(slotKey.toString()); } Set<Locator> locatorsFromDB = new HashSet<Locator>(); for (String slotKeyStr : slotKeys) { locatorsFromDB.addAll(delayedLocatorIO.getLocators(SlotKey.parse(slotKeyStr))); } return locatorsFromDB; }
/** * Create a single {@link com.rackspacecloud.blueflood.service.SingleRollupWriteContext} from the * given {@link com.rackspacecloud.blueflood.types.IMetric} and Granularity. * * @param destGran * @param metric * @return * @throws IOException */ protected SingleRollupWriteContext createSingleRollupWriteContext( Granularity destGran, IMetric metric) throws IOException { Locator locator = metric.getLocator(); Points<SimpleNumber> points = new Points<SimpleNumber>(); points.add( new Points.Point<SimpleNumber>( metric.getCollectionTime(), new SimpleNumber(metric.getMetricValue()))); BasicRollup rollup = BasicRollup.buildRollupFromRawSamples(points); return new SingleRollupWriteContext( rollup, locator, destGran, CassandraModel.getBasicColumnFamily(destGran), metric.getCollectionTime()); }