Ver Fonte

AMBARI-8952. Adding new host fails with 500 if only zookeeper is installed (dlysnichenko)

Lisnichenko Dmitro há 10 anos atrás
pai
commit
aaf84e3ac1

+ 9 - 2
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/HostComponentResourceProvider.java

@@ -402,7 +402,10 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
 
     Resource.Type reqOpLvl = determineOperationLevel(requestProperties);
 
-
+    String clusterName = requestProperties.get(RequestOperationLevel.OPERATION_CLUSTER_ID);
+    if (clusterName != null && !clusterName.isEmpty()) {
+      clusterNames.add(clusterName);
+    }
     for (ServiceComponentHostRequest request : requests) {
       validateServiceComponentHostRequest(request);
 
@@ -417,7 +420,11 @@ public class HostComponentResourceProvider extends AbstractControllerResourcePro
 
       logRequestInfo("Received a updateHostComponent request", request);
 
-      clusterNames.add(request.getClusterName());
+      if((clusterName == null || clusterName.isEmpty()) 
+              && (request.getClusterName() != null 
+              && !request.getClusterName().isEmpty())) {
+        clusterNames.add(request.getClusterName());
+      }
 
       if (clusterNames.size() > 1) {
         throw new IllegalArgumentException("Updates to multiple clusters is not"

+ 7 - 0
ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java

@@ -9106,6 +9106,13 @@ public class AmbariManagementControllerTest {
       componentHostRequests.add(new ServiceComponentHostRequest("c1", null, "DATANODE", "host2", "DISABLED"));
       updateHostComponents(amc, componentHostRequests, mapRequestProps, false);
       org.junit.Assert.assertEquals(State.DISABLED, sch.getState());
+      
+      // State should not be changed if componentHostRequests are empty
+      componentHostRequests.clear();
+      mapRequestProps.put(RequestOperationLevel.OPERATION_CLUSTER_ID,"c1");
+      updateHostComponents(amc, componentHostRequests, mapRequestProps, false);
+      org.junit.Assert.assertEquals(State.DISABLED, sch.getState());
+      mapRequestProps.clear();
 
       // ServiceComponentHost remains in disabled after service stop
       assertEquals(sch.getServiceComponentName(),"DATANODE");