Repository: ambari Updated Branches: refs/heads/trunk a799ffdbf -> 4ed70c31e
AMBARI-5020. Lost heartbeat on host but ganglia shows a heartbeat lost (dlysnichenko) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4ed70c31 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4ed70c31 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4ed70c31 Branch: refs/heads/trunk Commit: 4ed70c31eb78dbc48c7afec1bdc18485a0806f34 Parents: a799ffd Author: Lisnichenko Dmitro <dlysniche...@hortonworks.com> Authored: Tue Mar 11 20:38:03 2014 +0200 Committer: Lisnichenko Dmitro <dlysniche...@hortonworks.com> Committed: Tue Mar 11 20:38:52 2014 +0200 ---------------------------------------------------------------------- .../internal/ServiceResourceProvider.java | 28 ++++++------ .../internal/ServiceResourceProviderTest.java | 48 ++++++++++++++++++++ 2 files changed, 63 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/4ed70c31/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java index 1e402eb..c64bb57 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ServiceResourceProvider.java @@ -853,7 +853,10 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider Set<ServiceComponentHostResponse> hostComponentResponses = controller.getHostComponents(Collections.singleton(request)); - State serviceState = null; + State masterState = null; + State clientState = null; + State otherState = null; + boolean hasDisabled = false; boolean hasMaster = false; boolean hasOther = false; @@ -864,7 +867,7 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider stackId.getStackVersion(), hostComponentResponse.getServiceName(), hostComponentResponse.getComponentName()); - if (componentInfo != null) { + if (componentInfo != null) { State state = getHostComponentState(hostComponentResponse); if (state.equals(State.DISABLED)) { @@ -873,29 +876,28 @@ public class ServiceResourceProvider extends AbstractControllerResourceProvider if (componentInfo.isMaster()) { hasMaster = true; if(!state.equals(State.STARTED) && - ( serviceState == null || state.ordinal() > serviceState.ordinal())) { - serviceState = state; + ( masterState == null || state.ordinal() > masterState.ordinal())) { + masterState = state; } } else if (componentInfo.isClient()) { hasClient = true; - if (!(hasMaster || hasOther) && !state.equals(State.INSTALLED) && - (serviceState == null || state.ordinal() > serviceState.ordinal())) { - serviceState = state; + if (!state.equals(State.INSTALLED) && + (clientState == null || state.ordinal() > clientState.ordinal())) { + clientState = state; } } else { hasOther = true; - if (!hasMaster && - (serviceState == null || state.ordinal() > serviceState.ordinal())) { - serviceState = state; + if (otherState == null || state.ordinal() > otherState.ordinal()) { + otherState = state; } } } } } - return hasMaster ? serviceState == null ? State.STARTED : serviceState : - hasOther ? serviceState : - hasClient ? serviceState == null ? State.INSTALLED : serviceState : + return hasMaster ? masterState == null ? State.STARTED : masterState : + hasOther ? otherState : + hasClient ? clientState == null ? State.INSTALLED : clientState : hasDisabled ? State.DISABLED : State.UNKNOWN; } } catch (AmbariException e) { http://git-wip-us.apache.org/repos/asf/ambari/blob/4ed70c31/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java index 634c876..8bc97cd 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ServiceResourceProviderTest.java @@ -950,6 +950,54 @@ public class ServiceResourceProviderTest { } @Test + public void testGangliaServiceState_ArbitraryComponentOrder_STARTED() throws Exception{ + AmbariManagementController managementController = createMock(AmbariManagementController.class); + Clusters clusters = createNiceMock(Clusters.class); + Cluster cluster = createNiceMock(Cluster.class); + AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class); + StackId stackId = createNiceMock(StackId.class); + ComponentInfo componentInfo = createNiceMock(ComponentInfo.class); + + ServiceComponentHostResponse shr1 = new ServiceComponentHostResponse("C1", "GANGLIA", "GANGLIA_MONITOR", "Host100", "STARTED", "", null, null, null); + ServiceComponentHostResponse shr2 = new ServiceComponentHostResponse("C1", "GANGLIA", "GANGLIA_MONITOR", "Host199", "UNKNOWN", "", null, null, null); + ServiceComponentHostResponse shr3 = new ServiceComponentHostResponse("C1", "GANGLIA", "GANGLIA_SERVER", "Host100", "STARTED", "", null, null, null); + + Set<ServiceComponentHostResponse> responses = new LinkedHashSet<ServiceComponentHostResponse>(); + responses.add(shr1); + responses.add(shr2); + responses.add(shr3); + + // set expectations + expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes(); + expect(managementController.getClusters()).andReturn(clusters).anyTimes(); + expect(clusters.getCluster("C1")).andReturn(cluster).anyTimes(); + expect(componentInfo.isMaster()).andReturn(false).once(); + expect(componentInfo.isMaster()).andReturn(false).once(); + expect(componentInfo.isMaster()).andReturn(true).once(); + expect(componentInfo.isClient()).andReturn(false).anyTimes(); + expect(managementController.getHostComponents((Set<ServiceComponentHostRequest>) anyObject())).andReturn(responses).anyTimes(); + expect(cluster.getDesiredStackVersion()).andReturn(stackId); + + expect(stackId.getStackName()).andReturn("S1").anyTimes(); + expect(stackId.getStackVersion()).andReturn("V1").anyTimes(); + + + expect(ambariMetaInfo.getComponentCategory((String) anyObject(), (String) anyObject(), + (String) anyObject(), (String) anyObject())).andReturn(componentInfo).anyTimes(); + + // replay + replay(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo); + + ServiceResourceProvider.ServiceState serviceState = new ServiceResourceProvider.DefaultServiceState(); + + State state = serviceState.getState(managementController, "C1", "GANGLIA"); + Assert.assertEquals(State.STARTED, state); + + // verify + verify(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo); + } + + @Test public void testDefaultServiceState_ClientOnly_INSTALLED() throws Exception{ AmbariManagementController managementController = createMock(AmbariManagementController.class); Clusters clusters = createNiceMock(Clusters.class);