You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by tb...@apache.org on 2013/06/06 00:22:35 UTC

svn commit: r1490050 [1/3] - in /incubator/ambari/branches/branch-1.4.0/ambari-server/src: main/java/org/apache/ambari/server/controller/internal/ main/java/org/apache/ambari/server/controller/jmx/ main/java/org/apache/ambari/server/controller/utilitie...

Author: tbeerbower
Date: Wed Jun  5 22:22:35 2013
New Revision: 1490050

URL: http://svn.apache.org/r1490050
Log:
AMBARI-2293 - HDFS time range metrics not being provided

Added:
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersioningPropertyProvider.java
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/resources/ganglia_properties_2.json
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersioningPropertyProviderTest.java
Removed:
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/jmx/JMXVersioningPropertyProvider.java
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXVersioningPropertyProviderTest.java
Modified:
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/GangliaPropertyProviderTest.java
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/test/java/org/apache/ambari/server/controller/ganglia/GangliaReportPropertyProviderTest.java
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/AbstractPropertyProviderTest.java
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/test/java/org/apache/ambari/server/controller/jmx/JMXPropertyProviderTest.java
    incubator/ambari/branches/branch-1.4.0/ambari-server/src/test/java/org/apache/ambari/server/controller/utilities/PropertyHelperTest.java

Modified: incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java?rev=1490050&r1=1490049&r2=1490050&view=diff
==============================================================================
--- incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java (original)
+++ incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java Wed Jun  5 22:22:35 2013
@@ -25,7 +25,6 @@ import org.apache.ambari.server.controll
 import org.apache.ambari.server.controller.ganglia.GangliaReportPropertyProvider;
 import org.apache.ambari.server.controller.ganglia.GangliaHostProvider;
 import org.apache.ambari.server.controller.jmx.JMXHostProvider;
-import org.apache.ambari.server.controller.jmx.JMXVersioningPropertyProvider;
 import org.apache.ambari.server.controller.jmx.JMXPropertyProvider;
 import org.apache.ambari.server.controller.spi.*;
 import org.apache.ambari.server.controller.utilities.PredicateBuilder;
@@ -102,8 +101,8 @@ public abstract class AbstractProviderMo
   /**
    * Cluster versions.
    */
