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 <[email protected]>
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 <[email protected]>
---
.../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
};
}