Przeglądaj źródła

AMBARI-12458. Blueprint based deployments record same host multiple times if it re-registers (smohanty)

Sumit Mohanty 10 lat temu
rodzic
commit
6728797f05

+ 7 - 0
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ProvisionClusterRequest.java

@@ -26,6 +26,8 @@ import org.apache.ambari.server.topology.InvalidTopologyTemplateException;
 import org.apache.ambari.server.topology.NoSuchBlueprintException;
 import org.apache.ambari.server.topology.RequiredPasswordValidator;
 import org.apache.ambari.server.topology.TopologyValidator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -87,6 +89,8 @@ public class ProvisionClusterRequest extends BaseClusterRequest {
    */
   private String defaultPassword;
 
+  private final static Logger LOG = LoggerFactory.getLogger(ProvisionClusterRequest.class);
+
   /**
    * Constructor.
    *
@@ -209,6 +213,8 @@ public class ProvisionClusterRequest extends BaseClusterRequest {
     if (hostGroupProperties.containsKey(HOSTGROUP_HOST_COUNT_PROPERTY)) {
       hostGroupInfo.setRequestedCount(Integer.valueOf(String.valueOf(
           hostGroupProperties.get(HOSTGROUP_HOST_COUNT_PROPERTY))));
+      LOG.info("Stored expected hosts count {} for group {}",
+               hostGroupInfo.getRequestedHostCount(), hostGroupInfo.getHostGroupName());
     }
 
     if (hostGroupProperties.containsKey(HOSTGROUP_HOST_PREDICATE_PROPERTY)) {
@@ -222,6 +228,7 @@ public class ProvisionClusterRequest extends BaseClusterRequest {
       validateHostPredicateProperties(hostPredicate);
       try {
         hostGroupInfo.setPredicate(hostPredicate);
+        LOG.info("Compiled host predicate {} for group {}", hostPredicate, hostGroupInfo.getHostGroupName());
       } catch (InvalidQueryException e) {
         throw new InvalidTopologyTemplateException(
             String.format("Unable to compile host predicate '%s': %s", hostPredicate, e), e);

+ 14 - 3
ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java

@@ -181,10 +181,21 @@ public class TopologyManager {
       }
     }
 
-    if (! matchedToRequest) {
+    if (!matchedToRequest) {
       synchronized (availableHosts) {
-        LOG.info("TopologyManager: Queueing available host {}", hostName);
-        availableHosts.add(host);
+        boolean addToAvailableList = true;
+        for (HostImpl registered : availableHosts) {
+          if (registered.getHostId() == host.getHostId()) {
+            LOG.debug("Host {} re-registered, will not be added to the available hosts list", hostName);
+            addToAvailableList = false;
+            break;
+          }
+        }
+
+        if (addToAvailableList) {
+          LOG.info("TopologyManager: Queueing available host {}", hostName);
+          availableHosts.add(host);
+        }
       }
     }
   }