Repository: ambari
Updated Branches:
  refs/heads/branch-3.0-ams cd769e2e7 -> c32eebf89


http://git-wip-us.apache.org/repos/asf/ambari/blob/c32eebf8/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 19e0e60..fccf190 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
@@ -17,57 +17,27 @@
  */
 package org.apache.ambari.server.controller.metrics.timeline.cache;
 
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric;
-import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics;
+import 
org.apache.hadoop.metrics2.sink.timeline.cache.TimelineMetricsEhCacheSizeOfEngine;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import net.sf.ehcache.pool.Size;
 import net.sf.ehcache.pool.SizeOfEngine;
-import net.sf.ehcache.pool.impl.DefaultSizeOfEngine;
-import net.sf.ehcache.pool.sizeof.ReflectionSizeOf;
-import net.sf.ehcache.pool.sizeof.SizeOf;
 
 /**
  * Cache sizing engine that reduces reflective calls over the Object graph to
  * find total Heap usage.
  */
-public class TimelineMetricsCacheSizeOfEngine implements SizeOfEngine {
+public class TimelineMetricsCacheSizeOfEngine extends 
TimelineMetricsEhCacheSizeOfEngine {
 
   private final static Logger LOG = 
LoggerFactory.getLogger(TimelineMetricsCacheSizeOfEngine.class);
-  public static int DEFAULT_MAX_DEPTH = 1000;
-  public static boolean DEFAULT_ABORT_WHEN_MAX_DEPTH_EXCEEDED = false;
-
-  private SizeOfEngine underlying = null;
-  SizeOf reflectionSizeOf = new ReflectionSizeOf();
-
-  // Optimizations
-  private volatile long timelineMetricPrimitivesApproximation = 0;
-
-  private long sizeOfMapEntry;
-  private long sizeOfMapEntryOverhead;
 
   private TimelineMetricsCacheSizeOfEngine(SizeOfEngine underlying) {
-    this.underlying = underlying;
+    super(underlying);
   }
 
   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));
-
-    //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.");
+    // Invoke default constructor in base class
   }
 
   @Override
@@ -108,36 +78,10 @@ public class TimelineMetricsCacheSizeOfEngine implements 
SizeOfEngine {
 
   private long getTimelineMetricCacheValueSize(TimelineMetricsCacheValue 
value) {
     long size = 16; // startTime + endTime
-    TimelineMetrics metrics = value.getTimelineMetrics();
+
     size += 8; // Object reference
 
-    if (metrics != null) {
-      for (TimelineMetric metric : metrics.getMetrics()) {
-
-        if (timelineMetricPrimitivesApproximation == 0) {
-          timelineMetricPrimitivesApproximation += 
reflectionSizeOf.sizeOf(metric.getMetricName());
-          timelineMetricPrimitivesApproximation += 
reflectionSizeOf.sizeOf(metric.getAppId());
-          timelineMetricPrimitivesApproximation += 
reflectionSizeOf.sizeOf(metric.getHostName());
-          timelineMetricPrimitivesApproximation += 
reflectionSizeOf.sizeOf(metric.getInstanceId());
-          timelineMetricPrimitivesApproximation += 
reflectionSizeOf.sizeOf(metric.getTimestamp());
-          timelineMetricPrimitivesApproximation += 
reflectionSizeOf.sizeOf(metric.getStartTime());
-          timelineMetricPrimitivesApproximation += 
reflectionSizeOf.sizeOf(metric.getType());
-          timelineMetricPrimitivesApproximation += 8; // Object overhead
-
-          LOG.debug("timelineMetricPrimitivesApproximation bytes = " + 
timelineMetricPrimitivesApproximation);
-        }
-        size += timelineMetricPrimitivesApproximation;
-
-        Map<Long, Double> metricValues = metric.getMetricValues();
-        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 + 
sizeOfMapEntryOverhead) * metricValues.size());
-          size += (sizeOfMapEntry + sizeOfMapEntryOverhead) * 
metricValues.size(); // Treemap size is O(1)
-        }
-      }
-      LOG.debug("Total Size of metric values in cache: " + size);
-    }
+    size += getTimelineMetricsSize(value.getTimelineMetrics()); // TreeMap
 
     return size;
   }
@@ -147,7 +91,6 @@ public class TimelineMetricsCacheSizeOfEngine implements 
SizeOfEngine {
     LOG.debug("Copying tracing sizeof engine, maxdepth: {}, abort: {}",
       maxDepth, abortWhenMaxDepthExceeded);
 
-    return new TimelineMetricsCacheSizeOfEngine(
-      underlying.copyWith(maxDepth, abortWhenMaxDepthExceeded));
+    return new TimelineMetricsCacheSizeOfEngine(underlying.copyWith(maxDepth, 
abortWhenMaxDepthExceeded));
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/c32eebf8/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index e0d0373..ce70a62 100644
--- a/pom.xml
+++ b/pom.xml
@@ -394,6 +394,7 @@
             
<exclude>ambari-metrics/target/rpm/ambari-metrics/SPECS/ambari-metrics.spec</exclude>
             
<exclude>ambari-metrics/ambari-metrics-timelineservice/src/test/resources/lib/org/apache/phoenix/phoenix-core-tests/4.2.0/phoenix-core-tests-4.2.0.pom</exclude>
             
<exclude>ambari-metrics/ambari-metrics-timelineservice/src/test/resources/lib/org/apache/phoenix/phoenix-core-tests/maven-metadata-local.xml</exclude>
+            <exclude>ambari-metrics/ambari-metrics-alertservice/*.iml</exclude>
             <exclude>ambari-metrics/*/target/**</exclude>
             <!-- ignore .settings and .project  -->
             <exclude>ambari-metrics/**/.*/**</exclude>

Reply via email to