-  private final Map<String, PropertyHelper.JMXMetricsVersion> clusterVersionsMap =
-      new HashMap<String, PropertyHelper.JMXMetricsVersion>();
+  private final Map<String, PropertyHelper.MetricsVersion> clusterVersionsMap =
+      new HashMap<String, PropertyHelper.MetricsVersion>();
 
   /**
    * The map of host components.
@@ -263,15 +262,15 @@ public abstract class AbstractProviderMo
 
     switch (type){
       case Cluster :
-        providers.add(new GangliaReportPropertyProvider(
-            PropertyHelper.getGangliaPropertyIds(type),
+        providers.add(createGangliaReportPropertyProvider(
+            type,
             streamProvider,
             this,
             PropertyHelper.getPropertyId("Clusters", "cluster_name")));
         break;
       case Host :
-        providers.add(new GangliaHostPropertyProvider(
-            PropertyHelper.getGangliaPropertyIds(type),
+        providers.add(createGangliaHostPropertyProvider(
+            type,
             streamProvider,
             this,
             PropertyHelper.getPropertyId("Hosts", "cluster_name"),
@@ -289,8 +288,8 @@ public abstract class AbstractProviderMo
             PropertyHelper.getPropertyId("ServiceComponentInfo", "state"),
             Collections.singleton("STARTED")));
 
-        providers.add(new GangliaComponentPropertyProvider(
-            PropertyHelper.getGangliaPropertyIds(type),
+        providers.add(createGangliaComponentPropertyProvider(
+            type,
             streamProvider,
             this,
             PropertyHelper.getPropertyId("ServiceComponentInfo", "cluster_name"),
@@ -307,8 +306,8 @@ public abstract class AbstractProviderMo
             PropertyHelper.getPropertyId("HostRoles", "state"),
             Collections.singleton("STARTED")));
 
-        providers.add(new GangliaHostComponentPropertyProvider(
-            PropertyHelper.getGangliaPropertyIds(type),
+        providers.add(createGangliaHostComponentPropertyProvider(
+            type,
             streamProvider,
             this,
             PropertyHelper.getPropertyId("HostRoles", "cluster_name"),
@@ -358,8 +357,8 @@ public abstract class AbstractProviderMo
         for (Resource cluster : clusters) {
           String clusterVersion = (String) cluster.getPropertyValue(CLUSTER_VERSION_PROPERTY_ID);
 
-          PropertyHelper.JMXMetricsVersion version =  clusterVersion.startsWith("HDP-2") ?
-              PropertyHelper.JMXMetricsVersion.Two : PropertyHelper.JMXMetricsVersion.One;
+          PropertyHelper.MetricsVersion version =  clusterVersion.startsWith("HDP-1") ?
+              PropertyHelper.MetricsVersion.HDP1 : PropertyHelper.MetricsVersion.HDP2;
 
           clusterVersionsMap.put(
               (String) cluster.getPropertyValue(CLUSTER_NAME_PROPERTY_ID),
@@ -522,15 +521,99 @@ public abstract class AbstractProviderMo
                                                       Set<String> healthyStates) {
     updateClusterVersion();
 
-    Map<PropertyHelper.JMXMetricsVersion, JMXPropertyProvider> providers =
-        new HashMap<PropertyHelper.JMXMetricsVersion, JMXPropertyProvider>();
+    Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers =
+        new HashMap<PropertyHelper.MetricsVersion, AbstractPropertyProvider>();
 
-    for (PropertyHelper.JMXMetricsVersion version : PropertyHelper.JMXMetricsVersion.values()) {
+    for (PropertyHelper.MetricsVersion version : PropertyHelper.MetricsVersion.values()) {
 
       providers.put(version, new JMXPropertyProvider(PropertyHelper.getJMXPropertyIds(type, version), streamProvider,
           jmxHostProvider, clusterNamePropertyId, hostNamePropertyId, componentNamePropertyId, statePropertyId, healthyStates));
     }
 
-    return new JMXVersioningPropertyProvider(clusterVersionsMap, providers, clusterNamePropertyId);
+    return new VersioningPropertyProvider(clusterVersionsMap, providers, clusterNamePropertyId);
+  }
+
+  /**
+   * Create the Ganglia report property provider for the given type.
+   */
+  private PropertyProvider createGangliaReportPropertyProvider( Resource.Type type, StreamProvider streamProvider,
+                                                                GangliaHostProvider hostProvider,
+                                                                String clusterNamePropertyId) {
+    updateClusterVersion();
+
+    Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers =
+        new HashMap<PropertyHelper.MetricsVersion, AbstractPropertyProvider>();
+
+    for (PropertyHelper.MetricsVersion version : PropertyHelper.MetricsVersion.values()) {
+
+      providers.put(version, new GangliaReportPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, version), streamProvider,
+          hostProvider, clusterNamePropertyId));
+    }
+
+    return new VersioningPropertyProvider(clusterVersionsMap, providers, clusterNamePropertyId);
+  }
+
+  /**
+   * Create the Ganglia host property provider for the given type.
+   */
+  private PropertyProvider createGangliaHostPropertyProvider( Resource.Type type, StreamProvider streamProvider,
+                                                              GangliaHostProvider hostProvider,
+                                                              String clusterNamePropertyId,
+                                                              String hostNamePropertyId) {
+    updateClusterVersion();
+
+    Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers =
+        new HashMap<PropertyHelper.MetricsVersion, AbstractPropertyProvider>();
+
+    for (PropertyHelper.MetricsVersion version : PropertyHelper.MetricsVersion.values()) {
+
+      providers.put(version, new GangliaHostPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, version), streamProvider,
+          hostProvider, clusterNamePropertyId, hostNamePropertyId));
+    }
+
+    return new VersioningPropertyProvider(clusterVersionsMap, providers, clusterNamePropertyId);
+  }
+
+  /**
+   * Create the Ganglia component property provider for the given type.
+   */
+  private PropertyProvider createGangliaComponentPropertyProvider( Resource.Type type, StreamProvider streamProvider,
+                                                                   GangliaHostProvider hostProvider,
+                                                                   String clusterNamePropertyId,
+                                                                   String componentNamePropertyId) {
+    updateClusterVersion();
+
+    Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers =
+        new HashMap<PropertyHelper.MetricsVersion, AbstractPropertyProvider>();
+
+    for (PropertyHelper.MetricsVersion version : PropertyHelper.MetricsVersion.values()) {
+
+      providers.put(version, new GangliaComponentPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, version), streamProvider,
+          hostProvider, clusterNamePropertyId, componentNamePropertyId));
+    }
+
+    return new VersioningPropertyProvider(clusterVersionsMap, providers, clusterNamePropertyId);
+  }
+
+  /**
+   * Create the Ganglia host component property provider for the given type.
+   */
+  private PropertyProvider createGangliaHostComponentPropertyProvider( Resource.Type type, StreamProvider streamProvider,
+                                                                       GangliaHostProvider hostProvider,
+                                                                       String clusterNamePropertyId,
+                                                                       String hostNamePropertyId,
+                                                                       String componentNamePropertyId) {
+    updateClusterVersion();
+
+    Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers =
+        new HashMap<PropertyHelper.MetricsVersion, AbstractPropertyProvider>();
+
+    for (PropertyHelper.MetricsVersion version : PropertyHelper.MetricsVersion.values()) {
+
+      providers.put(version, new GangliaHostComponentPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, version), streamProvider,
+          hostProvider, clusterNamePropertyId, hostNamePropertyId, componentNamePropertyId));
+    }
+
+    return new VersioningPropertyProvider(clusterVersionsMap, providers, clusterNamePropertyId);
   }
 }

