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 <[email protected]> Authored: Mon Nov 4 15:42:44 2013 -0500 Committer: tbeerbower <[email protected]> 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;
