Adding scaling logic to dependent-scaling rule in then section
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/1d32adcc Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/1d32adcc Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/1d32adcc Branch: refs/heads/master Commit: 1d32adcc7d519dc5018d83c3399a81aa1b84360d Parents: 4c86497 Author: Lahiru Sandaruwan <[email protected]> Authored: Fri Dec 5 12:32:20 2014 +0530 Committer: Lahiru Sandaruwan <[email protected]> Committed: Fri Dec 5 12:34:06 2014 +0530 ---------------------------------------------------------------------- .../src/main/conf/drools/dependent-scaling.drl | 38 ++++++++++++++++++++ 1 file changed, 38 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/1d32adcc/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl ---------------------------------------------------------------------- diff --git a/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl b/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl index 6bf9904..6aaf925 100644 --- a/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl +++ b/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl @@ -21,12 +21,14 @@ package org.apache.stratos.autoscaler.rule; import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext; import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm; +import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext; global org.apache.stratos.autoscaler.rule.RuleLog log; global java.lang.String clusterId; global Integer roundedRequiredInstanceCount; global org.apache.stratos.autoscaler.rule.RuleTasksDelegator delegator; global java.lang.String algorithmName; +global java.lang.Boolean isPrimary; rule "Dependent Scaling Rule" dialect "mvel" @@ -41,6 +43,42 @@ dialect "mvel" then + if(scaleUp) { + + int additionalInstances = roundedRequiredInstanceCount - clusterInstanceContext.getNonTerminatedMemberCount(); + int count = 0; + + while(count != additionalInstances){ + ClusterLevelPartitionContext partitionContext = (ClusterLevelPartitionContext)autoscaleAlgorithm.getNextScaleUpPartitionContext(clusterInstanceContext.getPartitionCtxtsAsAnArray()); + if(partitionContext != null){ + log.info("[scale-up] Partition available, hence trying to spawn an instance to scale up!" ); + log.debug("[scale-up] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId ); + delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId(), isPrimary); + count++; + } +// else { +// break; +// } + } + } else if (scaleDown) { + + int redundantInstances = clusterInstanceContext.getNonTerminatedMemberCount() - roundedRequiredInstanceCount; + + int count = 0; + + while(count != redundantInstances){ + ClusterLevelPartitionContext partitionContext = (ClusterLevelPartitionContext)autoscaleAlgorithm.getNextScaleDownPartitionContext(clusterInstanceContext.getPartitionCtxtsAsAnArray()); + if(partitionContext != null){ + log.info("[scale-down] Partition available to scale down, hence trying to terminate an instance to scale down!" ); + log.debug("[scale-down] " + " [partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId ); + delegator.delegateSpawn(partitionContext, clusterId, clusterInstanceContext.getId(), isPrimary); + count++; + } +// else { +// break; +// } + } + } end
