You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ds...@apache.org on 2015/11/13 17:05:24 UTC

ambari git commit: AMBARI-13705 Metrics Cache sizing test failing on trunk (dsen)

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 <ds...@apache.org>
Authored: Fri Nov 13 18:05:14 2015 +0200
Committer: Dmytro Sen <ds...@apache.org>
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<>();