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

pearl11594 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 0da243d6604 Fix issue with allocator not considering subsequent 
clusters (#10603)
0da243d6604 is described below

commit 0da243d660463d36a8db6f6f846335cb5b79268b
Author: Pearl Dsilva <[email protected]>
AuthorDate: Tue Apr 22 03:06:12 2025 -0400

    Fix issue with allocator not considering subsequent clusters (#10603)
    
    * Fix issue with allocator not considering subsequent clusters
    
    * add missing return
    
    * remove unused import
    
    * update as per inputs
---
 .../cloud/agent/manager/allocator/impl/RandomAllocator.java  | 12 +++++++-----
 .../agent/manager/allocator/impl/FirstFitAllocator.java      |  9 ++++-----
 2 files changed, 11 insertions(+), 10 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 53e44ab5aab..42129944a19 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,17 @@ public class RandomAllocator extends AdapterBase implements 
HostAllocator {
             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));
+        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: " + 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 4a5f80571ae..590db3406c2 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 java.util.Map;
 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;
@@ -130,8 +129,8 @@ public class FirstFitAllocator extends AdapterBase 
implements HostAllocator {
             // 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 +202,8 @@ public class FirstFitAllocator extends AdapterBase 
implements HostAllocator {
 
 
         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);
+            return null;
         }
         // add all hosts that we are not considering to the avoid list
         List<HostVO> allhostsInCluster = 
_hostDao.listAllUpAndEnabledNonHAHosts(type, clusterId, podId, dcId, null);

Reply via email to