Repository: ambari
Updated Branches:
  refs/heads/trunk 95426f795 -> 316a1811f


AMBARI-16949 Metrics Collector API shows NPE if we use wildcard (%25 for '%') 
for metric name (Jungtaek Lim via avijayan)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/316a1811
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/316a1811
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/316a1811

Branch: refs/heads/trunk
Commit: 316a1811fe6b1374f7a7b2aa9d721f2366484b55
Parents: 95426f7
Author: Aravindan Vijayan <[email protected]>
Authored: Thu Jun 9 10:23:13 2016 -0700
Committer: Aravindan Vijayan <[email protected]>
Committed: Thu Jun 9 10:23:13 2016 -0700

----------------------------------------------------------------------
 .../metrics/timeline/PhoenixHBaseAccessor.java  | 22 +++++++++++++++++---
 1 file changed, 19 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/316a1811/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java
----------------------------------------------------------------------
diff --git 
a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java
 
b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java
index bc5396c..bbd6d83 100644
--- 
a/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java
+++ 
b/ambari-metrics/ambari-metrics-timelineservice/src/main/java/org/apache/hadoop/yarn/server/applicationhistoryservice/metrics/timeline/PhoenixHBaseAccessor.java
@@ -850,7 +850,7 @@ public class PhoenixHBaseAccessor {
                                          Map<String, List<Function>> 
metricFunctions,
                                          ResultSet rs) throws SQLException, 
IOException {
     String metricName = rs.getString("METRIC_NAME");
-    List<Function> functions = metricFunctions.get(metricName);
+    List<Function> functions = findMetricFunctions(metricFunctions, 
metricName);
 
     // Apply aggregation function if present
     if ((functions != null && !functions.isEmpty())) {
@@ -990,7 +990,7 @@ public class PhoenixHBaseAccessor {
       ResultSet rs) throws SQLException {
 
     String metricName = rs.getString("METRIC_NAME");
-    List<Function> functions = metricFunctions.get(metricName);
+    List<Function> functions = findMetricFunctions(metricFunctions, 
metricName);
 
     for (Function aggregateFunction : functions) {
       SingleValuedTimelineMetric metric;
@@ -1027,7 +1027,7 @@ public class PhoenixHBaseAccessor {
       try {
         rs = stmt.executeQuery();
         while (rs.next()) {
-          List<Function> functions = metricFunctions.get(metricName);
+          List<Function> functions = findMetricFunctions(metricFunctions, 
metricName);
           if (functions != null) {
             for (Function f : functions) {
               SingleValuedTimelineMetric metric =
@@ -1108,6 +1108,22 @@ public class PhoenixHBaseAccessor {
     }
   }
 
+  private List<Function> findMetricFunctions(Map<String, List<Function>> 
metricFunctions,
+      String metricName) {
+    if (metricFunctions.containsKey(metricName)) {
+      return metricFunctions.get(metricName);
+    }
+
+    for (Map.Entry<String, List<Function>> nameToFunctions : 
metricFunctions.entrySet()) {
+      String metricRegEx = nameToFunctions.getKey().replace("%", ".*");
+      if (metricName.matches(metricRegEx)) {
+        return nameToFunctions.getValue();
+      }
+    }
+
+    return null;
+  }
+
   public void saveHostAggregateRecords(Map<TimelineMetric, 
MetricHostAggregate> hostAggregateMap,
                                        String phoenixTableName) throws 
SQLException {
 

Reply via email to