AMBARI-13517. TimelineMetricsCache Unit test failure, apache infra. Use actual sizeOf on map entry. (swagle)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ca4d5b1d Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ca4d5b1d Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ca4d5b1d Branch: refs/heads/branch-dev-patch-upgrade Commit: ca4d5b1d68a8883def5a6ab02a25eeaf5beb4365 Parents: 8b0371b Author: Siddharth Wagle <[email protected]> Authored: Sun Nov 1 21:27:02 2015 -0800 Committer: Siddharth Wagle <[email protected]> Committed: Sun Nov 1 21:27:02 2015 -0800 ---------------------------------------------------------------------- .../timeline/cache/TimelineMetricsCacheSizeOfEngine.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/ca4d5b1d/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 757bfb7..56b67d3 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 @@ -44,6 +44,8 @@ public class TimelineMetricsCacheSizeOfEngine implements SizeOfEngine { // Optimizations private volatile long timelineMetricPrimitivesApproximation = 0; + private long sizeOfMapEntry; + private TimelineMetricsCacheSizeOfEngine(SizeOfEngine underlying) { this.underlying = underlying; } @@ -51,6 +53,9 @@ public class TimelineMetricsCacheSizeOfEngine implements SizeOfEngine { public TimelineMetricsCacheSizeOfEngine() { this(new DefaultSizeOfEngine(DEFAULT_MAX_DEPTH, DEFAULT_ABORT_WHEN_MAX_DEPTH_EXCEEDED)); + this.sizeOfMapEntry = reflectionSizeOf.sizeOf(new Long(1)) + + reflectionSizeOf.sizeOf(new Double(2.0)); + LOG.info("Creating custom sizeof engine for TimelineMetrics."); } @@ -114,8 +119,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: " + (48 + 40) * metricValues.size()); - size += (48 + 40) * metricValues.size(); // Treemap size is O(1) + LOG.debug("Size of metric value: " + (sizeOfMapEntry + 40) * metricValues.size()); + size += (sizeOfMapEntry + 40) * metricValues.size(); // Treemap size is O(1) } } LOG.debug("Total Size of metric values in cache: " + size);
