You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2014/12/05 08:02:30 UTC

[2/2] stratos git commit: Adding scaling logic to dependent-scaling rule in then section

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 <la...@apache.org>
Authored: Fri Dec 5 12:32:20 2014 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
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