Updated Branches:
  refs/heads/trunk 0368796c5 -> aa31e2ccb

AMBARI-2711 - Get call on host resource at api/v1/hosts/(hostname) returns 
empty response


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

Branch: refs/heads/trunk
Commit: 6e2fa0343ae507e7f776da39c321ab18024957c9
Parents: e163b0e
Author: tbeerbower <[email protected]>
Authored: Tue Jul 23 13:00:00 2013 -0400
Committer: tbeerbower <[email protected]>
Committed: Tue Jul 23 16:10:48 2013 -0400

----------------------------------------------------------------------
 .../internal/AbstractProviderModule.java        | 41 +++++++++++++-------
 .../internal/VersioningPropertyProvider.java    | 24 ++++++++----
 .../VersioningPropertyProviderTest.java         | 17 +++++++-
 3 files changed, 57 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/6e2fa034/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
index 1a93737..77556f0 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractProviderModule.java
@@ -530,14 +530,16 @@ public abstract class AbstractProviderModule implements 
ProviderModule, Resource
 
     Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers =
         new HashMap<PropertyHelper.MetricsVersion, AbstractPropertyProvider>();
+    AbstractPropertyProvider lastProvider = null;
 
     for (PropertyHelper.MetricsVersion version : 
PropertyHelper.MetricsVersion.values()) {
 
-      providers.put(version, new 
JMXPropertyProvider(PropertyHelper.getJMXPropertyIds(type, version), 
streamProvider,
-          jmxHostProvider, clusterNamePropertyId, hostNamePropertyId, 
componentNamePropertyId, statePropertyId, healthyStates));
+      lastProvider = new 
JMXPropertyProvider(PropertyHelper.getJMXPropertyIds(type, version), 
streamProvider,
+          jmxHostProvider, clusterNamePropertyId, hostNamePropertyId, 
componentNamePropertyId, statePropertyId, healthyStates);
+      providers.put(version, lastProvider);
     }
 
-    return new VersioningPropertyProvider(clusterVersionsMap, providers, 
clusterNamePropertyId);
+    return new VersioningPropertyProvider(clusterVersionsMap, providers, 
lastProvider, clusterNamePropertyId);
   }
 
   /**
@@ -551,14 +553,16 @@ public abstract class AbstractProviderModule implements 
ProviderModule, Resource
 
     Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers =
         new HashMap<PropertyHelper.MetricsVersion, AbstractPropertyProvider>();
+    AbstractPropertyProvider lastProvider = null;
 
     for (PropertyHelper.MetricsVersion version : 
PropertyHelper.MetricsVersion.values()) {
 
-      providers.put(version, new 
GangliaReportPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, 
version), streamProvider,
-          configuration, hostProvider, clusterNamePropertyId));
+      lastProvider = new 
GangliaReportPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, 
version), streamProvider,
+          configuration, hostProvider, clusterNamePropertyId);
+      providers.put(version, lastProvider);
     }
 
-    return new VersioningPropertyProvider(clusterVersionsMap, providers, 
clusterNamePropertyId);
+    return new VersioningPropertyProvider(clusterVersionsMap, providers, 
lastProvider, clusterNamePropertyId);
   }
 
   /**
@@ -573,14 +577,16 @@ public abstract class AbstractProviderModule implements 
ProviderModule, Resource
 
     Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers =
         new HashMap<PropertyHelper.MetricsVersion, AbstractPropertyProvider>();
+    AbstractPropertyProvider lastProvider = null;
 
     for (PropertyHelper.MetricsVersion version : 
PropertyHelper.MetricsVersion.values()) {
 
-      providers.put(version, new 
GangliaHostPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, 
version), streamProvider,
-          configuration, hostProvider, clusterNamePropertyId, 
hostNamePropertyId));
+      lastProvider = new 
GangliaHostPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, 
version), streamProvider,
+          configuration, hostProvider, clusterNamePropertyId, 
hostNamePropertyId);
+      providers.put(version, lastProvider);
     }
 
-    return new VersioningPropertyProvider(clusterVersionsMap, providers, 
clusterNamePropertyId);
+    return new VersioningPropertyProvider(clusterVersionsMap, providers, 
lastProvider, clusterNamePropertyId);
   }
 
   /**
@@ -595,14 +601,17 @@ public abstract class AbstractProviderModule implements 
ProviderModule, Resource
 
     Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers =
         new HashMap<PropertyHelper.MetricsVersion, AbstractPropertyProvider>();
+    AbstractPropertyProvider lastProvider = null;
 
     for (PropertyHelper.MetricsVersion version : 
PropertyHelper.MetricsVersion.values()) {
+      lastProvider =
+          new 
GangliaComponentPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, 
version),
+              streamProvider, configuration, hostProvider, 
clusterNamePropertyId, componentNamePropertyId);
 
-      providers.put(version, new 
GangliaComponentPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, 
version), streamProvider,
-          configuration, hostProvider, clusterNamePropertyId, 
componentNamePropertyId));
+      providers.put(version, lastProvider);
     }
 
-    return new VersioningPropertyProvider(clusterVersionsMap, providers, 
clusterNamePropertyId);
+    return new VersioningPropertyProvider(clusterVersionsMap, providers, 
lastProvider, clusterNamePropertyId);
   }
 
   /**
@@ -618,13 +627,15 @@ public abstract class AbstractProviderModule implements 
ProviderModule, Resource
 
     Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> providers =
         new HashMap<PropertyHelper.MetricsVersion, AbstractPropertyProvider>();
+    AbstractPropertyProvider lastProvider = null;
 
     for (PropertyHelper.MetricsVersion version : 
PropertyHelper.MetricsVersion.values()) {
 
-      providers.put(version, new 
GangliaHostComponentPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, 
version), streamProvider,
-          configuration, hostProvider, clusterNamePropertyId, 
hostNamePropertyId, componentNamePropertyId));
+      lastProvider = new 
GangliaHostComponentPropertyProvider(PropertyHelper.getGangliaPropertyIds(type, 
version), streamProvider,
+          configuration, hostProvider, clusterNamePropertyId, 
hostNamePropertyId, componentNamePropertyId);
+      providers.put(version, lastProvider);
     }
 
-    return new VersioningPropertyProvider(clusterVersionsMap, providers, 
clusterNamePropertyId);
+    return new VersioningPropertyProvider(clusterVersionsMap, providers, 
lastProvider, clusterNamePropertyId);
   }
 }

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/6e2fa034/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersioningPropertyProvider.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersioningPropertyProvider.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersioningPropertyProvider.java
index 9c94ece..b1b1d5c 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersioningPropertyProvider.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/VersioningPropertyProvider.java
@@ -38,6 +38,7 @@ public class VersioningPropertyProvider extends BaseProvider 
implements Property
 
   private final Map<String, PropertyHelper.MetricsVersion> clusterVersions;
   private final Map<PropertyHelper.MetricsVersion, AbstractPropertyProvider> 
providers;
+  private final AbstractPropertyProvider defaultProvider;
   private final String clusterNamePropertyId;
 
   /**
@@ -45,11 +46,13 @@ public class VersioningPropertyProvider extends 
BaseProvider implements Property
    */
   public VersioningPropertyProvider(Map<String, PropertyHelper.MetricsVersion> 
clusterVersions,
                                     Map<PropertyHelper.MetricsVersion, 
AbstractPropertyProvider> providers,
+                                    AbstractPropertyProvider defaultProvider,
                                     String clusterNamePropertyId) {
     super(getComponentMetrics(providers));
 
     this.clusterVersions       = clusterVersions;
     this.providers             = providers;
+    this.defaultProvider       = defaultProvider;
     this.clusterNamePropertyId = clusterNamePropertyId;
   }
 