Added: incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersioningPropertyProvider.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersioningPropertyProvider.java?rev=1490050&view=auto
==============================================================================
--- incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersioningPropertyProvider.java (added)
+++ incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersioningPropertyProvider.java Wed Jun  5 22:22:35 2013
@@ -0,0 +1,107 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.controller.internal;
+
+import org.apache.ambari.server.controller.spi.Predicate;
+import org.apache.ambari.server.controller.spi.PropertyProvider;
+import org.apache.ambari.server.controller.spi.Request;
+import org.apache.ambari.server.controller.spi.Resource;
+import org.apache.ambari.server.controller.spi.SystemException;
+import org.apache.ambari.server.controller.utilities.PropertyHelper;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * A property provider that delegates to other Property providers based on the
+ * metrics version of the cluster associated with the resources being populated.
+ */
+public class VersioningPropertyProvider extends BaseProvider implements PropertyProvider {
+
+  private final Map<String, PropertyHelper.MetricsVersion> clusterVersions;
+  private final Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers;
+  private final String clusterNamePropertyId;
+
+  /**
+   * Create a version aware property provider.
+   */
+  public VersioningPropertyProvider(Map<String, PropertyHelper.MetricsVersion> clusterVersions,
+                                    Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers,
+                                    String clusterNamePropertyId) {
+    super(getComponentMetrics(providers));
+
+    this.clusterVersions       = clusterVersions;
+    this.providers             = providers;
+    this.clusterNamePropertyId = clusterNamePropertyId;
+  }
+
+  @Override
+  public Set<Resource> populateResources(Set<Resource> resources, Request request, Predicate predicate)
+      throws SystemException {
+
+    Set<Resource> keepers = new HashSet<Resource>();
+
+    // divide up the given resources according to their associated clusters
+    Map<String, Set<Resource>> resourcesByCluster = new HashMap<String, Set<Resource>>();
+
+    for (Resource resource : resources) {
+      String clusterName = (String) resource.getPropertyValue(clusterNamePropertyId);
+
+      Set<Resource> resourceSet = resourcesByCluster.get(clusterName);
+
+      if (resourceSet == null) {
+        resourceSet = new HashSet<Resource>();
+        resourcesByCluster.put(clusterName, resourceSet);
+      }
+      resourceSet.add(resource);
+    }
+
+    // give each set of resources to the underlying provider that matches the
+    // metrics version of the associated cluster
+    for (Map.Entry<String, Set<Resource>> entry : resourcesByCluster.entrySet()) {
+      String clusterName = entry.getKey();
+      Set<Resource> resourceSet = entry.getValue();
+
+      PropertyHelper.MetricsVersion version = clusterVersions.get(clusterName);
+
+      if (version != null) {
+
+        AbstractPropertyProvider provider = providers.get(version);
+        if (provider != null) {
+          keepers.addAll(provider.populateResources(resourceSet, request, predicate));
+        }
+      }
+    }
+    return keepers;
+  }
+
+  // ----- helper methods ----------------------------------------------------
+
+  private static Set<String> getComponentMetrics(Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers) {
+
+    Set<String> propertyIds = new HashSet<String>();
+
+    for (AbstractPropertyProvider provider : providers.values()) {
+      propertyIds.addAll(provider.getPropertyIds());
+    }
+    return propertyIds;
+  }
+}

