Преглед на файлове

AMBARI-5627 - Some services are INSTALLED, but host state is HEALTHY

tbeerbower преди 11 години
родител
ревизия
8ae56643bc

+ 19 - 7
contrib/ambari-scom/ambari-scom-server/src/main/java/org/apache/ambari/msi/ClusterDefinition.java

@@ -210,11 +210,14 @@ public class ClusterDefinition {
     }
   }
 
-  private void init() {
-    initComponentNameMap();
-    initComponentServiceMap();
-  }
 
+  // ----- ClusterDefinition -------------------------------------------------
+
+  /**
+   * Get the major stack version for this cluster.
+   *
+   * @return the major stack version
+   */
   public Integer getMajorStackVersion() {
     if(StringUtils.isNotEmpty(versionId)) {
       String majorVersion = StringUtils.substring(versionId, 4, 5);
@@ -225,6 +228,11 @@ public class ClusterDefinition {
     return null;
   }
 
+  /**
+   * Get the minor stack version for this cluster.
+   *
+   * @return the minor stack version
+   */
   public Integer getMinorStackVersion() {
     if(StringUtils.isNotEmpty(versionId)) {
       String majorVersion = StringUtils.substring(versionId, 6, 7);
@@ -235,8 +243,6 @@ public class ClusterDefinition {
     return null;
   }
 
-  // ----- ClusterDefinition -------------------------------------------------
-
   /**
    * Get the name of the cluster.
    *
@@ -326,7 +332,7 @@ public class ClusterDefinition {
           Set<String> componentNames = hostEntry.getValue();
           for (String componentName : componentNames) {
             if (isClientOnlyComponent(componentName)) continue;
-            if (stateProvider.getRunningState(hostName, componentName) == StateProvider.State.Unknown) {
+            if (stateProvider.getRunningState(hostName, componentName) != StateProvider.State.Running) {
               return "UNHEALTHY";
             }
           }
@@ -534,6 +540,12 @@ public class ClusterDefinition {
 
   // ----- helper methods ----------------------------------------------------
 
+  // initialize
+  private void init() {
+    initComponentNameMap();
+    initComponentServiceMap();
+  }
+
   // record a process and create the corresponding request and task resource
   private synchronized int recordProcess(StateProvider.Process process, int requestId, String context) {
 

+ 19 - 0
contrib/ambari-scom/ambari-scom-server/src/test/java/org/apache/ambari/msi/ClusterDefinitionTest.java

@@ -119,6 +119,25 @@ public class ClusterDefinitionTest {
     Assert.assertTrue(hostComponents.contains("DATANODE"));
   }
 
+  @Test
+  public void testGetHostState() throws Exception {
+    TestStateProvider stateProvider = new TestStateProvider();
+    TestClusterDefinitionProvider definitionProvider = new TestClusterDefinitionProvider();
+    TestHostInfoProvider hostInfoProvider = new TestHostInfoProvider();
+
+    ClusterDefinition clusterDefinition = new ClusterDefinition(stateProvider, definitionProvider, hostInfoProvider);
+    Assert.assertEquals("HEALTHY", clusterDefinition.getHostState("NAMENODE_MASTER.acme.com"));
+
+    stateProvider.setState(StateProvider.State.Stopped);
+    Assert.assertEquals("UNHEALTHY", clusterDefinition.getHostState("NAMENODE_MASTER.acme.com"));
+
+    stateProvider.setState(StateProvider.State.Paused);
+    Assert.assertEquals("UNHEALTHY", clusterDefinition.getHostState("NAMENODE_MASTER.acme.com"));
+
+    stateProvider.setState(StateProvider.State.Unknown);
+    Assert.assertEquals("UNHEALTHY", clusterDefinition.getHostState("NAMENODE_MASTER.acme.com"));
+  }
+
   @Test
   public void testSetServiceState_IfStateAlreadySetToDesired() {
     StateProvider mockStateProvider = createStrictMock(StateProvider.class);