private void padMetric(String metric,
Bucket toPresent,
int currentDataPoints) {
final LinkedHashMap<Point, TimeStampedMetric> cachedPoints = getCachedMetric(metric);
int toAdd = pointsToKeep - currentDataPoints;
@SuppressWarnings({"unchecked","rawtypes"})
Entry<Point, TimeStampedMetric>[] cachedEntries = cachedPoints.entrySet().toArray(new Entry[0]);
long nowMillis = System.currentTimeMillis();
for (int i = cachedEntries.length - 1; i >= 0 && toAdd > 0; --i) {
Entry<Point, TimeStampedMetric> leastOld = cachedEntries[i];
if (leastOld.getValue().millis + MAX_AGE_MILLIS < nowMillis) {
continue;
}
final Identifier id = new Identifier(metric, leastOld.getKey());
if (!toPresent.hasIdentifier(id)) {
toPresent.put(id, leastOld.getValue().metric.pruneData());
--toAdd;
}
}
}