From 154743a1b4b141437d7a65250027b5c6c0cb777e Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Fri, 21 Mar 2025 07:45:23 -0400 Subject: [PATCH 1/4] Fix issue with allocator not considering subsequent clusters --- .../agent/manager/allocator/impl/RandomAllocator.java | 6 +++--- .../agent/manager/allocator/impl/FirstFitAllocator.java | 7 +++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/plugins/host-allocators/random/src/main/java/com/cloud/agent/manager/allocator/impl/RandomAllocator.java b/plugins/host-allocators/random/src/main/java/com/cloud/agent/manager/allocator/impl/RandomAllocator.java index 53e44ab5aab7..4005249e648f 100644 --- a/plugins/host-allocators/random/src/main/java/com/cloud/agent/manager/allocator/impl/RandomAllocator.java +++ b/plugins/host-allocators/random/src/main/java/com/cloud/agent/manager/allocator/impl/RandomAllocator.java @@ -94,15 +94,15 @@ private List findSuitableHosts(VirtualMachineProfile vmProfile, Deployment return suitableHosts; } String offeringHostTag = offering.getHostTag(); + VMTemplateVO template = (VMTemplateVO)vmProfile.getTemplate(); String templateTag = template.getTemplateTag(); String hostTag = null; if (ObjectUtils.anyNull(offeringHostTag, templateTag)) { hostTag = offeringHostTag; - hostTag = hostTag == null ? templateTag : String.format("%s, %s", hostTag, templateTag); - logger.debug(String.format("Looking for hosts in dc [%s], pod [%s], cluster [%s] and complying with host tag(s): [%s]", dcId, podId, clusterId, hostTag)); + logger.debug("Looking for hosts in dc [{}], pod [{}], cluster [{}] and complying with host tag(s): [{}]", dcId, podId, clusterId, hostTag); } else { - logger.debug("Looking for hosts in dc: " + dcId + " pod:" + podId + " cluster:" + clusterId); + logger.debug("Looking for hosts in dc: {} pod: {} cluster: {}", dcId , podId, clusterId); } if (hosts != null) { // retain all computing hosts, regardless of whether they support routing...it's random after all diff --git a/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java b/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java index 4a5f80571ae7..89857994b094 100644 --- a/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java +++ b/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java @@ -130,8 +130,8 @@ public List allocateTo(VirtualMachineProfile vmProfile, DeploymentPlan pla // FirstFitAllocator should be used for user VMs only since it won't care whether the host is capable of routing or not return new ArrayList<>(); } - - logger.debug("Looking for hosts in zone [{}], pod [{}], cluster [{}]", dcId, podId, clusterId); + String paramAsStringToLog = String.format("zone [%s], pod [%s], cluster [%s]", dcId, podId, clusterId); + logger.debug("Looking for hosts in {}", paramAsStringToLog); String hostTagOnOffering = offering.getHostTag(); String hostTagOnTemplate = template.getTemplateTag(); @@ -203,8 +203,7 @@ public List allocateTo(VirtualMachineProfile vmProfile, DeploymentPlan pla if (clusterHosts.isEmpty()) { - logger.error("No suitable host found for vm [{}] with tags [{}].", vmProfile, hostTagOnOffering); - throw new CloudRuntimeException(String.format("No suitable host found for vm [%s].", vmProfile)); + logger.warn("No suitable host found for VM [{}] with tags {} in {}.", vmProfile, hostTagOnOffering, paramAsStringToLog); } // add all hosts that we are not considering to the avoid list List allhostsInCluster = _hostDao.listAllUpAndEnabledNonHAHosts(type, clusterId, podId, dcId, null); From 63f659c1084745e99a51a64a2e5a08c922c2843a Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Fri, 21 Mar 2025 08:15:33 -0400 Subject: [PATCH 2/4] add missing return --- .../cloud/agent/manager/allocator/impl/FirstFitAllocator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java b/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java index 89857994b094..c3858bf0a91a 100644 --- a/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java +++ b/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java @@ -204,6 +204,7 @@ public List allocateTo(VirtualMachineProfile vmProfile, DeploymentPlan pla if (clusterHosts.isEmpty()) { logger.warn("No suitable host found for VM [{}] with tags {} in {}.", vmProfile, hostTagOnOffering, paramAsStringToLog); + return null; } // add all hosts that we are not considering to the avoid list List allhostsInCluster = _hostDao.listAllUpAndEnabledNonHAHosts(type, clusterId, podId, dcId, null); From d879560776b29729987658c00541d22203b364c4 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Fri, 21 Mar 2025 08:41:03 -0400 Subject: [PATCH 3/4] remove unused import --- .../cloud/agent/manager/allocator/impl/FirstFitAllocator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java b/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java index c3858bf0a91a..590db3406c25 100644 --- a/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java +++ b/server/src/main/java/com/cloud/agent/manager/allocator/impl/FirstFitAllocator.java @@ -25,7 +25,6 @@ import javax.inject.Inject; import javax.naming.ConfigurationException; -import com.cloud.utils.exception.CloudRuntimeException; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.utils.reflectiontostringbuilderutils.ReflectionToStringBuilderUtils; import org.springframework.stereotype.Component; From 0977c5ca5fd306615e11491de3496abd6d62fd5b Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Tue, 25 Mar 2025 16:16:10 -0400 Subject: [PATCH 4/4] update as per inputs --- .../cloud/agent/manager/allocator/impl/RandomAllocator.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/host-allocators/random/src/main/java/com/cloud/agent/manager/allocator/impl/RandomAllocator.java b/plugins/host-allocators/random/src/main/java/com/cloud/agent/manager/allocator/impl/RandomAllocator.java index 4005249e648f..42129944a194 100644 --- a/plugins/host-allocators/random/src/main/java/com/cloud/agent/manager/allocator/impl/RandomAllocator.java +++ b/plugins/host-allocators/random/src/main/java/com/cloud/agent/manager/allocator/impl/RandomAllocator.java @@ -98,8 +98,10 @@ private List findSuitableHosts(VirtualMachineProfile vmProfile, Deployment VMTemplateVO template = (VMTemplateVO)vmProfile.getTemplate(); String templateTag = template.getTemplateTag(); String hostTag = null; - if (ObjectUtils.anyNull(offeringHostTag, templateTag)) { - hostTag = offeringHostTag; + if (ObjectUtils.anyNotNull(offeringHostTag, templateTag)) { + hostTag = ObjectUtils.allNotNull(offeringHostTag, templateTag) ? + String.format("%s, %s", offeringHostTag, templateTag) : + ObjectUtils.firstNonNull(offeringHostTag, templateTag); logger.debug("Looking for hosts in dc [{}], pod [{}], cluster [{}] and complying with host tag(s): [{}]", dcId, podId, clusterId, hostTag); } else { logger.debug("Looking for hosts in dc: {} pod: {} cluster: {}", dcId , podId, clusterId);