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/12 12:02:12 UTC

stratos git commit: Update required number of members calculation for memory consumption and load average

Repository: stratos
Updated Branches:
  refs/heads/4.1.0-test 9fff7a31a -> 0e018793e


Update required number of members calculation for memory consumption and load average


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

Branch: refs/heads/4.1.0-test
Commit: 0e018793eb395c31f8740cbac94efa73037f3260
Parents: 9fff7a3
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Fri Dec 12 16:34:09 2014 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Fri Dec 12 16:34:09 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/rule/RuleTasksDelegator.java     | 31 ++++++++++++++++----
 .../src/main/conf/drools/scaling.drl            |  4 +--
 2 files changed, 28 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/0e018793/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 16d4db5..0e89a80 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
@@ -74,6 +74,7 @@ public class RuleTasksDelegator {
 
     public int getNumberOfInstancesRequiredBasedOnRif(float rifPredictedValue, float requestsServedPerInstance, float averageRequestsServedPerInstance, boolean arspiReset) {
 
+
         float requestsInstanceCanHandle = requestsServedPerInstance;
 
         if (arspiReset && averageRequestsServedPerInstance != 0) {
@@ -91,12 +92,32 @@ public class RuleTasksDelegator {
         return (int) Math.ceil(numberOfInstances);
     }
 
-    public int getNumberOfInstancesRequiredBasedOnLoadAndMemoryConsumption(float upperLimit, float lowerLimit, double predictedValue, int activeMemberCount) {
-        double numberOfInstances = 0;
-        if(upperLimit != 0) {
-            numberOfInstances = (activeMemberCount * predictedValue) / upperLimit;
+    public int getNumberOfInstancesRequiredBasedOnMemoryConsumption(float threshold, double predictedValue,
+                                                                    int max, int min) {
+        double numberOfAdditionalInstancesRequired = 0;
+        if(predictedValue != threshold) {
+
+            float scalingRange = 100 - threshold;
+            int instanceRange = max - min;
+
+            if(instanceRange != 0){
+
+                float gradient = scalingRange / instanceRange;
+                numberOfAdditionalInstancesRequired = (predictedValue - threshold) / gradient;
+            }
         }
-        return (int) Math.ceil(numberOfInstances);
+        return (int) Math.ceil(min + numberOfAdditionalInstancesRequired);
+    }
+
+    public int getNumberOfInstancesRequiredBasedOnLoadAverage(float threshold, double predictedValue, int min) {
+
+        double numberOfInstances;
+        if(threshold != 0) {
+
+            numberOfInstances = (min * predictedValue) / threshold;
+            return (int) Math.ceil(numberOfInstances);
+        }
+        return min;
     }
 
     public int getMaxNumberOfInstancesRequired(int numberOfInstancesReuquiredBasedOnRif, int numberOfInstancesReuquiredBasedOnMemoryConsumption, boolean mcReset, int numberOfInstancesReuquiredBasedOnLoadAverage, boolean laReset) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/0e018793/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
index adb1489..0b70dfd 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
@@ -92,8 +92,8 @@ dialect "mvel"
         averageRequestsServedPerInstance : Float() from  clusterInstanceContext.getAverageRequestsServedPerInstance()
 
         numberOfInstancesReuquiredBasedOnRif : Integer() from delegator.getNumberOfInstancesRequiredBasedOnRif(rifPredictedValue, requestsServedPerInstance, averageRequestsServedPerInstance, arspiReset)
-        numberOfInstancesReuquiredBasedOnMemoryConsumption : Integer() from delegator.getNumberOfInstancesRequiredBasedOnLoadAndMemoryConsumption(mcUpperLimit ,  mcUpperLimit, mcPredictedValue ,activeInstancesCount )
-        numberOfInstancesReuquiredBasedOnLoadAverage : Integer() from delegator.getNumberOfInstancesRequiredBasedOnLoadAndMemoryConsumption(laUpperLimit , laUpperLimit, laPredictedValue ,activeInstancesCount )
+        numberOfInstancesReuquiredBasedOnMemoryConsumption : Integer() from delegator.getNumberOfInstancesRequiredBasedOnMemoryConsumption(mcUpperLimit, mcPredictedValue, clusterInstanceContext.getMaxInstanceCount(), clusterInstanceContext.getMinInstanceCount())
+        numberOfInstancesReuquiredBasedOnLoadAverage : Integer() from delegator.getNumberOfInstancesRequiredBasedOnLoadAverage(laUpperLimit, laPredictedValue, clusterInstanceContext.getMinInstanceCount())
 
         numberOfRequiredInstances : Integer() from delegator.getMaxNumberOfInstancesRequired(numberOfInstancesReuquiredBasedOnRif, numberOfInstancesReuquiredBasedOnMemoryConsumption ,mcReset ,numberOfInstancesReuquiredBasedOnLoadAverage, laReset)