From c1b4bc448c2f27b5c80c9677286762e0673918aa Mon Sep 17 00:00:00 2001 From: Vijay venkatachalam Date: Thu, 20 Sep 2012 17:53:02 +0530 Subject: [PATCH] AutoScale. Check vm group's interval during update with existing policiy's duration --- .../network/as/AutoScaleManagerImpl.java | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java index ab8c4529345..0e5e81be46b 100644 --- a/server/src/com/cloud/network/as/AutoScaleManagerImpl.java +++ b/server/src/com/cloud/network/as/AutoScaleManagerImpl.java @@ -367,7 +367,7 @@ public class AutoScaleManagerImpl implements AutoScaleManager, AutoScaleSe List vmGroupList = _autoScaleVmGroupDao.listByAll(null, profileId); for (AutoScaleVmGroupVO vmGroupVO : vmGroupList) { - if (vmGroupVO.getState().equals(AutoScaleVmGroup.State_Disabled)) { + if (!vmGroupVO.getState().equals(AutoScaleVmGroup.State_Disabled)) { throw new InvalidParameterValueException("The AutoScale Vm Profile can be updated only if the Vm Group it is associated with is disabled in state"); } } @@ -819,13 +819,18 @@ public class AutoScaleManagerImpl implements AutoScaleManager, AutoScaleSe } @DB - protected AutoScaleVmGroupVO checkValidityAndPersist(AutoScaleVmGroupVO vmGroup, List scaleUpPolicyIds, List scaleDownPolicyIds) { + protected AutoScaleVmGroupVO checkValidityAndPersist(AutoScaleVmGroupVO vmGroup, List passedScaleUpPolicyIds, List passedScaleDownPolicyIds) { int minMembers = vmGroup.getMinMembers(); int maxMembers = vmGroup.getMaxMembers(); int interval = vmGroup.getInterval(); List counters = new ArrayList(); List policies = new ArrayList(); List policyIds = new ArrayList(); + List currentScaleUpPolicyIds = new ArrayList(); + List currentScaleDownPolicyIds = new ArrayList(); + if (vmGroup.getCreated() != null) { + ApiDBUtils.getAutoScaleVmGroupPolicyIds(vmGroup.getId(), currentScaleUpPolicyIds, currentScaleDownPolicyIds); + } if (minMembers < 0) { throw new InvalidParameterValueException(ApiConstants.MIN_MEMBERS + " is an invalid value: " + minMembers); @@ -843,12 +848,22 @@ public class AutoScaleManagerImpl implements AutoScaleManager, AutoScaleSe throw new InvalidParameterValueException("interval is an invalid value: " + interval); } - if (scaleUpPolicyIds != null) { - policies.addAll(getAutoScalePolicies("scaleuppolicyid", scaleUpPolicyIds, counters, interval, true)); + if (passedScaleUpPolicyIds != null) { + policies.addAll(getAutoScalePolicies("scaleuppolicyid", passedScaleUpPolicyIds, counters, interval, true)); + policyIds.addAll(passedScaleUpPolicyIds); + } else { + // Run the interval check for existing policies + getAutoScalePolicies("scaleuppolicyid", currentScaleUpPolicyIds, counters, interval, true); + policyIds.addAll(currentScaleUpPolicyIds); } - if (scaleDownPolicyIds != null) { - policies.addAll(getAutoScalePolicies("scaledownpolicyid", scaleDownPolicyIds, counters, interval, false)); + if (passedScaleDownPolicyIds != null) { + policies.addAll(getAutoScalePolicies("scaledownpolicyid", passedScaleDownPolicyIds, counters, interval, false)); + policyIds.addAll(passedScaleDownPolicyIds); + } else { + // Run the interval check for existing policies + getAutoScalePolicies("scaledownpolicyid", currentScaleDownPolicyIds, counters, interval, false); + policyIds.addAll(currentScaleDownPolicyIds); } LoadBalancerVO loadBalancer = getEntityInDatabase(UserContext.current().getCaller(), ApiConstants.LBID, vmGroup.getLoadBalancerId(), _lbDao); @@ -865,21 +880,7 @@ public class AutoScaleManagerImpl implements AutoScaleManager, AutoScaleSe txn.start(); vmGroup = _autoScaleVmGroupDao.persist(vmGroup); - if (scaleUpPolicyIds != null || scaleDownPolicyIds != null) { - List bakupScaleUpPolicyIds = new ArrayList(); - List bakupScaleDownPolicyIds = new ArrayList(); - ApiDBUtils.getAutoScaleVmGroupPolicyIds(vmGroup.getId(), bakupScaleUpPolicyIds, bakupScaleDownPolicyIds); - if (scaleUpPolicyIds == null) { - policyIds.addAll(bakupScaleUpPolicyIds); - } else { - policyIds.addAll(scaleUpPolicyIds); - } - if (scaleDownPolicyIds == null) { - policyIds.addAll(bakupScaleDownPolicyIds); - } else { - policyIds.addAll(scaleDownPolicyIds); - } - + if (passedScaleUpPolicyIds != null || passedScaleDownPolicyIds != null) { _autoScaleVmGroupPolicyMapDao.removeByGroupId(vmGroup.getId()); for (Long policyId : policyIds) { @@ -1129,6 +1130,7 @@ public class AutoScaleManagerImpl implements AutoScaleManager, AutoScaleSe return success; } + @Override public void cleanUpAutoScaleResources(Long accountId) { // cleans Autoscale VmProfiles, AutoScale Policies and Conditions belonging to an account int count = 0;