This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/master by this push:
     new aecfe6d  server: save GUID for KVM cluster (#3398)
aecfe6d is described below

commit aecfe6d500dd3fa1b6bcef53f58dae7fa87c0447
Author: Rohit Yadav <rohit.ya...@shapeblue.com>
AuthorDate: Wed Jun 12 12:47:24 2019 +0530

    server: save GUID for KVM cluster (#3398)
    
    When a KVM host is added to a cluster, the cluster GUID is null. In case
    the KVM host fails to be added, the GUID is not set to null and if any
    other hosts are added an exception is thrown by the resource manager
    that does not allow addition of hosts to a cluster with existing hosts
    whose GUID is null.
    
    In case of KVM, other hosts may be added in parallel therefore this
    restriction can be safely removed.
    
    Signed-off-by: Rohit Yadav <rohit.ya...@shapeblue.com>
---
 .../kvm/discoverer/LibvirtServerDiscoverer.java         | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git 
a/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
 
b/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
index 0b8b40b..6c9bcac 100644
--- 
a/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
+++ 
b/server/src/main/java/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
@@ -210,6 +210,12 @@ public abstract class LibvirtServerDiscoverer extends 
DiscovererBase implements
             return null;
         }
 
+        // Set cluster GUID based on cluster ID if null
+        if (cluster.getGuid() == null) {
+            
cluster.setGuid(UUID.nameUUIDFromBytes(String.valueOf(clusterId).getBytes()).toString());
+            _clusterDao.update(clusterId, cluster);
+        }
+
         Map<KvmDummyResourceBase, Map<String, String>> resources = new 
HashMap<KvmDummyResourceBase, Map<String, String>>();
         Map<String, String> details = new HashMap<String, String>();
         if (!uri.getScheme().equals("http")) {
@@ -230,8 +236,9 @@ public abstract class LibvirtServerDiscoverer extends 
DiscovererBase implements
             if (existingHosts != null) {
                 for (HostVO existingHost : existingHosts) {
                     if 
(existingHost.getGuid().toLowerCase().startsWith(guid.toLowerCase())) {
-                        s_logger.debug("Skipping " + agentIp + " because " + 
guid + " is already in the database for resource " + existingHost.getGuid());
-                        return null;
+                        final String msg = "Skipping host " + agentIp + " 
because " + guid + " is already in the database for resource " + 
existingHost.getGuid() + " with ID " + existingHost.getUuid();
+                        s_logger.debug(msg);
+                        throw new CloudRuntimeException(msg);
                     }
                 }
             }
@@ -326,12 +333,6 @@ public abstract class LibvirtServerDiscoverer extends 
DiscovererBase implements
 
             details.put("guid", connectedHost.getGuid());
 
-            // place a place holder guid derived from cluster ID
-            if (cluster.getGuid() == null) {
-                
cluster.setGuid(UUID.nameUUIDFromBytes(String.valueOf(clusterId).getBytes()).toString());
-                _clusterDao.update(clusterId, cluster);
-            }
-
             // save user name and password
             _hostDao.loadDetails(connectedHost);
             Map<String, String> hostDetails = connectedHost.getDetails();

Reply via email to