Repository: stratos
Updated Branches:
  refs/heads/master a6f4efe6b -> b299559d1


not scaling down if active replicas are less than required replicas


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/bbdc7cf2
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/bbdc7cf2
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/bbdc7cf2

Branch: refs/heads/master
Commit: bbdc7cf258ca0ec996fd2ed13ed34651b53170e6
Parents: f2252b7
Author: R-Rajkumar <[email protected]>
Authored: Sat Oct 11 19:29:28 2014 +0530
Committer: R-Rajkumar <[email protected]>
Committed: Sat Oct 11 19:29:28 2014 +0530

----------------------------------------------------------------------
 .../src/main/conf/container-mincheck.drl        | 15 ++---
 .../src/main/conf/container-scaling.drl         | 62 ++++++++++++--------
 2 files changed, 44 insertions(+), 33 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/bbdc7cf2/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl 
b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
index 9798852..f87a556 100644
--- a/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
+++ b/products/stratos/modules/distribution/src/main/conf/container-mincheck.drl
@@ -35,16 +35,16 @@ dialect "mvel"
            nonTerminatedReplicas : Integer() from 
$kubernetesClusterContext.getNonTerminatedMemberCount()
            isServiceClusterCreated : Boolean() from 
$kubernetesClusterContext.isServiceClusterCreated()
           
