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.anaparti@gmail.com>
This commit is contained in:
Manoj Kumar 2025-07-29 11:41:30 +05:30 committed by GitHub
parent ca6d2dc57e
commit a32738c52e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 26 additions and 1 deletions

View File

@ -35,4 +35,6 @@ public interface AutoScaleVmGroupVmMapDao extends GenericDao<AutoScaleVmGroupVmM
public boolean removeByVm(long vmId);
public boolean removeByGroup(long vmGroupId);
int getErroredInstanceCount(long vmGroupId);
}

View File

@ -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);
}
}

View File

@ -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() {

View File

@ -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);

View File

@ -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
};
}