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)
*/