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.
-// }
}