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/11/04 22:35:14 UTC

git commit: AMBARI-3670 - Hosts should roll up host_components status into its status - fix no cluster

Updated Branches:
  refs/heads/trunk fefb83c33 -> 0db94b814


AMBARI-3670 - Hosts should roll up host_components status into its status - fix no cluster


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

Branch: refs/heads/trunk
Commit: 0db94b814c50dcb4c7833c6f2b5d28d067315977
Parents: fefb83c
Author: tbeerbower <tb...@hortonworks.com>
Authored: Mon Nov 4 15:42:44 2013 -0500
Committer: tbeerbower <tb...@hortonworks.com>
Committed: Mon Nov 4 16:34:43 2013 -0500

----------------------------------------------------------------------
 .../internal/HostResourceProvider.java          | 86 +++++++++--------
 .../internal/HostResourceProviderTest.java      | 97 ++++++++++++++++++++
 2 files changed, 143 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/0db94b81/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
index 152f113..45dc22c 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostResourceProvider.java
@@ -669,49 +669,55 @@ class HostResourceProvider extends AbstractControllerResourceProvider {
       AmbariManagementController controller     = getManagementController();
       AmbariMetaInfo             ambariMetaInfo = controller.getAmbariMetaInfo();
       Clusters                   clusters       = controller.getClusters();
-      Cluster                    cluster        = clusters.getCluster(response.getClusterName());
-      StackId                    stackId        = cluster.getDesiredStackVersion();
-
-      ServiceComponentHostRequest request = new ServiceComponentHostRequest(response.getClusterName(),
-          null, null, response.getHostname(), null, null);
-
-      Set<ServiceComponentHostResponse> hostComponentResponses =
-          controller.getHostComponents(Collections.singleton(request));
-
-      int masterCount    = 0;
-      int mastersRunning = 0;
-      int slaveCount     = 0;
-      int slavesRunning  = 0;
-
-      for (ServiceComponentHostResponse hostComponentResponse : hostComponentResponses ) {
-        ComponentInfo componentInfo = ambariMetaInfo.getComponentCategory(stackId.getStackName(),
-            stackId.getStackVersion(), hostComponentResponse.getServiceName(),
-            hostComponentResponse.getComponentName());
-
-        if (componentInfo != null) {
-          String category = componentInfo.getCategory();
-          String state    = hostComponentResponse.getLiveState();
-
-          if (category.equals("MASTER")) {
-            ++masterCount;
-            if (state.equals("STARTED")) {
-              ++mastersRunning;
-            }
-          } else if (category.equals("SLAVE")) {
-            ++slaveCount;
-            if (state.equals("STARTED")) {
-              ++slavesRunning;
+      String                     clusterName    = response.getClusterName();
+
+      if (clusterName != null && clusterName.length() > 0) {
+        Cluster cluster = clusters.getCluster(clusterName);
+        if (cluster != null) {
+          StackId  stackId = cluster.getDesiredStackVersion();
+
+          ServiceComponentHostRequest request = new ServiceComponentHostRequest(clusterName,
+              null, null, response.getHostname(), null, null);
+
+          Set<ServiceComponentHostResponse> hostComponentResponses =
+              controller.getHostComponents(Collections.singleton(request));
+
+          int masterCount    = 0;
+          int mastersRunning = 0;
+          int slaveCount     = 0;
+          int slavesRunning  = 0;
+
+          for (ServiceComponentHostResponse hostComponentResponse : hostComponentResponses ) {
+            ComponentInfo componentInfo = ambariMetaInfo.getComponentCategory(stackId.getStackName(),
+                stackId.getStackVersion(), hostComponentResponse.getServiceName(),
+                hostComponentResponse.getComponentName());
+
+            if (componentInfo != null) {
+              String category = componentInfo.getCategory();
+              String state    = hostComponentResponse.getLiveState();
+
+              if (category.equals("MASTER")) {
+                ++masterCount;
+                if (state.equals("STARTED")) {
+                  ++mastersRunning;
+                }
+              } else if (category.equals("SLAVE")) {
+                ++slaveCount;
+                if (state.equals("STARTED")) {
+                  ++slavesRunning;
+                }
+              }
             }
           }
-        }
-      }
 
-      if (masterCount == mastersRunning && slaveCount == slavesRunning) {
-        healthStatus = HostHealthStatus.HealthStatus.HEALTHY;
-      } else if (masterCount > 0 && mastersRunning < masterCount ) {
-        healthStatus = HostHealthStatus.HealthStatus.UNHEALTHY;
-      } else {
-        healthStatus = HostHealthStatus.HealthStatus.ALERT;
+          if (masterCount == mastersRunning && slaveCount == slavesRunning) {
+            healthStatus = HostHealthStatus.HealthStatus.HEALTHY;
+          } else if (masterCount > 0 && mastersRunning < masterCount ) {
+            healthStatus = HostHealthStatus.HealthStatus.UNHEALTHY;
+          } else {
+            healthStatus = HostHealthStatus.HealthStatus.ALERT;
+          }
+        }
       }
     }
     return healthStatus.toString();

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/0db94b81/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
index cbdcb0e..90f26bb 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostResourceProviderTest.java
@@ -207,6 +207,103 @@ public class HostResourceProviderTest {
   }
 
   @Test
+  public void testGetResources_Status_NoCluster() throws Exception {
+    Resource.Type type = Resource.Type.Host;
+
+    AmbariManagementController managementController = createMock(AmbariManagementController.class);
+    Clusters clusters = createNiceMock(Clusters.class);
+    Cluster cluster = createNiceMock(Cluster.class);
+    Host host1 = createNiceMock(Host.class);
+    HostHealthStatus healthStatus = createNiceMock(HostHealthStatus.class);
+    AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class);
+    ComponentInfo componentInfo = createNiceMock(ComponentInfo.class);
+
+    HostResponse hostResponse1 = createNiceMock(HostResponse.class);
+
+    List<Host> hosts = new LinkedList<Host>();
+    hosts.add(host1);
+
+    Set<Cluster> clusterSet = new HashSet<Cluster>();
+    clusterSet.add(cluster);
+
+    ServiceComponentHostResponse shr1 = new ServiceComponentHostResponse("Cluster100", "Service100", "Component100", "Host100", null, null, "STARTED", "", null, null);
+    ServiceComponentHostResponse shr2 = new ServiceComponentHostResponse("Cluster100", "Service100", "Component102", "Host100", null, null, "STARTED", "", null, null);
+    ServiceComponentHostResponse shr3 = new ServiceComponentHostResponse("Cluster100", "Service100", "Component103", "Host100", null, null, "STARTED", "", null, null);
+
+    Set<ServiceComponentHostResponse> responses = new HashSet<ServiceComponentHostResponse>();
+    responses.add(shr1);
+    responses.add(shr2);
+    responses.add(shr3);
+
+    // set expectations
+    expect(managementController.getClusters()).andReturn(clusters).anyTimes();
+    expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+    expect(managementController.getHostComponents((Set<ServiceComponentHostRequest>) anyObject())).andReturn(responses).anyTimes();
+
+    expect(clusters.getHosts()).andReturn(hosts).anyTimes();
+
+    expect(clusters.getCluster("Cluster100")).andReturn(cluster).anyTimes();
+
+    expect(clusters.getClustersForHost("Host100")).andReturn(clusterSet).anyTimes();
+
+    expect(host1.getHostName()).andReturn("Host100").anyTimes();
+
+    expect(host1.convertToResponse()).andReturn(hostResponse1);
+
+    expect(hostResponse1.getClusterName()).andReturn("").anyTimes();
+    expect(hostResponse1.getHostname()).andReturn("Host100").anyTimes();
+    expect(hostResponse1.getHealthStatus()).andReturn(healthStatus).anyTimes();
+
+    expect(healthStatus.getHealthStatus()).andReturn(HostHealthStatus.HealthStatus.HEALTHY).anyTimes();
+    expect(healthStatus.getHealthReport()).andReturn("HEALTHY").anyTimes();
+
+
+    expect(ambariMetaInfo.getComponentCategory((String) anyObject(), (String) anyObject(),
+        (String) anyObject(), (String) anyObject())).andReturn(componentInfo).anyTimes();
+
+    expect(componentInfo.getCategory()).andReturn("MASTER").anyTimes();
+
+
+    // replay
+    replay(managementController, clusters, cluster,
+        host1,
+        hostResponse1, componentInfo,
+        healthStatus, ambariMetaInfo);
+
+    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
+        type,
+        PropertyHelper.getPropertyIds(type),
+        PropertyHelper.getKeyPropertyIds(type),
+        managementController);
+
+    Set<String> propertyIds = new HashSet<String>();
+
+    propertyIds.add(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID);
+    propertyIds.add(HostResourceProvider.HOST_NAME_PROPERTY_ID);
+    propertyIds.add(HostResourceProvider.HOST_HOST_STATUS_PROPERTY_ID);
+
+    Predicate predicate =
+        new PredicateBuilder().property(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID).equals("Cluster100").
+            toPredicate();
+    Request request = PropertyHelper.getReadRequest(propertyIds);
+    Set<Resource> resources = provider.getResources(request, predicate);
+
+    Assert.assertEquals(1, resources.size());
+    for (Resource resource : resources) {
+      String clusterName = (String) resource.getPropertyValue(HostResourceProvider.HOST_CLUSTER_NAME_PROPERTY_ID);
+      Assert.assertNull(clusterName);
+      String status = (String) resource.getPropertyValue(HostResourceProvider.HOST_HOST_STATUS_PROPERTY_ID);
+      Assert.assertEquals("HEALTHY", status);
+    }
+
+    // verify
+    verify(managementController, clusters, cluster,
+        host1,
+        hostResponse1, componentInfo,
+        healthStatus, ambariMetaInfo);
+  }
+
+  @Test
   public void testGetResources_Status_Healthy() throws Exception {
     Resource.Type type = Resource.Type.Host;