Modified: incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java
URL: http://svn.apache.org/viewvc/incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java?rev=1490050&r1=1490049&r2=1490050&view=diff
==============================================================================
--- incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java (original)
+++ incubator/ambari/branches/branch-1.4.0/ambari-server/src/main/java/org/apache/ambari/server/controller/utilities/PropertyHelper.java Wed Jun  5 22:22:35 2013
@@ -40,6 +40,7 @@ public class PropertyHelper {
 
   private static final String PROPERTIES_FILE = "properties.json";
   private static final String GANGLIA_PROPERTIES_FILE = "ganglia_properties.json";
+  private static final String GANGLIA_PROPERTIES_FILE_2 = "ganglia_properties_2.json";
   private static final String JMX_PROPERTIES_FILE = "jmx_properties.json";
   private static final String JMX_PROPERTIES_FILE_2 = "jmx_properties_2.json";
   private static final String KEY_PROPERTIES_FILE = "key_properties.json";
@@ -49,14 +50,15 @@ public class PropertyHelper {
   private static final Map<Resource.Type, Map<String, Map<String, PropertyInfo>>> JMX_PROPERTY_IDS = readPropertyProviderIds(JMX_PROPERTIES_FILE);
   private static final Map<Resource.Type, Map<String, Map<String, PropertyInfo>>> JMX_PROPERTY_IDS_2 = readPropertyProviderIds(JMX_PROPERTIES_FILE_2);
   private static final Map<Resource.Type, Map<String, Map<String, PropertyInfo>>> GANGLIA_PROPERTY_IDS = readPropertyProviderIds(GANGLIA_PROPERTIES_FILE);
+  private static final Map<Resource.Type, Map<String, Map<String, PropertyInfo>>> GANGLIA_PROPERTY_IDS_2 = readPropertyProviderIds(GANGLIA_PROPERTIES_FILE_2);
   private static final Map<Resource.Type, Map<Resource.Type, String>> KEY_PROPERTY_IDS = readKeyPropertyIds(KEY_PROPERTIES_FILE);
 
   /**
-   * JMX metrics versions.
+   * Metrics versions.
    */
-  public enum JMXMetricsVersion {
-    One, // HDP-1.x
-    Two  // HDP-2.x
+  public enum MetricsVersion {
+    HDP1, // HDP-1.x
+    HDP2  // HDP-2.x
   }
 
   public static String getPropertyId(String category, String name) {
@@ -91,17 +93,24 @@ public class PropertyHelper {
     return propertyIds;
   }
 
-  public static Map<String, Map<String, PropertyInfo>> getGangliaPropertyIds(Resource.Type resourceType) {
-    return GANGLIA_PROPERTY_IDS.get(resourceType);
+  public static Map<String, Map<String, PropertyInfo>> getGangliaPropertyIds(Resource.Type resourceType, MetricsVersion version) {
+    switch (version) {
+      case HDP1:
+        return GANGLIA_PROPERTY_IDS.get(resourceType);
+      case HDP2:
+      default:
+        return GANGLIA_PROPERTY_IDS_2.get(resourceType);
+    }
   }
 
-  public static Map<String, Map<String, PropertyInfo>> getJMXPropertyIds(Resource.Type resourceType, JMXMetricsVersion version) {
+  public static Map<String, Map<String, PropertyInfo>> getJMXPropertyIds(Resource.Type resourceType, MetricsVersion version) {
 
     switch (version) {
-      case Two:
-        return JMX_PROPERTY_IDS_2.get(resourceType);
-      default:
+      case HDP1:
         return JMX_PROPERTY_IDS.get(resourceType);
+      case HDP2:
+      default:
+        return JMX_PROPERTY_IDS_2.get(resourceType);
     }
   }