@@ -77,18 +80,23 @@ public class VersioningPropertyProvider extends 
BaseProvider implements Property
     // 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();
+      String                   clusterName = entry.getKey();
+      Set<Resource>            resourceSet = entry.getValue();
+      AbstractPropertyProvider provider    = null;
 
-      PropertyHelper.MetricsVersion version = clusterVersions.get(clusterName);
+      if (clusterName == null) {
+        provider = defaultProvider;
+      } else {
+        PropertyHelper.MetricsVersion version = 
clusterVersions.get(clusterName);
 
-      if (version != null) {
-
-        AbstractPropertyProvider provider = providers.get(version);
-        if (provider != null) {
-          keepers.addAll(provider.populateResources(resourceSet, request, 
predicate));
+        if (version != null) {
+          provider = providers.get(version);
         }
       }
+
+      if (provider != null) {
+        keepers.addAll(provider.populateResources(resourceSet, request, 
predicate));
+      }
     }
     return keepers;
   }

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/6e2fa034/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersioningPropertyProviderTest.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersioningPropertyProviderTest.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersioningPropertyProviderTest.java
index b881c41..1db4e0b 100644
--- 
a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersioningPropertyProviderTest.java
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/VersioningPropertyProviderTest.java
@@ -69,8 +69,9 @@ public class VersioningPropertyProviderTest {
 
     providers.put(PropertyHelper.MetricsVersion.HDP2, propertyProvider2);
 
-
-    VersioningPropertyProvider provider = new 
VersioningPropertyProvider(clusterVersionsMap, providers, 
PropertyHelper.getPropertyId("HostRoles", "cluster_name"));
+    // set propertyProvider2 as the default provider
+    VersioningPropertyProvider provider = new 
VersioningPropertyProvider(clusterVersionsMap, providers,
+        propertyProvider2, PropertyHelper.getPropertyId("HostRoles", 
"cluster_name"));
 
 
     Request request = PropertyHelper.getReadRequest();
@@ -106,6 +107,18 @@ public class VersioningPropertyProviderTest {
 
     Assert.assertEquals(resource1, propertyProvider1.getResource());
     Assert.assertEquals(resource2, propertyProvider2.getResource());
+
+
+    // test resource with no associated cluster ... should go to default 
provider2
+    propertyProvider1.setResource(null);
+    propertyProvider2.setResource(null);
+
+    Resource resource3 = new ResourceImpl(Resource.Type.HostComponent);
+
+    provider.populateResources(Collections.singleton(resource3), request, 
null);
+
+    Assert.assertNull(propertyProvider1.getResource());
+    Assert.assertEquals(resource3, propertyProvider2.getResource());
   }
 
   private class TestJMXPropertyProvider extends JMXPropertyProvider {

Reply via email to