Преглед изворни кода

AMBARI-18344 : Metrics data is not available - AMS in distributed mode. (avijayan)

Aravindan Vijayan пре 9 година
родитељ
комит
f93460c56d

+ 5 - 1
ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java

@@ -68,6 +68,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -713,10 +714,13 @@ public class PhoenixHBaseAccessor {
       LOG.debug("Empty metrics insert request.");
       return;
     }
-    for (TimelineMetric tm: timelineMetrics) {
+    for (Iterator<TimelineMetric> iterator = timelineMetrics.iterator(); iterator.hasNext();) {
+
+      TimelineMetric tm = iterator.next();
 
       if (CollectionUtils.isNotEmpty(AggregatorUtils.whitelistedMetrics) &&
         !AggregatorUtils.whitelistedMetrics.contains(tm.getMetricName())) {
+        iterator.remove();
         continue;
       }
 

+ 22 - 0
ambari-metrics/ambari-metrics-timelineservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/discovery/TestMetadataManager.java

@@ -23,11 +23,14 @@ import org.apache.hadoop.metrics2.sink.timeline.TimelineMetric;
 import org.apache.hadoop.metrics2.sink.timeline.TimelineMetricMetadata;
 import org.apache.hadoop.metrics2.sink.timeline.TimelineMetrics;
 import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.AbstractMiniHBaseClusterTest;
+import org.apache.hadoop.yarn.server.applicationhistoryservice.metrics.timeline.aggregators.AggregatorUtils;
 import org.junit.Before;
 import org.junit.Test;
 
 import java.io.IOException;
 import java.sql.SQLException;
+import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
@@ -69,6 +72,25 @@ public class TestMetadataManager extends AbstractMiniHBaseClusterTest {
     }});
     timelineMetrics.getMetrics().add(metric2);
 
+
+    //Test whitelisting
+    TimelineMetric metric3 = new TimelineMetric();
+    metric3.setMetricName("dummy_metric3");
+    metric3.setHostName("dummy_host3");
+    metric3.setTimestamp(now);
+    metric3.setStartTime(now - 1000);
+    metric3.setAppId("dummy_app3");
+    metric3.setType("Integer");
+    metric3.setMetricValues(new TreeMap<Long, Double>() {{
+      put(now - 100, 1.0);
+      put(now - 200, 2.0);
+      put(now - 300, 3.0);
+    }});
+    timelineMetrics.getMetrics().add(metric3);
+
+    AggregatorUtils.whitelistedMetrics.add("dummy_metric1");
+    AggregatorUtils.whitelistedMetrics.add("dummy_metric2");
+
     hdb.insertMetricRecordsWithMetadata(metadataManager, timelineMetrics, true);
   }