Repository: ambari Updated Branches: refs/heads/trunk 9fae285c6 -> b6a3476c7
AMBARI-13705 Metrics Cache sizing test failing on trunk (dsen) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b6a3476c Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b6a3476c Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b6a3476c Branch: refs/heads/trunk Commit: b6a3476c78588ba6d3841f495ca9b87dbe4418a6 Parents: 9fae285 Author: Dmytro Sen <[email protected]> Authored: Fri Nov 13 18:05:14 2015 +0200 Committer: Dmytro Sen <[email protected]> Committed: Fri Nov 13 18:05:14 2015 +0200 ---------------------------------------------------------------------- .../cache/TimelineMetricsCacheSizeOfEngine.java | 13 +++++++++++-- .../timeline/cache/TimelineMetricCacheSizingTest.java | 1 - 2 files changed, 11 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/b6a3476c/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricsCacheSizeOfEngine.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricsCacheSizeOfEngine.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricsCacheSizeOfEngine.java index 56b67d3..2828a49 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricsCacheSizeOfEngine.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricsCacheSizeOfEngine.java @@ -27,6 +27,7 @@ import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Map; +import java.util.TreeMap; /** * Cache sizing engine that reduces reflective calls over the Object graph to @@ -45,6 +46,7 @@ public class TimelineMetricsCacheSizeOfEngine implements SizeOfEngine { private volatile long timelineMetricPrimitivesApproximation = 0; private long sizeOfMapEntry; + private long sizeOfMapEntryOverhead; private TimelineMetricsCacheSizeOfEngine(SizeOfEngine underlying) { this.underlying = underlying; @@ -56,6 +58,13 @@ public class TimelineMetricsCacheSizeOfEngine implements SizeOfEngine { this.sizeOfMapEntry = reflectionSizeOf.sizeOf(new Long(1)) + reflectionSizeOf.sizeOf(new Double(2.0)); + //SizeOfMapEntryOverhead = SizeOfMapWithOneEntry - (SizeOfEmptyMap + SizeOfOneEntry) + TreeMap<Long,Double> map = new TreeMap<>(); + long emptyMapSize = reflectionSizeOf.sizeOf(map); + map.put(new Long(1), new Double(2.0)); + long sizeOfMapOneEntry = reflectionSizeOf.deepSizeOf(DEFAULT_MAX_DEPTH, DEFAULT_ABORT_WHEN_MAX_DEPTH_EXCEEDED, map).getCalculated(); + this.sizeOfMapEntryOverhead = sizeOfMapOneEntry - (emptyMapSize + this.sizeOfMapEntry); + LOG.info("Creating custom sizeof engine for TimelineMetrics."); } @@ -119,8 +128,8 @@ public class TimelineMetricsCacheSizeOfEngine implements SizeOfEngine { if (metricValues != null && !metricValues.isEmpty()) { // Numeric wrapper: 12 bytes + 8 bytes Data type + 4 bytes alignment = 48 (Long, Double) // Tree Map: 12 bytes for header + 20 bytes for 5 object fields : pointers + 1 byte for flag = 40 - LOG.debug("Size of metric value: " + (sizeOfMapEntry + 40) * metricValues.size()); - size += (sizeOfMapEntry + 40) * metricValues.size(); // Treemap size is O(1) + LOG.debug("Size of metric value: " + (sizeOfMapEntry + sizeOfMapEntryOverhead) * metricValues.size()); + size += (sizeOfMapEntry + sizeOfMapEntryOverhead) * metricValues.size(); // Treemap size is O(1) } } LOG.debug("Total Size of metric values in cache: " + size); http://git-wip-us.apache.org/repos/asf/ambari/blob/b6a3476c/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheSizingTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheSizingTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheSizingTest.java index 51f16ce..c87804d 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheSizingTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/metrics/timeline/cache/TimelineMetricCacheSizingTest.java @@ -56,7 +56,6 @@ public class TimelineMetricCacheSizingTest { return metric; } - @Ignore @Test public void testTimelineMetricCacheSizing() throws Exception { Set<String> metricNames = new HashSet<>();