-           eval(log.debug("Running minimum rule: [kub-cluster] " 
+kubernetesClusterId + " [cluster] " + clusterId))
-           eval(log.debug("[min-check] " + " [cluster] : " + clusterId + " 
[Replicas] nonTerminated : " + nonTerminatedReplicas))
-          eval(log.debug("[min-check] " + " [cluster] : " + clusterId + " 
[Replicas] minReplicas : " + minReplicas))
+           eval(log.info("Running minimum rule: [kub-cluster] " + 
kubernetesClusterId + " [cluster] " + clusterId))
+           eval(log.info("[min-check] " + " [cluster] : " + clusterId + " 
[Replicas] nonTerminated : " + nonTerminatedReplicas))
+          eval(log.info("[min-check] " + " [cluster] : " + clusterId + " 
[Replicas] minReplicas : " + minReplicas))
           eval(nonTerminatedReplicas < minReplicas)
        then
            if (isServiceClusterCreated) {
              // we suceeded calling startContainer() once, can't call it again
               log.info("[min-check] Decided to scale-up : [cluster] : " + 
clusterId);
-             log.info("[min-check] " + " [cluster] : " + clusterId + " ; 
min-rule not satisfied, expanding cluster to minReplicas : " + minReplicas);
-              $delegator.delegateUpdateContainers($kubernetesClusterContext, 
minReplicas);
+             log.info("[min-check] " + " [cluster] : " + clusterId + " ; 
min-rule not satisfied, scaling up to minReplicas : " + minReplicas);
+              $delegator.delegateScaleUpContainers($kubernetesClusterContext, 
minReplicas);
           } else {
              // we should call startContainer
               log.info("[min-check] Decided to create the cluster : [cluster] 
: " + clusterId);
@@ -60,12 +60,13 @@ dialect "mvel"
            kubernetesClusterId : String() from 
$kubernetesClusterContext.getKubernetesClusterID()
            obsoleteReplicas : Integer() from 
$kubernetesClusterContext.getObsoletedMembers().size()
 
-           eval(log.debug("Running obsolete containers rule [kub-cluster] : " 
+ kubernetesClusterId + " [cluster] : " + clusterId))
-           eval(log.debug("[obsolete-check] " + "[cluster] : " + clusterId + " 
[Replicas] obsoleteReplicas : " + obsoleteReplicas))
+           eval(log.info("Running obsolete containers rule [kub-cluster] : " + 
kubernetesClusterId + " [cluster] : " + clusterId))
+           eval(log.info("[obsolete-check] " + "[cluster] : " + clusterId + " 
[Replicas] obsoleteReplicas : " + obsoleteReplicas))
            
eval($kubernetesClusterContext.getObsoletedMembers().keySet().size() > 0)
            memberId : String() from 
$kubernetesClusterContext.getObsoletedMembers().keySet()
            eval(log.debug("[obsolete-check] [kub-cluster] : " + 
kubernetesClusterId + " [cluster] : " + clusterId + " Member id : " + memberId))
         then
+           log.info("[obsolete-check] Terminating the obsolete member with id 
: " + memberId + " in the cluster : " + clusterId);
            $delegator.delegateTerminateContainer($kubernetesClusterContext, 
memberId);
 end
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/bbdc7cf2/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/distribution/src/main/conf/container-scaling.drl 
b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
index 46d9aeb..1aec0b0 100644
--- a/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/container-scaling.drl
@@ -31,7 +31,7 @@ global java.lang.Boolean rifReset;
 global java.lang.Boolean mcReset;
 global java.lang.Boolean laReset;
 
-rule "Scaling Rule"
+rule "Containers Scaling Rule"
 dialect "mvel"
        when
         $kubernetesClusterContext : KubernetesClusterContext ()
@@ -39,8 +39,9 @@ dialect "mvel"
        minReplicas : Integer() from $kubernetesClusterContext.getMinReplicas()
         maxReplicas : Integer() from $kubernetesClusterContext.getMaxReplicas()
         nonTerminatedReplicas : Integer() from 
$kubernetesClusterContext.getNonTerminatedMemberCount()
+        activeReplicas : Integer() from 
$kubernetesClusterContext.getActiveMemberCount()
 
-        eval(log.debug("Running scaling rule [kub-cluster] : " + 
kubernetesClusterId + " [cluster] : " + clusterId))
+        eval(log.info("Running scaling rule [kub-cluster] : " + 
kubernetesClusterId + " [cluster] : " + clusterId))
        
        $loadThresholds : LoadThresholds() from  
autoscalePolicy.getLoadThresholds()
 
@@ -72,16 +73,17 @@ dialect "mvel"
         scaleUpForMc : Boolean() from (mcReset && (mcPredictedValue > 
mcUpperLimit))
         scaleUpForLa : Boolean() from (laReset && (laPredictedValue > 
laUpperLimit))
 
-       scaleDownForRif : Boolean() from (rifReset && (rifPredictedValue < 
rifLowerLimit))
-        scaleDownForMc : Boolean() from (mcReset && (mcPredictedValue < 
mcLowerLimit)) 
-        scaleDownForLa : Boolean() from (laReset && (laPredictedValue < 
laLowerLimit))
+       scaleDownForRif : Boolean() from (rifPredictedValue < rifUpperLimit)
+        scaleDownForMc : Boolean() from (mcReset && (mcPredictedValue < 
mcUpperLimit)) 
+        scaleDownForLa : Boolean() from (laReset && (laPredictedValue < 
laUpperLimit))
 
         scaleUp : Boolean() from (scaleUpForRif || scaleUpForMc || 
scaleUpForLa)
-        scaleDown : Boolean() from (scaleDownForRif && scaleDownForMc &&  
scaleDownForLa)
+        scaleDown : Boolean() from (scaleDownForRif && scaleDownForMc && 
scaleDownForLa)
 
-        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[Replicas] nonTerminated : " + nonTerminatedReplicas))
-       eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[Replicas] minReplicas : " + minReplicas))
-       eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[Replicas] maxReplicas : " + maxReplicas))
+       eval(log.info("[scaling] " + " [cluster] : " + clusterId + " [Replicas] 
minReplicas : " + minReplicas))
+       eval(log.info("[scaling] " + " [cluster] : " + clusterId + " [Replicas] 
maxReplicas : " + maxReplicas))
+       eval(log.info("[scaling] " + " [cluster] : " + clusterId + " [Replicas] 
nonTerminated : " + nonTerminatedReplicas))
+       eval(log.info("[scaling] " + " [cluster] : " + clusterId + " [Replicas] 
activeReplicas : " + activeReplicas))
 
         eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[RequestInFlight] resetted ? : " + rifReset))
         eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[RequestInFlight] predicted value : " + rifPredictedValue))
@@ -89,17 +91,17 @@ dialect "mvel"
         eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[RequestInFlight] lower limit : " + rifLowerLimit))
 
        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[MemoryConsumption] resetted ? : " + mcReset))
-        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[MemoryConsumption] predicted value : " + mcPredictedValue))
-        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[MemoryConsumption] upper limit : " + mcUpperLimit))
-        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[MemoryConsumption] lower limit : " + mcLowerLimit))
+        eval(log.info("[scaling] " + " [cluster] : " + clusterId + " 
[MemoryConsumption] predicted value : " + mcPredictedValue))
+        eval(log.info("[scaling] " + " [cluster] : " + clusterId + " 
[MemoryConsumption] upper limit : " + mcUpperLimit))
+        eval(log.info("[scaling] " + " [cluster] : " + clusterId + " 
[MemoryConsumption] lower limit : " + mcLowerLimit))
 
        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[LoadAverage] resetted ? : " + laReset))
-        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[LoadAverage] predicted value : " + laPredictedValue))
-        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[LoadAverage] upper limit : " + laUpperLimit))
-        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
[LoadAverage] lower limit : " + laLowerLimit))
+        eval(log.info("[scaling] " + " [cluster] : " + clusterId + " 
[LoadAverage] predicted value : " + laPredictedValue))
+        eval(log.info("[scaling] " + " [cluster] : " + clusterId + " 
[LoadAverage] upper limit : " + laUpperLimit))
+        eval(log.info("[scaling] " + " [cluster] : " + clusterId + " 
[LoadAverage] lower limit : " + laLowerLimit))
 
-        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " scale-up 
action : " + scaleUp))
-        eval(log.debug("[scaling] " + " [cluster] : " + clusterId + " 
scale-down action : " + scaleDown))
+        eval(log.info("[scaling] " + " [cluster] : " + clusterId + " scale-up 
action : " + scaleUp))
+        eval(log.info("[scaling] " + " [cluster] : " + clusterId + " 
scale-down action : " + scaleDown))
 
        then
         if (scaleUp) {
@@ -139,23 +141,31 @@ dialect "mvel"
             if (requiredReplicas > nonTerminatedReplicas) {
               log.info("[scaling] Decided to scale-up : [cluster] : " + 
clusterId);
              log.info("[scaling-up] " + " [cluster] : " + clusterId + " valid 
number of replicas to expand : " + requiredReplicas);
-             $delegator.delegateUpdateContainers($kubernetesClusterContext, 
requiredReplicas);
+             $delegator.delegateScaleUpContainers($kubernetesClusterContext, 
requiredReplicas);
             }
             //shrink the cluster
             if (requiredReplicas < nonTerminatedReplicas) {
-              log.info("[scaling] Decided to scale-down : [cluster] : " + 
clusterId);
-             log.info("[scaling-down] " + " [cluster] : " + clusterId + " 
valid number of replicas to shrink : " + requiredReplicas);
-             $delegator.delegateUpdateContainers($kubernetesClusterContext, 
requiredReplicas);
+              if (requiredReplicas < activeReplicas) {
+                log.info("[scaling] Decided to scale-down : [cluster] : " + 
clusterId);
+               log.info("[scaling-down] " + " [cluster] : " + clusterId + " 
valid number of replicas to shrink : " + requiredReplicas);
+               
$delegator.delegateScaleDownContainers($kubernetesClusterContext, 
requiredReplicas);
+              } else {
+               log.info("[scaling] " + " [cluster] : " + clusterId + " Even if 
requiredReplicas < nonTerminatedReplicas, still requiredReplicas >= 
activeReplicas ; hence not scaling down ");
+              }
             }
             if (requiredReplicas == nonTerminatedReplicas) {
-             log.info("[scaling] " + " [cluster] : " + clusterId + "non 
terminated replicas and predicted replicas are same");
+             log.info("[scaling] " + " [cluster] : " + clusterId + " Non 
terminated replicas and predicted replicas are same");
             }
             
         } else if (scaleDown) {
-            log.info("[scaling] Decided to scale-down [cluster] : " + 
clusterId);
-            log.info("[scaling-down] " + " [cluster] : " + clusterId + " 
shrink the cluster to minReplicas : " + minReplicas);
-            //shrink the cluster to minReplicas
-            $delegator.delegateUpdateContainers($kubernetesClusterContext, 
minReplicas);
+            if (activeReplicas > minReplicas) {
+              log.info("[scaling] Decided to scale-down [cluster] : " + 
clusterId);
+              log.info("[scaling-down] " + " [cluster] : " + clusterId + " 
shrink the cluster to minReplicas : " + minReplicas);
+              //shrink the cluster to minReplicas
+              
$delegator.delegateScaleDownContainers($kubernetesClusterContext, minReplicas);
+            } else {
+             log.info("[scaling] " + " [cluster] : " + clusterId + " Even if 
all predicted stats < upperLimit, activeReplicas == minReplicas ; hence not 
scaling down ");
+            }
         } else {
             log.info("[scaling] No decision made to either scale up or down 
... ");
         }

Reply via email to