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 <[email protected]> Authored: Mon Dec 1 17:31:42 2014 +0530 Committer: Lahiru Sandaruwan <[email protected]> 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. -// } }
