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

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


The following commit(s) were added to refs/heads/4.20 by this push:
     new b7c970f45f1 Fix issue with multiple KVM Host entries in host table 
(#12589)
b7c970f45f1 is described below

commit b7c970f45f1deaba32171ab8a1aa15820009e7d9
Author: Nicolas Vazquez <[email protected]>
AuthorDate: Wed Feb 11 09:47:21 2026 -0300

    Fix issue with multiple KVM Host entries in host table (#12589)
---
 .../java/com/cloud/resource/ResourceManager.java   |  2 ++
 .../com/cloud/resource/ResourceManagerImpl.java    | 27 +++++++++++++++++++---
 .../cloud/resource/MockResourceManagerImpl.java    |  5 ++++
 3 files changed, 31 insertions(+), 3 deletions(-)

diff --git 
a/engine/components-api/src/main/java/com/cloud/resource/ResourceManager.java 
b/engine/components-api/src/main/java/com/cloud/resource/ResourceManager.java
index 936e8b3448e..059578ab2ca 100755
--- 
a/engine/components-api/src/main/java/com/cloud/resource/ResourceManager.java
+++ 
b/engine/components-api/src/main/java/com/cloud/resource/ResourceManager.java
@@ -154,6 +154,8 @@ public interface ResourceManager extends ResourceService, 
Configurable {
 
     public HostVO findHostByGuid(String guid);
 
+    HostVO findHostByGuidPrefix(String guid);
+
     public HostVO findHostByName(String name);
 
     HostStats getHostStatistics(Host host);
diff --git a/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java 
b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java
index 12ceac21322..96331477e89 100755
--- a/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java
+++ b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java
@@ -2261,15 +2261,26 @@ public class ResourceManagerImpl extends ManagerBase 
implements ResourceManager,
     private HostVO getNewHost(StartupCommand[] startupCommands) {
         StartupCommand startupCommand = startupCommands[0];
 
-        HostVO host = findHostByGuid(startupCommand.getGuid());
+        String fullGuid = startupCommand.getGuid();
+        logger.debug(String.format("Trying to find Host by guid %s", 
fullGuid));
+        HostVO host = findHostByGuid(fullGuid);
 
         if (host != null) {
+            logger.debug(String.format("Found Host by guid %s: %s", fullGuid, 
host));
             return host;
         }
 
-        host = findHostByGuid(startupCommand.getGuidWithoutResource());
+        String guidPrefix = startupCommand.getGuidWithoutResource();
+        logger.debug(String.format("Trying to find Host by guid prefix %s", 
guidPrefix));
+        host = findHostByGuidPrefix(guidPrefix);
 
-        return host; // even when host == null!
+        if (host != null) {
+            logger.debug(String.format("Found Host by guid prefix %s: %s", 
guidPrefix, host));
+            return host;
+        }
+
+        logger.debug(String.format("Could not find Host by guid %s", 
fullGuid));
+        return null;
     }
 
     protected HostVO createHostVO(final StartupCommand[] cmds, final 
ServerResource resource, final Map<String, String> details, List<String> 
hostTags,
@@ -3296,6 +3307,15 @@ public class ResourceManagerImpl extends ManagerBase 
implements ResourceManager,
     public HostVO findHostByGuid(final String guid) {
         final QueryBuilder<HostVO> sc = QueryBuilder.create(HostVO.class);
         sc.and(sc.entity().getGuid(), Op.EQ, guid);
+        sc.and(sc.entity().getRemoved(), Op.NULL);
+        return sc.find();
+    }
+
+    @Override
+    public HostVO findHostByGuidPrefix(String guid) {
+        final QueryBuilder<HostVO> sc = QueryBuilder.create(HostVO.class);
+        sc.and(sc.entity().getGuid(), Op.LIKE, guid + "%");
+        sc.and(sc.entity().getRemoved(), Op.NULL);
         return sc.find();
     }
 
@@ -3303,6 +3323,7 @@ public class ResourceManagerImpl extends ManagerBase 
implements ResourceManager,
     public HostVO findHostByName(final String name) {
         final QueryBuilder<HostVO> sc = QueryBuilder.create(HostVO.class);
         sc.and(sc.entity().getName(), Op.EQ, name);
+        sc.and(sc.entity().getRemoved(), Op.NULL);
         return sc.find();
     }
 
diff --git 
a/server/src/test/java/com/cloud/resource/MockResourceManagerImpl.java 
b/server/src/test/java/com/cloud/resource/MockResourceManagerImpl.java
index b7bb2238334..48ac105a320 100755
--- a/server/src/test/java/com/cloud/resource/MockResourceManagerImpl.java
+++ b/server/src/test/java/com/cloud/resource/MockResourceManagerImpl.java
@@ -460,6 +460,11 @@ public class MockResourceManagerImpl extends ManagerBase 
implements ResourceMana
         return null;
     }
 
+    @Override
+    public HostVO findHostByGuidPrefix(String guid) {
+        return null;
+    }
+
     /* (non-Javadoc)
      * @see com.cloud.resource.ResourceManager#findHostByName(java.lang.String)
      */

Reply via email to