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

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


The following commit(s) were added to refs/heads/4.19 by this push:
     new a32738c52ed Prevent infinite autoscaling (#11244)
a32738c52ed is described below

commit a32738c52ed6ac98fadb6a3702db7a3c779999e9
Author: Manoj Kumar <manojkr.it...@gmail.com>
AuthorDate: Tue Jul 29 11:41:30 2025 +0530

    Prevent infinite autoscaling (#11244)
    
    * Prevent infinite autoscaling
    
    * Update server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java
    
    Co-authored-by: Suresh Kumar Anaparti <sureshkumar.anapa...@gmail.com>
---
 .../java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDao.java  | 2 ++
 .../com/cloud/network/as/dao/AutoScaleVmGroupVmMapDaoImpl.java   | 9 +++++++++
 .../java/com/cloud/configuration/ConfigurationManagerImpl.java   | 2 ++
 server/src/main/java/com/cloud/network/as/AutoScaleManager.java  | 6 ++++++
 .../src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java | 8 +++++++-
 5 files changed, 26 insertions(+), 1 deletion(-)

diff --git 
a/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDao.java
 
b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDao.java
index 4b25c63403e..409042e7e33 100644
--- 
a/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDao.java
+++ 
b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDao.java
@@ -35,4 +35,6 @@ public interface AutoScaleVmGroupVmMapDao extends 
GenericDao<AutoScaleVmGroupVmM
     public boolean removeByVm(long vmId);
 
     public boolean removeByGroup(long vmGroupId);
+
+    int getErroredInstanceCount(long vmGroupId);
 }
diff --git 
a/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDaoImpl.java
 
b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDaoImpl.java
index 8fca4c26f9a..6e47cfec577 100644
--- 
a/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDaoImpl.java
+++ 
b/engine/schema/src/main/java/com/cloud/network/as/dao/AutoScaleVmGroupVmMapDaoImpl.java
@@ -115,4 +115,13 @@ public class AutoScaleVmGroupVmMapDaoImpl extends 
GenericDaoBase<AutoScaleVmGrou
         sc.setParameters("vmGroupId", vmGroupId);
         return remove(sc) >= 0;
     }
+
+    @Override
+    public int getErroredInstanceCount(long vmGroupId) {
+        SearchCriteria<Integer> sc = CountBy.create();
+        sc.setParameters("vmGroupId", vmGroupId);
+        sc.setJoinParameters("vmSearch", "states", State.Error);
+        final List<Integer> results = customSearch(sc, null);
+        return results.get(0);
+    }
 }
diff --git 
a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java 
b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
index 4c03122e463..b10b6950340 100644
--- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -47,6 +47,7 @@ import javax.naming.ConfigurationException;
 
 
 import com.cloud.hypervisor.HypervisorGuru;
+import com.cloud.network.as.AutoScaleManager;
 import com.cloud.user.AccountManagerImpl;
 import com.cloud.utils.crypt.DBEncryptionUtil;
 import com.cloud.host.HostTagVO;
@@ -570,6 +571,7 @@ public class ConfigurationManagerImpl extends ManagerBase 
implements Configurati
         
configValuesForValidation.add(UserDataManager.VM_USERDATA_MAX_LENGTH_STRING);
         
configValuesForValidation.add(UnmanagedVMsManager.RemoteKvmInstanceDisksCopyTimeout.key());
         
configValuesForValidation.add(UnmanagedVMsManager.ConvertVmwareInstanceToKvmTimeout.key());
+        
configValuesForValidation.add(AutoScaleManager.AutoScaleErroredInstanceThreshold.key());
     }
 
     private void weightBasedParametersForValidation() {
diff --git a/server/src/main/java/com/cloud/network/as/AutoScaleManager.java 
b/server/src/main/java/com/cloud/network/as/AutoScaleManager.java
index cf6aab6a7bb..26598879a51 100644
--- a/server/src/main/java/com/cloud/network/as/AutoScaleManager.java
+++ b/server/src/main/java/com/cloud/network/as/AutoScaleManager.java
@@ -38,6 +38,12 @@ public interface AutoScaleManager extends AutoScaleService {
             "The Number of worker threads to scan the autoscale vm groups.",
             false);
 
+    ConfigKey<Integer> AutoScaleErroredInstanceThreshold = new 
ConfigKey<>(ConfigKey.CATEGORY_ADVANCED, Integer.class,
+            "autoscale.errored.instance.threshold",
+            "10",
+            "The number of Error Instances allowed in autoscale vm groups for 
scale up.",
+            true);
+
     void checkAutoScaleUser(Long autoscaleUserId, long accountId);
 
     boolean deleteAutoScaleVmGroupsByAccount(Long accountId);
diff --git 
a/server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java 
b/server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java
index 5bbd85c2415..8e6b7222da2 100644
--- a/server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java
+++ b/server/src/main/java/com/cloud/network/as/AutoScaleManagerImpl.java
@@ -1716,6 +1716,11 @@ public class AutoScaleManagerImpl extends ManagerBase 
implements AutoScaleManage
             s_logger.warn("number of VM will greater than the maximum in this 
group if scaling up, so do nothing more");
             return false;
         }
+        int erroredInstanceCount = 
autoScaleVmGroupVmMapDao.getErroredInstanceCount(asGroup.getId());
+        if (erroredInstanceCount > 
AutoScaleManager.AutoScaleErroredInstanceThreshold.value()) {
+            s_logger.warn("Number of Errored Instances are greater than the 
threshold in this group for scaling up, so do nothing more");
+            return false;
+        }
         return true;
     }
 
@@ -2202,7 +2207,8 @@ public class AutoScaleManagerImpl extends ManagerBase 
implements AutoScaleManage
         return new ConfigKey<?>[] {
                 AutoScaleStatsInterval,
                 AutoScaleStatsCleanupDelay,
-                AutoScaleStatsWorker
+                AutoScaleStatsWorker,
+                AutoScaleErroredInstanceThreshold
         };
     }
 

Reply via email to