Move lists which has group instance status to GroupLevelNetworkPartitionContext and ApplicationLevelNetworkPartitionContext
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/baed9aab Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/baed9aab Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/baed9aab Branch: refs/heads/master Commit: baed9aabe7b0a26ccb47d1032642d63fd27e5b43 Parents: 75d55a0 Author: Lahiru Sandaruwan <[email protected]> Authored: Tue May 19 13:16:01 2015 +0530 Committer: Lahiru Sandaruwan <[email protected]> Committed: Tue May 19 15:30:57 2015 +0530 ---------------------------------------------------------------------- ...ApplicationLevelNetworkPartitionContext.java | 174 ++++++++++++++++++ .../GroupLevelNetworkPartitionContext.java | 177 ++++++++++++++++++- .../network/NetworkPartitionContext.java | 173 +----------------- 3 files changed, 351 insertions(+), 173 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/baed9aab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java index 0370ccb..c2a999a 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java @@ -20,8 +20,11 @@ package org.apache.stratos.autoscaler.context.partition.network; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.autoscaler.context.InstanceContext; import java.io.Serializable; +import java.util.Iterator; +import java.util.List; /** * Holds runtime data of a network partition. @@ -29,6 +32,15 @@ import java.io.Serializable; public class ApplicationLevelNetworkPartitionContext extends NetworkPartitionContext implements Serializable { private static final Log log = LogFactory.getLog(ApplicationLevelNetworkPartitionContext.class); private boolean createdOnBurst; + //active instances + private List<InstanceContext> activeInstances; + //pending instances + private List<InstanceContext> pendingInstances; + //terminating pending instances + private List<InstanceContext> terminatingPending; + private String partitionAlgorithm; + private int pendingMembersFailureCount = 0; + public ApplicationLevelNetworkPartitionContext(String id) { super(id); @@ -82,4 +94,166 @@ public class ApplicationLevelNetworkPartitionContext extends NetworkPartitionCon this.createdOnBurst = createdOnBurst; } + + public List<InstanceContext> getActiveInstances() { + return activeInstances; + } + + public void setActiveInstances(List<InstanceContext> activeInstances) { + this.activeInstances = activeInstances; + } + + public List<InstanceContext> getPendingInstances() { + return pendingInstances; + } + + public void setPendingInstances(List<InstanceContext> pendingInstances) { + this.pendingInstances = pendingInstances; + } + + public void addPendingInstance(InstanceContext context) { + this.pendingInstances.add(context); + } + + public int getPendingInstancesCount() { + return this.pendingInstances.size(); + } + + public int getActiveInstancesCount() { + return this.activeInstances.size(); + } + + public InstanceContext getActiveInstance(String instanceId) { + for (InstanceContext instanceContext : activeInstances) { + if (instanceId.equals(instanceContext.getId())) { + return instanceContext; + } + } + return null; + } + + public InstanceContext getPendingInstance(String instanceId) { + for (InstanceContext instanceContext : pendingInstances) { + if (instanceId.equals(instanceContext.getId())) { + return instanceContext; + } + } + return null; + } + + + public void movePendingInstanceToActiveInstances(String instanceId) { + if (instanceId == null) { + return; + } + synchronized (pendingInstances) { + Iterator<InstanceContext> iterator = pendingInstances.listIterator(); + while (iterator.hasNext()) { + InstanceContext pendingInstance = iterator.next(); + if (pendingInstance == null) { + iterator.remove(); + continue; + } + if (instanceId.equals(pendingInstance.getId())) { + // member is activated + // remove from pending list + iterator.remove(); + // add to the activated list + this.activeInstances.add(pendingInstance); + pendingMembersFailureCount = 0; + if (log.isDebugEnabled()) { + log.debug(String.format("Pending instance is removed and added to the " + + "activated instance list. [Instance Id] %s", instanceId)); + } + break; + } + } + } + } + + public void moveActiveInstanceToTerminationPendingInstances(String instanceId) { + if (instanceId == null) { + return; + } + synchronized (activeInstances) { + Iterator<InstanceContext> iterator = activeInstances.listIterator(); + while (iterator.hasNext()) { + InstanceContext activeInstance = iterator.next(); + if (activeInstance == null) { + iterator.remove(); + continue; + } + if (instanceId.equals(activeInstance.getId())) { + // member is activated + // remove from pending list + iterator.remove(); + // add to the activated list + this.terminatingPending.add(activeInstance); + if (log.isDebugEnabled()) { + log.debug(String.format("Active instance is removed and added to the " + + "termination pending instance list. [Instance Id] %s", instanceId)); + } + break; + } + } + } + } + + public void movePendingInstanceToTerminationPendingInstances(String instanceId) { + if (instanceId == null) { + return; + } + synchronized (pendingInstances) { + Iterator<InstanceContext> iterator = pendingInstances.listIterator(); + while (iterator.hasNext()) { + InstanceContext pendingInstance = iterator.next(); + if (pendingInstance == null) { + iterator.remove(); + continue; + } + if (instanceId.equals(pendingInstance.getId())) { + // member is activated + // remove from pending list + iterator.remove(); + // add to the activated list + this.terminatingPending.add(pendingInstance); + if (log.isDebugEnabled()) { + log.debug(String.format("Pending instance is removed and added to the " + + "termination pending instance list. [Instance Id] %s", instanceId)); + } + break; + } + } + } + } + + public int getNonTerminatedInstancesCount() { + return this.activeInstances.size() + this.pendingInstances.size(); + } + + public List<InstanceContext> getTerminatingPending() { + return terminatingPending; + } + + public void setTerminatingPending(List<InstanceContext> terminatingPending) { + this.terminatingPending = terminatingPending; + } + + public boolean removeTerminationPendingInstance(String instanceId) { + if (id == null) { + return false; + } + synchronized (pendingInstances) { + for (Iterator<InstanceContext> iterator = pendingInstances.iterator(); iterator.hasNext(); ) { + InstanceContext pendingInstance = iterator.next(); + if (id.equals(pendingInstance.getId())) { + iterator.remove(); + return true; + } + + } + } + return false; + } + } http://git-wip-us.apache.org/repos/asf/stratos/blob/baed9aab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java index 6e174ad..85a0236 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java @@ -20,10 +20,12 @@ package org.apache.stratos.autoscaler.context.partition.network; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.autoscaler.context.InstanceContext; import org.apache.stratos.autoscaler.context.partition.GroupLevelPartitionContext; import java.io.Serializable; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; /** @@ -33,11 +35,18 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i private static final Log log = LogFactory.getLog(GroupLevelNetworkPartitionContext.class); private int scaleDownRequestsCount = 0; private float averageRequestsServedPerInstance; + private int pendingMembersFailureCount = 0; private int minInstanceCount = 0, maxInstanceCount = 0; private int requiredInstanceCountBasedOnStats; private int requiredInstanceCountBasedOnDependencies; + //active instances + private List<InstanceContext> activeInstances; + //pending instances + private List<InstanceContext> pendingInstances; + //terminating pending instances + private List<InstanceContext> terminatingPending; private String partitionAlgorithm; //Group level partition contexts @@ -53,7 +62,9 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i partitionContexts = new ArrayList<GroupLevelPartitionContext>(); requiredInstanceCountBasedOnStats = minInstanceCount; requiredInstanceCountBasedOnDependencies = minInstanceCount; - + pendingInstances = new ArrayList<InstanceContext>(); + activeInstances = new ArrayList<InstanceContext>(); + terminatingPending = new ArrayList<InstanceContext>(); } @@ -62,6 +73,9 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i partitionContexts = new ArrayList<GroupLevelPartitionContext>(); requiredInstanceCountBasedOnStats = minInstanceCount; requiredInstanceCountBasedOnDependencies = minInstanceCount; + pendingInstances = new ArrayList<InstanceContext>(); + activeInstances = new ArrayList<InstanceContext>(); + terminatingPending = new ArrayList<InstanceContext>(); } @@ -211,5 +225,166 @@ public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext i return null; } + public List<InstanceContext> getActiveInstances() { + return activeInstances; + } + + public void setActiveInstances(List<InstanceContext> activeInstances) { + this.activeInstances = activeInstances; + } + + public List<InstanceContext> getPendingInstances() { + return pendingInstances; + } + + public void setPendingInstances(List<InstanceContext> pendingInstances) { + this.pendingInstances = pendingInstances; + } + + public void addPendingInstance(InstanceContext context) { + this.pendingInstances.add(context); + } + + public int getPendingInstancesCount() { + return this.pendingInstances.size(); + } + + public int getActiveInstancesCount() { + return this.activeInstances.size(); + } + + public InstanceContext getActiveInstance(String instanceId) { + for (InstanceContext instanceContext : activeInstances) { + if (instanceId.equals(instanceContext.getId())) { + return instanceContext; + } + } + return null; + } + + public InstanceContext getPendingInstance(String instanceId) { + for (InstanceContext instanceContext : pendingInstances) { + if (instanceId.equals(instanceContext.getId())) { + return instanceContext; + } + } + return null; + } + + + public void movePendingInstanceToActiveInstances(String instanceId) { + if (instanceId == null) { + return; + } + synchronized (pendingInstances) { + Iterator<InstanceContext> iterator = pendingInstances.listIterator(); + while (iterator.hasNext()) { + InstanceContext pendingInstance = iterator.next(); + if (pendingInstance == null) { + iterator.remove(); + continue; + } + if (instanceId.equals(pendingInstance.getId())) { + // member is activated + // remove from pending list + iterator.remove(); + // add to the activated list + this.activeInstances.add(pendingInstance); + pendingMembersFailureCount = 0; + if (log.isDebugEnabled()) { + log.debug(String.format("Pending instance is removed and added to the " + + "activated instance list. [Instance Id] %s", instanceId)); + } + break; + } + } + } + } + + public void moveActiveInstanceToTerminationPendingInstances(String instanceId) { + if (instanceId == null) { + return; + } + synchronized (activeInstances) { + Iterator<InstanceContext> iterator = activeInstances.listIterator(); + while (iterator.hasNext()) { + InstanceContext activeInstance = iterator.next(); + if (activeInstance == null) { + iterator.remove(); + continue; + } + if (instanceId.equals(activeInstance.getId())) { + // member is activated + // remove from pending list + iterator.remove(); + // add to the activated list + this.terminatingPending.add(activeInstance); + if (log.isDebugEnabled()) { + log.debug(String.format("Active instance is removed and added to the " + + "termination pending instance list. [Instance Id] %s", instanceId)); + } + break; + } + } + } + } + + public void movePendingInstanceToTerminationPendingInstances(String instanceId) { + if (instanceId == null) { + return; + } + synchronized (pendingInstances) { + Iterator<InstanceContext> iterator = pendingInstances.listIterator(); + while (iterator.hasNext()) { + InstanceContext pendingInstance = iterator.next(); + if (pendingInstance == null) { + iterator.remove(); + continue; + } + if (instanceId.equals(pendingInstance.getId())) { + // member is activated + // remove from pending list + iterator.remove(); + // add to the activated list + this.terminatingPending.add(pendingInstance); + if (log.isDebugEnabled()) { + log.debug(String.format("Pending instance is removed and added to the " + + "termination pending instance list. [Instance Id] %s", instanceId)); + } + break; + } + } + } + } + + public int getNonTerminatedInstancesCount() { + return this.activeInstances.size() + this.pendingInstances.size(); + } + + public List<InstanceContext> getTerminatingPending() { + return terminatingPending; + } + + public void setTerminatingPending(List<InstanceContext> terminatingPending) { + this.terminatingPending = terminatingPending; + } + + public boolean removeTerminationPendingInstance(String instanceId) { + if (id == null) { + return false; + } + synchronized (pendingInstances) { + for (Iterator<InstanceContext> iterator = pendingInstances.iterator(); iterator.hasNext(); ) { + InstanceContext pendingInstance = iterator.next(); + if (id.equals(pendingInstance.getId())) { + iterator.remove(); + return true; + } + + } + } + return false; + } + } http://git-wip-us.apache.org/repos/asf/stratos/blob/baed9aab/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java index f7384d6..563c415 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/NetworkPartitionContext.java @@ -30,23 +30,14 @@ import java.util.*; public abstract class NetworkPartitionContext { private static final Log log = LogFactory.getLog(NetworkPartitionContext.class); //id of the network partition context - private final String id; + protected final String id; //group instances kept inside a partition private Map<String, InstanceContext> instanceIdToInstanceContextMap; - //active instances - private List<InstanceContext> activeInstances; - //pending instances - private List<InstanceContext> pendingInstances; - //terminating pending instances - private List<InstanceContext> terminatingPending; private int pendingMembersFailureCount = 0; protected NetworkPartitionContext(String id) { this.id = id; instanceIdToInstanceContextMap = new HashMap<String, InstanceContext>(); - pendingInstances = new ArrayList<InstanceContext>(); - activeInstances = new ArrayList<InstanceContext>(); - terminatingPending = new ArrayList<InstanceContext>(); } @@ -78,166 +69,4 @@ public abstract class NetworkPartitionContext { public boolean containsInstanceContext(String instanceId) { return this.instanceIdToInstanceContextMap.containsKey(instanceId); } - - public List<InstanceContext> getActiveInstances() { - return activeInstances; - } - - public void setActiveInstances(List<InstanceContext> activeInstances) { - this.activeInstances = activeInstances; - } - - public List<InstanceContext> getPendingInstances() { - return pendingInstances; - } - - public void setPendingInstances(List<InstanceContext> pendingInstances) { - this.pendingInstances = pendingInstances; - } - - public void addPendingInstance(InstanceContext context) { - this.pendingInstances.add(context); - } - - public int getPendingInstancesCount() { - return this.pendingInstances.size(); - } - - public int getActiveInstancesCount() { - return this.activeInstances.size(); - } - - public InstanceContext getActiveInstance(String instanceId) { - for (InstanceContext instanceContext : activeInstances) { - if (instanceId.equals(instanceContext.getId())) { - return instanceContext; - } - } - return null; - } - - public InstanceContext getPendingInstance(String instanceId) { - for (InstanceContext instanceContext : pendingInstances) { - if (instanceId.equals(instanceContext.getId())) { - return instanceContext; - } - } - return null; - } - - - public void movePendingInstanceToActiveInstances(String instanceId) { - if (instanceId == null) { - return; - } - synchronized (pendingInstances) { - Iterator<InstanceContext> iterator = pendingInstances.listIterator(); - while (iterator.hasNext()) { - InstanceContext pendingInstance = iterator.next(); - if (pendingInstance == null) { - iterator.remove(); - continue; - } - if (instanceId.equals(pendingInstance.getId())) { - // member is activated - // remove from pending list - iterator.remove(); - // add to the activated list - this.activeInstances.add(pendingInstance); - pendingMembersFailureCount = 0; - if (log.isDebugEnabled()) { - log.debug(String.format("Pending instance is removed and added to the " + - "activated instance list. [Instance Id] %s", instanceId)); - } - break; - } - } - } - } - - public void moveActiveInstanceToTerminationPendingInstances(String instanceId) { - if (instanceId == null) { - return; - } - synchronized (activeInstances) { - Iterator<InstanceContext> iterator = activeInstances.listIterator(); - while (iterator.hasNext()) { - InstanceContext activeInstance = iterator.next(); - if (activeInstance == null) { - iterator.remove(); - continue; - } - if (instanceId.equals(activeInstance.getId())) { - // member is activated - // remove from pending list - iterator.remove(); - // add to the activated list - this.terminatingPending.add(activeInstance); - if (log.isDebugEnabled()) { - log.debug(String.format("Active instance is removed and added to the " + - "termination pending instance list. [Instance Id] %s", instanceId)); - } - break; - } - } - } - } - - public void movePendingInstanceToTerminationPendingInstances(String instanceId) { - if (instanceId == null) { - return; - } - synchronized (pendingInstances) { - Iterator<InstanceContext> iterator = pendingInstances.listIterator(); - while (iterator.hasNext()) { - InstanceContext pendingInstance = iterator.next(); - if (pendingInstance == null) { - iterator.remove(); - continue; - } - if (instanceId.equals(pendingInstance.getId())) { - // member is activated - // remove from pending list - iterator.remove(); - // add to the activated list - this.terminatingPending.add(pendingInstance); - if (log.isDebugEnabled()) { - log.debug(String.format("Pending instance is removed and added to the " + - "termination pending instance list. [Instance Id] %s", instanceId)); - } - break; - } - } - } - } - - public int getNonTerminatedInstancesCount() { - return this.activeInstances.size() + this.pendingInstances.size(); - } - - public List<InstanceContext> getTerminatingPending() { - return terminatingPending; - } - - public void setTerminatingPending(List<InstanceContext> terminatingPending) { - this.terminatingPending = terminatingPending; - } - - public boolean removeTerminationPendingInstance(String instanceId) { - if (id == null) { - return false; - } - synchronized (pendingInstances) { - for (Iterator<InstanceContext> iterator = pendingInstances.iterator(); iterator.hasNext(); ) { - InstanceContext pendingInstance = iterator.next(); - if (id.equals(pendingInstance.getId())) { - iterator.remove(); - return true; - } - - } - } - return false; - } - }
