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/01 13:00:12 UTC

stratos git commit: Adding round robin algorithm body and formatting code

Repository: stratos
Updated Branches:
  refs/heads/master 3ae70165c -> 0b7734f4c


Adding round robin algorithm body and formatting code


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

Branch: refs/heads/master
Commit: 0b7734f4c9f1444d064fec93bf9ac59a5883faf2
Parents: 3ae7016
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Mon Dec 1 17:31:42 2014 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Mon Dec 1 17:31:42 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/algorithm/OneAfterAnother.java   |  6 +-
 .../autoscaler/algorithm/RoundRobin.java        | 94 +++++++++-----------
 2 files changed, 45 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/0b7734f4/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
index 99a56ad..5685a30 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/OneAfterAnother.java
@@ -36,9 +36,9 @@ public class OneAfterAnother implements AutoscaleAlgorithm {
     @Override
     public PartitionContext getNextScaleUpPartitionContext(PartitionContext[] partitionContexts) {
 
-        for(PartitionContext partitionContext : partitionContexts){
+        for(PartitionContext partitionContext : partitionContexts) {
 
-            if(partitionContext.getActiveInstanceCount() < partitionContext.getMax()){
+            if(partitionContext.getActiveInstanceCount() < partitionContext.getMax()) {
                 return partitionContext;
             }
         }
@@ -48,7 +48,7 @@ public class OneAfterAnother implements AutoscaleAlgorithm {
     @Override
     public PartitionContext getNextScaleDownPartitionContext(PartitionContext[] partitionContexts) {
 
-        for(int partitionIndex = partitionContexts.length - 1; partitionIndex >= 0; partitionIndex--){
+        for(int partitionIndex = partitionContexts.length - 1; partitionIndex >= 0; partitionIndex--) {
 
             if(partitionContexts[partitionIndex].getActiveInstanceCount() > 0) {
                 return partitionContexts[partitionIndex];

http://git-wip-us.apache.org/repos/asf/stratos/blob/0b7734f4/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
index df98a6b..d92df86 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/algorithm/RoundRobin.java
@@ -30,8 +30,9 @@ import java.util.Arrays;
 import java.util.List;
 
 /**
-* This class is used for selecting a {@link Partition} in round robin manner and checking availability of
- * {@link Partition}s of a {@link org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext}
+* This class is used for selecting a {@link PartitionContext} in round robin manner and checking availability of
+ * {@link PartitionContext}s according to the partitions defined
+ * in {@link org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy}
  *
 */
 public class RoundRobin implements AutoscaleAlgorithm{
@@ -39,63 +40,52 @@ public class RoundRobin implements AutoscaleAlgorithm{
 	private static final Log log = LogFactory.getLog(RoundRobin.class);
 
     @Override
-    public PartitionContext getNextScaleUpPartitionContext(PartitionContext[] partitionContexts){
-        /*try{
-
-            if (log.isDebugEnabled())
-                log.debug(String.format("Searching for a partition to scale up [ClsuterInstance] %s",
-                        instanceContext.getId()))  ;
-            List<?> partitions = Arrays.asList(instanceContext.getPartitionCtxts());
-            int noOfPartitions = partitions.size();
-
-            for(int i=0; i < noOfPartitions; i++) {
-                int currentPartitionIndex = clusterLevelNetworkPartitionContext.getCurrentPartitionIndex();
-                if (partitions.get(currentPartitionIndex) instanceof Partition) {
-                    Partition currentPartition = (Partition) partitions.get(currentPartitionIndex);
-                    String currentPartitionId =  currentPartition.getId();
-
-                    // point to next partition
-                    int nextPartitionIndex = currentPartitionIndex  == noOfPartitions - 1 ? 0 : currentPartitionIndex+1;
-                    clusterLevelNetworkPartitionContext.setCurrentPartitionIndex(nextPartitionIndex);
-                    int nonTerminatedMemberCountOfPartition = clusterLevelNetworkPartitionContext.(currentPartitionId);
-                    if(nonTerminatedMemberCountOfPartition < currentPartition.getPartitionMax()){
-                        // current partition is free
-                        if (log.isDebugEnabled())
-                            log.debug(String.format("A free space found for scale up in partition %s [current] %s [max] %s",
-                                    currentPartitionId, clusterLevelNetworkPartitionContext.getNonTerminatedMemberCountOfPartition(currentPartitionId),
-                                                                    currentPartition.getPartitionMax()))  ;
-                        return currentPartition;
-                    }
-
-                    if(log.isDebugEnabled())
-                        log.debug("No free space for a new instance in partition " + currentPartition.getId());
-
-                }
+    public PartitionContext getNextScaleUpPartitionContext(PartitionContext[] partitionContexts) {
+
+        int selectedIndex = 0;
+        int lowestInstanceCount = 0;
+
+        for(int partitionIndex = 0; partitionIndex < partitionContexts.length - 1; partitionIndex++) {
+
+            if(partitionContexts[partitionIndex].getActiveInstanceCount() < lowestInstanceCount) {
+
+                lowestInstanceCount = partitionContexts[partitionIndex].getActiveInstanceCount();
+                selectedIndex = partitionIndex;
             }
+        }
 
-            // none of the partitions were free.
-            if(log.isDebugEnabled()) {
-                log.debug("No free partition found at network partition " + clusterLevelNetworkPartitionContext);
-    	    }
-        } catch (Exception e) {
-            log.error("Error occurred while searching for next scale up partition", e);
-        }*/
-    return null;
+        if(partitionContexts[selectedIndex].getActiveInstanceCount() < partitionContexts[selectedIndex].getMax()) {
+
+            return partitionContexts[selectedIndex];
+        } else {
+
+            return null;
+        }
     }
 
     @Override
     public PartitionContext getNextScaleDownPartitionContext(PartitionContext[] partitionContexts) {
-        return null;
+
+        int selectedIndex = 0;
+        int highestInstanceCount = 0;
+
+        for(int partitionIndex = partitionContexts.length - 1; partitionIndex >= 0; partitionIndex--) {
+
+            if(partitionContexts[partitionIndex].getActiveInstanceCount() > highestInstanceCount) {
+
+                highestInstanceCount = partitionContexts[partitionIndex].getActiveInstanceCount();
+                selectedIndex = partitionIndex;
+            }
+        }
+
+        if(partitionContexts[selectedIndex].getActiveInstanceCount() < partitionContexts[selectedIndex].getMax()) {
+
+            return partitionContexts[selectedIndex];
+        } else {
+
+            return null;
+        }
     }
 
 
-//    @Override
-//    public boolean scaleUpPartitionContextAvailable(String clusterId) {
-//        return false;  //To change body of implemented methods use File | Settings | File Templates.
-//    }
-//
-//    @Override
-//    public boolean scaleDownPartitionContextAvailable(String clusterId) {
-//        return false;  //To change body of implemented methods use File | Settings | File Templates.
-//    }
 }