fixing no of instances calculation for MC when having lower threshold
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/e9b7c5cb Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/e9b7c5cb Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/e9b7c5cb Branch: refs/heads/master Commit: e9b7c5cb7024ffbb0f833e180cad504e3cbf4025 Parents: 9b61f3f Author: reka <[email protected]> Authored: Wed May 13 15:21:02 2015 +0530 Committer: reka <[email protected]> Committed: Wed May 13 22:41:09 2015 +0530 ---------------------------------------------------------------------- .../monitor/component/GroupMonitor.java | 20 ++++++++++++-------- .../autoscaler/rule/RuleTasksDelegator.java | 6 ++++++ 2 files changed, 18 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/e9b7c5cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java index 4f0f09b..69222ea 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java @@ -144,6 +144,14 @@ public class GroupMonitor extends ParentComponentMonitor { handleScalingDownBeyondMin(instanceContext, networkPartitionContext, false); } + + //Resetting the events events + instanceContext.setIdToScalingOverMaxEvent( + new ConcurrentHashMap<String, ScalingUpBeyondMaxEvent>()); + instanceContext.setIdToScalingEvent( + new ConcurrentHashMap<String, ScalingEvent>()); + instanceContext.setIdToScalingOverMaxEvent( + new ConcurrentHashMap<String, ScalingUpBeyondMaxEvent>()); } } @@ -211,9 +219,6 @@ public class GroupMonitor extends ParentComponentMonitor { } else { notifyParentOnScalingUpBeyondMax(networkPartitionContext, instanceContext); } - //Resetting the max events - instanceContext.setIdToScalingOverMaxEvent( - new ConcurrentHashMap<String, ScalingUpBeyondMaxEvent>()); } /** @@ -236,7 +241,8 @@ public class GroupMonitor extends ParentComponentMonitor { allChildrenScaleDown = true; } } - //all the children sent the scale down only, it will try to scale down + //all the children sent the scale down, then the group-instance will try to scale down or + // if it is a force scale-down if (allChildrenScaleDown || forceScaleDown) { if (hasScalingDependents) { if (nwPartitionContext.getNonTerminatedInstancesCount() > @@ -278,9 +284,6 @@ public class GroupMonitor extends ParentComponentMonitor { } } - //Resetting the events - instanceContext.setIdToScalingDownBeyondMinEvent( - new ConcurrentHashMap<String, ScalingDownBeyondMinEvent>()); } /** @@ -354,7 +357,8 @@ public class GroupMonitor extends ParentComponentMonitor { networkPartitionContext).getMaxInstanceCount(); if (groupScalingEnabled && maxInstances > networkPartitionContext. getNonTerminatedInstancesCount()) { - //increase group by one more instance + //increase group by one more instance and calculate the factor for the group scaling + // and notify parent to scale all the dependent in parallel with this factor float minInstances = ((GroupLevelNetworkPartitionContext) networkPartitionContext).getMinInstanceCount(); http://git-wip-us.apache.org/repos/asf/stratos/blob/e9b7c5cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java index 304387f..e942f1f 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java @@ -95,6 +95,11 @@ public class RuleTasksDelegator { float gradient = scalingRange / instanceRange; numberOfAdditionalInstancesRequired = (predictedValue - threshold) / gradient; } + + if(predictedValue < threshold) { + //Since predicted-value is less, it can be scale-down + return min - 1; + } } return (int) Math.ceil(min + numberOfAdditionalInstancesRequired); @@ -109,6 +114,7 @@ public class RuleTasksDelegator { numberOfInstances = (min * predictedValue) / threshold; return (int) Math.ceil(numberOfInstances); } + return min; }
