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 2015/05/19 14:38:57 UTC
[1/2] stratos git commit: Update references with NW partition context
class merge
Repository: stratos
Updated Branches:
refs/heads/master efe5aac3e -> 6cbe1e378
Update references with NW partition context class merge
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/6cbe1e37
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/6cbe1e37
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/6cbe1e37
Branch: refs/heads/master
Commit: 6cbe1e37824de16585cc2b4fa1bd00d2b1072cf2
Parents: 824364f
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Tue May 19 17:49:51 2015 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Tue May 19 18:08:48 2015 +0530
----------------------------------------------------------------------
.../applications/topic/ApplicationBuilder.java | 13 +-
.../monitor/component/ApplicationMonitor.java | 16 +--
.../monitor/component/GroupMonitor.java | 144 +++++++++----------
.../component/ParentComponentMonitor.java | 6 +-
.../stratos/autoscaler/util/AutoscalerUtil.java | 6 +-
5 files changed, 91 insertions(+), 94 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/6cbe1e37/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
index 7f781f4..03f8e05 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
@@ -25,8 +25,7 @@ import org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext
import org.apache.stratos.autoscaler.applications.pojo.ApplicationContext;
import org.apache.stratos.autoscaler.client.CloudControllerClient;
import org.apache.stratos.autoscaler.context.AutoscalerContext;
-import org.apache.stratos.autoscaler.context.partition.network.ApplicationLevelNetworkPartitionContext;
-import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.context.partition.network.ParentLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.monitor.Monitor;
@@ -422,8 +421,8 @@ public class ApplicationBuilder {
monitor1.destroy();
}
}
- GroupLevelNetworkPartitionContext networkPartitionContext =
- (GroupLevelNetworkPartitionContext) monitor.
+ org.apache.stratos.autoscaler.context.partition.network.ParentLevelNetworkPartitionContext networkPartitionContext =
+ (org.apache.stratos.autoscaler.context.partition.network.ParentLevelNetworkPartitionContext) monitor.
getNetworkPartitionContext(groupInstance.getNetworkPartitionId());
networkPartitionContext.removeInstanceContext(instanceId);
if (groupInstance.getPartitionId() != null) {
@@ -653,7 +652,7 @@ public class ApplicationBuilder {
ApplicationMonitor applicationMonitor = AutoscalerContext.getInstance().getAppMonitor(appId);
if (applicationMonitor != null) {
- ApplicationLevelNetworkPartitionContext context = (ApplicationLevelNetworkPartitionContext)
+ ParentLevelNetworkPartitionContext context = (ParentLevelNetworkPartitionContext)
applicationMonitor.getNetworkPartitionContext(networkPartitionId);
if (status == ApplicationStatus.Active) {
if (log.isDebugEnabled()) {
@@ -694,8 +693,8 @@ public class ApplicationBuilder {
String instanceId, String parentInstanceId) {
GroupMonitor monitor = getGroupMonitor(appId, groupId);
if (monitor != null) {
- GroupLevelNetworkPartitionContext context
- = (GroupLevelNetworkPartitionContext) monitor.getNetworkPartitionContext(networkPartitionId);
+ org.apache.stratos.autoscaler.context.partition.network.ParentLevelNetworkPartitionContext context
+ = (org.apache.stratos.autoscaler.context.partition.network.ParentLevelNetworkPartitionContext) monitor.getNetworkPartitionContext(networkPartitionId);
if (status == GroupStatus.Active) {
if (log.isDebugEnabled()) {
log.debug("Moving pending group instance to active list in [group] " + groupId
http://git-wip-us.apache.org/repos/asf/stratos/blob/6cbe1e37/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
index 122a6a7..f092aa6 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
@@ -29,7 +29,7 @@ import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
import org.apache.stratos.autoscaler.context.AutoscalerContext;
import org.apache.stratos.autoscaler.context.InstanceContext;
import org.apache.stratos.autoscaler.context.application.ApplicationInstanceContext;
-import org.apache.stratos.autoscaler.context.partition.network.ApplicationLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.context.partition.network.ParentLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
@@ -144,7 +144,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
private void handleScalingMaxOut(InstanceContext instanceContext,
NetworkPartitionContext networkPartitionContext) {
- if (((ApplicationLevelNetworkPartitionContext) networkPartitionContext).getPendingInstancesCount() == 0) {
+ if (((ParentLevelNetworkPartitionContext) networkPartitionContext).getPendingInstancesCount() == 0) {
//handling the application bursting only when there are no pending instances found
try {
if (log.isInfoEnabled()) {
@@ -448,8 +448,8 @@ public class ApplicationMonitor extends ParentComponentMonitor {
}
for (String networkPartitionIds : nextNetworkPartitions) {
- ApplicationLevelNetworkPartitionContext context =
- new ApplicationLevelNetworkPartitionContext(networkPartitionIds);
+ ParentLevelNetworkPartitionContext context =
+ new ParentLevelNetworkPartitionContext(networkPartitionIds);
//If application instances found in the ApplicationsTopology,
// then have to add them first before creating new one
ApplicationInstance appInstance = (ApplicationInstance) application.
@@ -487,7 +487,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
* @return instance Id
*/
private String handleApplicationInstanceCreation(Application application,
- ApplicationLevelNetworkPartitionContext context,
+ ParentLevelNetworkPartitionContext context,
ApplicationInstance instanceExist) {
ApplicationInstance instance;
ApplicationInstanceContext instanceContext;
@@ -580,11 +580,9 @@ public class ApplicationMonitor extends ParentComponentMonitor {
for (String networkPartitionId : nextNetworkPartitions) {
if (!this.getNetworkPartitionContextsMap().containsKey(networkPartitionId)) {
String instanceId;
- ApplicationLevelNetworkPartitionContext context = new
- ApplicationLevelNetworkPartitionContext(networkPartitionId);
+ ParentLevelNetworkPartitionContext context = new
+ ParentLevelNetworkPartitionContext(networkPartitionId);
- //Setting flags saying that it has been created by burst
- context.setCreatedOnBurst(true);
ApplicationInstance appInstance = (ApplicationInstance) application.
getInstanceByNetworkPartitionId(context.getId());
http://git-wip-us.apache.org/repos/asf/stratos/blob/6cbe1e37/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index b9f90b4..ce23e45 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -28,7 +28,7 @@ import org.apache.stratos.autoscaler.context.InstanceContext;
import org.apache.stratos.autoscaler.context.group.GroupInstanceContext;
import org.apache.stratos.autoscaler.context.partition.GroupLevelPartitionContext;
import org.apache.stratos.autoscaler.context.partition.PartitionContext;
-import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.context.partition.network.ParentLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
@@ -155,26 +155,26 @@ public class GroupMonitor extends ParentComponentMonitor {
}
}
- GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext
- = (GroupLevelNetworkPartitionContext) networkPartitionContext;
- int nonTerminatedInstancesCount = groupLevelNetworkPartitionContext.
+ ParentLevelNetworkPartitionContext parentLevelNetworkPartitionContext
+ = (ParentLevelNetworkPartitionContext) networkPartitionContext;
+ int nonTerminatedInstancesCount = parentLevelNetworkPartitionContext.
getNonTerminatedInstancesCount();
- int minInstances = groupLevelNetworkPartitionContext.
+ int minInstances = parentLevelNetworkPartitionContext.
getMinInstanceCount();
- int maxInstances = groupLevelNetworkPartitionContext.
+ int maxInstances = parentLevelNetworkPartitionContext.
getMaxInstanceCount();
- int activeInstances = groupLevelNetworkPartitionContext.getActiveInstancesCount();
+ int activeInstances = parentLevelNetworkPartitionContext.getActiveInstancesCount();
if (nonTerminatedInstancesCount < minInstances) {
int instancesToBeCreated = minInstances - nonTerminatedInstancesCount;
for (int i = 0; i < instancesToBeCreated; i++) {
for (InstanceContext parentInstanceContext : parent.
- getNetworkPartitionContext(groupLevelNetworkPartitionContext.getId()).
+ getNetworkPartitionContext(parentLevelNetworkPartitionContext.getId()).
getInstanceIdToInstanceContextMap().values()) {
//keep on scale-up/scale-down only if the application is active
ApplicationMonitor appMonitor = AutoscalerContext.getInstance().
getAppMonitor(appId);
- int activeAppInstances = ((GroupLevelNetworkPartitionContext) appMonitor.
- getNetworkPartitionContext(groupLevelNetworkPartitionContext.getId())).
+ int activeAppInstances = ((ParentLevelNetworkPartitionContext) appMonitor.
+ getNetworkPartitionContext(parentLevelNetworkPartitionContext.getId())).
getActiveInstancesCount();
if (activeAppInstances > 0) {
//Creating new group instance based on the existing parent instances
@@ -247,31 +247,31 @@ public class GroupMonitor extends ParentComponentMonitor {
// if it is a force scale-down
if (allChildrenScaleDown || forceScaleDown) {
if (hasScalingDependents) {
- GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext
- = (GroupLevelNetworkPartitionContext) nwPartitionContext;
- if (groupLevelNetworkPartitionContext.getNonTerminatedInstancesCount() >
- groupLevelNetworkPartitionContext.getMinInstanceCount()) {
+ ParentLevelNetworkPartitionContext parentLevelNetworkPartitionContext
+ = (ParentLevelNetworkPartitionContext) nwPartitionContext;
+ if (parentLevelNetworkPartitionContext.getNonTerminatedInstancesCount() >
+ parentLevelNetworkPartitionContext.getMinInstanceCount()) {
//Will scale down based on dependent manner
- float minInstances = groupLevelNetworkPartitionContext.getMinInstanceCount();
+ float minInstances = parentLevelNetworkPartitionContext.getMinInstanceCount();
float factor =
- (groupLevelNetworkPartitionContext.getNonTerminatedInstancesCount() - 1) / minInstances;
- ScalingEvent scalingEvent = new ScalingEvent(this.id, groupLevelNetworkPartitionContext.getId(),
+ (parentLevelNetworkPartitionContext.getNonTerminatedInstancesCount() - 1) / minInstances;
+ ScalingEvent scalingEvent = new ScalingEvent(this.id, parentLevelNetworkPartitionContext.getId(),
instanceContext.getId(), factor);
this.parent.onChildScalingEvent(scalingEvent);
} else {
//Parent has to handle this scale down as by dependent scale down
ScalingDownBeyondMinEvent newScalingDownBeyondMinEvent =
new ScalingDownBeyondMinEvent(this.id,
- groupLevelNetworkPartitionContext.getId(), instanceContext.getParentInstanceId());
+ parentLevelNetworkPartitionContext.getId(), instanceContext.getParentInstanceId());
this.parent.onChildScalingDownBeyondMinEvent(newScalingDownBeyondMinEvent);
}
} else {
if (groupScalingEnabled) {
- GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext
- = (GroupLevelNetworkPartitionContext) nwPartitionContext;
- if (groupLevelNetworkPartitionContext.getNonTerminatedInstancesCount() >
- groupLevelNetworkPartitionContext.getMinInstanceCount()) {
+ ParentLevelNetworkPartitionContext parentLevelNetworkPartitionContext
+ = (ParentLevelNetworkPartitionContext) nwPartitionContext;
+ if (parentLevelNetworkPartitionContext.getNonTerminatedInstancesCount() >
+ parentLevelNetworkPartitionContext.getMinInstanceCount()) {
//send terminating to the specific group instance in the scale down
ApplicationBuilder.handleGroupTerminatingEvent(this.appId, this.id,
instanceContext.getId());
@@ -298,7 +298,7 @@ public class GroupMonitor extends ParentComponentMonitor {
private void createGroupInstanceOnScaling(final NetworkPartitionContext networkPartitionContext,
final String parentInstanceId) {
if (groupScalingEnabled) {
- if (((GroupLevelNetworkPartitionContext)networkPartitionContext).getPendingInstancesCount() == 0) {
+ if (((ParentLevelNetworkPartitionContext)networkPartitionContext).getPendingInstancesCount() == 0) {
//one of the child is loaded and max out.
// Hence creating new group instance
if (log.isDebugEnabled()) {
@@ -355,15 +355,15 @@ public class GroupMonitor extends ParentComponentMonitor {
log.debug("This [Group] " + id + " [scale-up] dependencies. " +
"Hence notifying the [parent] " + parent.getId());
}
- GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext
- = (GroupLevelNetworkPartitionContext) networkPartitionContext;
+ ParentLevelNetworkPartitionContext parentLevelNetworkPartitionContext
+ = (ParentLevelNetworkPartitionContext) networkPartitionContext;
//notifying the parent when scale dependents found
- int maxInstances = groupLevelNetworkPartitionContext.getMaxInstanceCount();
- if (groupScalingEnabled && maxInstances > groupLevelNetworkPartitionContext.
+ int maxInstances = parentLevelNetworkPartitionContext.getMaxInstanceCount();
+ if (groupScalingEnabled && maxInstances > parentLevelNetworkPartitionContext.
getNonTerminatedInstancesCount()) {
//increase group by one more instance and calculate the factor for the group scaling
// and notify parent to scale all the dependent in parallel with this factor
- float minInstances = ((GroupLevelNetworkPartitionContext)
+ float minInstances = ((ParentLevelNetworkPartitionContext)
networkPartitionContext).getMinInstanceCount();
float factor = (minInstances + 1) / minInstances;
@@ -567,10 +567,10 @@ public class GroupMonitor extends ParentComponentMonitor {
get(networkPartitionId);
float factor = scalingEvent.getFactor();
- GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext
- = (GroupLevelNetworkPartitionContext) networkPartitionContext;
- int currentInstances = groupLevelNetworkPartitionContext.getNonTerminatedInstancesCount();
- float requiredInstances = factor * groupLevelNetworkPartitionContext.getMinInstanceCount();
+ ParentLevelNetworkPartitionContext parentLevelNetworkPartitionContext
+ = (ParentLevelNetworkPartitionContext) networkPartitionContext;
+ int currentInstances = parentLevelNetworkPartitionContext.getNonTerminatedInstancesCount();
+ float requiredInstances = factor * parentLevelNetworkPartitionContext.getMinInstanceCount();
int ceilingRequiredInstances = (int) Math.ceil(requiredInstances);
if (ceilingRequiredInstances > currentInstances) {
@@ -585,13 +585,13 @@ public class GroupMonitor extends ParentComponentMonitor {
for (int count = 0; count < instancesToBeTerminated; count++) {
//have to scale down
- if (groupLevelNetworkPartitionContext.getPendingInstancesCount() != 0) {
+ if (parentLevelNetworkPartitionContext.getPendingInstancesCount() != 0) {
ApplicationBuilder.handleGroupTerminatingEvent(appId, this.id,
- groupLevelNetworkPartitionContext.getPendingInstances().get(0).getId());
+ parentLevelNetworkPartitionContext.getPendingInstances().get(0).getId());
} else {
List<InstanceContext> activeInstances =
- groupLevelNetworkPartitionContext.getActiveInstances();
+ parentLevelNetworkPartitionContext.getActiveInstances();
ApplicationBuilder.handleGroupTerminatingEvent(appId, this.id,
activeInstances.get(activeInstances.size() - 1).toString());
}
@@ -638,16 +638,16 @@ public class GroupMonitor extends ParentComponentMonitor {
* @param parentInstanceContext the parent instance context
* @return the group level network partition context
*/
- private GroupLevelNetworkPartitionContext getGroupLevelNetworkPartitionContext(String groupAlias,
+ private ParentLevelNetworkPartitionContext getGroupLevelNetworkPartitionContext(String groupAlias,
String appId,
Instance parentInstanceContext) {
- GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext;
+ ParentLevelNetworkPartitionContext parentLevelNetworkPartitionContext;
String deploymentPolicyId = AutoscalerUtil.getDeploymentPolicyIdByAlias(appId, groupAlias);
DeploymentPolicy deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicy(deploymentPolicyId);
String networkPartitionId = parentInstanceContext.getNetworkPartitionId();
if (this.getNetworkPartitionContextsMap().containsKey(networkPartitionId)) {
- groupLevelNetworkPartitionContext = (GroupLevelNetworkPartitionContext) this.getNetworkPartitionContextsMap().
+ parentLevelNetworkPartitionContext = (ParentLevelNetworkPartitionContext) this.getNetworkPartitionContextsMap().
get(networkPartitionId);
} else {
if (deploymentPolicy != null) {
@@ -660,25 +660,25 @@ public class GroupMonitor extends ParentComponentMonitor {
}
if (networkPartition != null) {
- groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext(
+ parentLevelNetworkPartitionContext = new ParentLevelNetworkPartitionContext(
networkPartitionId,
networkPartition.getPartitionAlgo());
} else {
- groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext(
+ parentLevelNetworkPartitionContext = new ParentLevelNetworkPartitionContext(
networkPartitionId);
}
} else {
- groupLevelNetworkPartitionContext = new GroupLevelNetworkPartitionContext(
+ parentLevelNetworkPartitionContext = new ParentLevelNetworkPartitionContext(
networkPartitionId);
}
if (log.isInfoEnabled()) {
log.info("[Network partition] " + networkPartitionId + "has been added for the " +
"[Group] " + this.id);
}
- this.addNetworkPartitionContext(groupLevelNetworkPartitionContext);
+ this.addNetworkPartitionContext(parentLevelNetworkPartitionContext);
}
- return groupLevelNetworkPartitionContext;
+ return parentLevelNetworkPartitionContext;
}
/**
@@ -690,7 +690,7 @@ public class GroupMonitor extends ParentComponentMonitor {
* @param groupAlias alias of the group
*/
private void addPartitionContext(Instance parentInstanceContext,
- GroupLevelNetworkPartitionContext networkPartitionContext, String groupAlias) {
+ ParentLevelNetworkPartitionContext networkPartitionContext, String groupAlias) {
String networkPartitionId = parentInstanceContext.getNetworkPartitionId();
@@ -749,11 +749,11 @@ public class GroupMonitor extends ParentComponentMonitor {
* @param group the group
* @param parentInstanceContext the parent instance context
* @param partitionContext partition-context used to create the group instance
- * @param groupLevelNetworkPartitionContext the group level network partition context
+ * @param parentLevelNetworkPartitionContext the group level network partition context
*/
private String createGroupInstanceAndAddToMonitor(Group group, Instance parentInstanceContext,
PartitionContext partitionContext,
- GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext,
+ ParentLevelNetworkPartitionContext parentLevelNetworkPartitionContext,
GroupInstance groupInstance) {
String partitionId = null;
@@ -774,8 +774,8 @@ public class GroupMonitor extends ParentComponentMonitor {
groupInstanceContext.setParentInstanceId(groupInstance.getParentId());
groupInstanceContext.addPartitionContext((GroupLevelPartitionContext) partitionContext);
- groupLevelNetworkPartitionContext.addInstanceContext(groupInstanceContext);
- groupLevelNetworkPartitionContext.addPendingInstance(groupInstanceContext);
+ parentLevelNetworkPartitionContext.addInstanceContext(groupInstanceContext);
+ parentLevelNetworkPartitionContext.addPendingInstance(groupInstanceContext);
if (log.isInfoEnabled()) {
log.info("Group [Instance context] " + instanceId +
@@ -807,11 +807,11 @@ public class GroupMonitor extends ParentComponentMonitor {
Instance parentInstanceContext = getParentInstanceContext(parentInstanceId);
// Get existing or create new GroupLevelNetworkPartitionContext
- GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext =
+ ParentLevelNetworkPartitionContext parentLevelNetworkPartitionContext =
getGroupLevelNetworkPartitionContext(group.getUniqueIdentifier(),
this.appId, parentInstanceContext);
//adding the partitionContext to the network partition context
- addPartitionContext(parentInstanceContext, groupLevelNetworkPartitionContext, group.getAlias());
+ addPartitionContext(parentInstanceContext, parentLevelNetworkPartitionContext, group.getAlias());
String groupInstanceId;
PartitionContext partitionContext;
@@ -821,18 +821,18 @@ public class GroupMonitor extends ParentComponentMonitor {
int groupMin = group.getGroupMinInstances();
int groupMax = group.getGroupMaxInstances();
//Setting the network-partition minimum instances as group min instances
- groupLevelNetworkPartitionContext.setMinInstanceCount(groupMin);
- groupLevelNetworkPartitionContext.setMaxInstanceCount(groupMax);
+ parentLevelNetworkPartitionContext.setMinInstanceCount(groupMin);
+ parentLevelNetworkPartitionContext.setMaxInstanceCount(groupMax);
//Have to check whether group has generated its own instances
List<Instance> existingGroupInstances = group.getInstanceContextsWithParentId(parentInstanceId);
for (Instance instance : existingGroupInstances) {
initialStartup = false;
- partitionContext = groupLevelNetworkPartitionContext.
+ partitionContext = parentLevelNetworkPartitionContext.
getPartitionContextById(instance.getPartitionId());
groupInstanceId = createGroupInstanceAndAddToMonitor(group, parentInstanceContext,
partitionContext,
- groupLevelNetworkPartitionContext,
+ parentLevelNetworkPartitionContext,
(GroupInstance) instance);
instanceIdsToStart.add(groupInstanceId);
}
@@ -844,11 +844,11 @@ public class GroupMonitor extends ParentComponentMonitor {
if (existingGroupInstances.size() <= groupMin) {
for (int i = 0; i < groupMin - existingGroupInstances.size(); i++) {
// Get partitionContext to create instance in
- partitionContext = getPartitionContext(groupLevelNetworkPartitionContext,
+ partitionContext = getPartitionContext(parentLevelNetworkPartitionContext,
parentPartitionId);
groupInstanceId = createGroupInstanceAndAddToMonitor(group, parentInstanceContext,
partitionContext,
- groupLevelNetworkPartitionContext,
+ parentLevelNetworkPartitionContext,
null);
instanceIdsToStart.add(groupInstanceId);
}
@@ -867,28 +867,28 @@ public class GroupMonitor extends ParentComponentMonitor {
* based on the selected algorithm where if parent has a partition-id,
* then that will be returned instead of parsing the algorithm
*
- * @param groupLevelNetworkPartitionContext the group-network-partition-context
+ * @param parentLevelNetworkPartitionContext the group-network-partition-context
* @param parentPartitionId parent-partition-id
* @return the partition-context
*/
private PartitionContext getPartitionContext(
- GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext,
+ ParentLevelNetworkPartitionContext parentLevelNetworkPartitionContext,
String parentPartitionId) {
PartitionContext partitionContext = null;
// Get partitionContext to create instance in
- List<GroupLevelPartitionContext> partitionContexts = groupLevelNetworkPartitionContext.
+ List<GroupLevelPartitionContext> partitionContexts = parentLevelNetworkPartitionContext.
getPartitionCtxts();
GroupLevelPartitionContext[] groupLevelPartitionContexts =
new GroupLevelPartitionContext[partitionContexts.size()];
if (parentPartitionId == null) {
if (!partitionContexts.isEmpty()) {
PartitionAlgorithm algorithm = this.getAutoscaleAlgorithm(
- groupLevelNetworkPartitionContext.getPartitionAlgorithm());
+ parentLevelNetworkPartitionContext.getPartitionAlgorithm());
partitionContext = algorithm.getNextScaleUpPartitionContext(
(partitionContexts.toArray(groupLevelPartitionContexts)));
}
} else {
- partitionContext = groupLevelNetworkPartitionContext.
+ partitionContext = parentLevelNetworkPartitionContext.
getPartitionContextById(parentPartitionId);
}
return partitionContext;
@@ -910,11 +910,11 @@ public class GroupMonitor extends ParentComponentMonitor {
getApplication(this.appId).getGroupRecursively(this.id);
// Get existing or create new GroupLevelNetworkPartitionContext
- GroupLevelNetworkPartitionContext groupLevelNetworkPartitionContext =
+ ParentLevelNetworkPartitionContext parentLevelNetworkPartitionContext =
getGroupLevelNetworkPartitionContext(group.getUniqueIdentifier(),
this.appId, parentInstanceContext);
//adding the partitionContext to the network partition context
- addPartitionContext(parentInstanceContext, groupLevelNetworkPartitionContext,
+ addPartitionContext(parentInstanceContext, parentLevelNetworkPartitionContext,
group.getAlias());
String groupInstanceId;
@@ -927,11 +927,11 @@ public class GroupMonitor extends ParentComponentMonitor {
//Need to create totally new group instance
for (int i = 0; i < groupMin; i++) {
// Get partitionContext to create instance in
- partitionContext = getPartitionContext(groupLevelNetworkPartitionContext,
+ partitionContext = getPartitionContext(parentLevelNetworkPartitionContext,
parentPartitionId);
groupInstanceId = createGroupInstanceAndAddToMonitor(group, parentInstanceContext,
partitionContext,
- groupLevelNetworkPartitionContext,
+ parentLevelNetworkPartitionContext,
null);
instanceIdsToStart.add(groupInstanceId);
}
@@ -939,12 +939,12 @@ public class GroupMonitor extends ParentComponentMonitor {
//have to create one more instance
if (group.getInstanceContextCount() < groupMax) {
// Get partitionContext to create instance in
- partitionContext = getPartitionContext(groupLevelNetworkPartitionContext,
+ partitionContext = getPartitionContext(parentLevelNetworkPartitionContext,
parentPartitionId);
if (partitionContext != null) {
groupInstanceId = createGroupInstanceAndAddToMonitor(group, parentInstanceContext,
partitionContext,
- groupLevelNetworkPartitionContext,
+ parentLevelNetworkPartitionContext,
null);
instanceIdsToStart.add(groupInstanceId);
} else {
@@ -989,12 +989,12 @@ public class GroupMonitor extends ParentComponentMonitor {
/**
* Add network-partition-context to the map
*
- * @param groupLevelNetworkPartitionContext the group level network partition context
+ * @param parentLevelNetworkPartitionContext the group level network partition context
*/
- public void addNetworkPartitionContext(GroupLevelNetworkPartitionContext
- groupLevelNetworkPartitionContext) {
- this.getNetworkPartitionContextsMap().put(groupLevelNetworkPartitionContext.getId(),
- groupLevelNetworkPartitionContext);
+ public void addNetworkPartitionContext(ParentLevelNetworkPartitionContext
+ parentLevelNetworkPartitionContext) {
+ this.getNetworkPartitionContextsMap().put(parentLevelNetworkPartitionContext.getId(),
+ parentLevelNetworkPartitionContext);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/6cbe1e37/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
index 6953f0c..8a17795 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
@@ -29,7 +29,7 @@ import org.apache.stratos.autoscaler.applications.dependency.DependencyTree;
import org.apache.stratos.autoscaler.applications.dependency.context.ApplicationChildContext;
import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
import org.apache.stratos.autoscaler.context.InstanceContext;
-import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.context.partition.network.ParentLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
@@ -617,8 +617,8 @@ public abstract class ParentComponentMonitor extends Monitor {
}
if (!groupInstances.isEmpty()) {
- GroupLevelNetworkPartitionContext networkPartitionContext =
- (GroupLevelNetworkPartitionContext) ((GroupMonitor) monitor).
+ ParentLevelNetworkPartitionContext networkPartitionContext =
+ (ParentLevelNetworkPartitionContext) ((GroupMonitor) monitor).
getNetworkPartitionContextsMap().get(networkPartitionId);
int minInstances = networkPartitionContext.getMinInstanceCount();
//if terminated all the instances in this instances map should be in terminated state
http://git-wip-us.apache.org/repos/asf/stratos/blob/6cbe1e37/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index 8200b3b..40d3438 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -35,7 +35,7 @@ import org.apache.stratos.autoscaler.context.AutoscalerContext;
import org.apache.stratos.autoscaler.context.InstanceContext;
import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext;
import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext;
-import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetworkPartitionContext;
+import org.apache.stratos.autoscaler.context.partition.network.ParentLevelNetworkPartitionContext;
import org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
import org.apache.stratos.autoscaler.exception.AutoScalerException;
import org.apache.stratos.autoscaler.exception.application.*;
@@ -780,9 +780,9 @@ public class AutoscalerUtil {
//Updating the GroupMonitor
for (NetworkPartitionContext networkPartitionContext : groupMonitor.
getNetworkPartitionContextsMap().values()) {
- ((GroupLevelNetworkPartitionContext) networkPartitionContext).
+ ((ParentLevelNetworkPartitionContext) networkPartitionContext).
setMinInstanceCount(newGroup.getGroupMinInstances());
- ((GroupLevelNetworkPartitionContext) networkPartitionContext).
+ ((ParentLevelNetworkPartitionContext) networkPartitionContext).
setMaxInstanceCount(newGroup.getGroupMaxInstances());
}
[2/2] stratos git commit: Merge App level and group level network
partition contexes to ParentLevelNetworkPartitionContext
Posted by la...@apache.org.
Merge App level and group level network partition contexes to ParentLevelNetworkPartitionContext
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/824364f0
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/824364f0
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/824364f0
Branch: refs/heads/master
Commit: 824364f0aef2559f1a314c96b1216fa29223ee43
Parents: efe5aac
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Tue May 19 17:49:04 2015 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Tue May 19 18:08:48 2015 +0530
----------------------------------------------------------------------
...ApplicationLevelNetworkPartitionContext.java | 263 -------------
.../GroupLevelNetworkPartitionContext.java | 390 -------------------
.../ParentLevelNetworkPartitionContext.java | 390 +++++++++++++++++++
3 files changed, 390 insertions(+), 653 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/824364f0/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
deleted file mode 100644
index caaeb6d..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ApplicationLevelNetworkPartitionContext.java
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-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.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-/**
- * Holds runtime data of a network partition.
- */
-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);
- pendingInstances = new ArrayList<InstanceContext>();
- activeInstances = new ArrayList<InstanceContext>();
- terminatingPending = new ArrayList<InstanceContext>();
- }
-
- public int hashCode() {
-
- final int prime = 31;
- int result = 1;
- result = prime * result + ((super.getId() == null) ? 0 : super.getId().hashCode());
- return result;
-
- }
-
- public boolean equals(final Object obj) {
-
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (!(obj instanceof ApplicationLevelNetworkPartitionContext)) {
- return false;
- }
- final ApplicationLevelNetworkPartitionContext other = (ApplicationLevelNetworkPartitionContext) obj;
- if (super.getId() == null) {
- if (super.getId() != null) {
- return false;
- }
- } else if (!super.getId().equals(super.getId())) {
- return false;
- }
- return true;
- }
-
- @Override
- public String toString() {
- return "ApplicationNetworkPartitionContext [id=" + super.getId() + "]";
- }
-
- public String getId() {
- return super.getId();
- }
-
- public boolean isCreatedOnBurst() {
- return createdOnBurst;
- }
-
- public void setCreatedOnBurst(boolean createdOnBurst) {
- 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/824364f0/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
deleted file mode 100644
index 85a0236..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/GroupLevelNetworkPartitionContext.java
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-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;
-
-/**
- * Holds runtime data of a network partition.
- */
-public class GroupLevelNetworkPartitionContext extends NetworkPartitionContext implements Serializable {
- 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
- private List<GroupLevelPartitionContext> partitionContexts;
-
- //details required for partition selection algorithms
- private int currentPartitionIndex;
-
-
- public GroupLevelNetworkPartitionContext(String id, String partitionAlgo) {
- super(id);
- this.partitionAlgorithm = partitionAlgo;
- partitionContexts = new ArrayList<GroupLevelPartitionContext>();
- requiredInstanceCountBasedOnStats = minInstanceCount;
- requiredInstanceCountBasedOnDependencies = minInstanceCount;
- pendingInstances = new ArrayList<InstanceContext>();
- activeInstances = new ArrayList<InstanceContext>();
- terminatingPending = new ArrayList<InstanceContext>();
-
- }
-
- public GroupLevelNetworkPartitionContext(String id) {
- super(id);
- partitionContexts = new ArrayList<GroupLevelPartitionContext>();
- requiredInstanceCountBasedOnStats = minInstanceCount;
- requiredInstanceCountBasedOnDependencies = minInstanceCount;
- pendingInstances = new ArrayList<InstanceContext>();
- activeInstances = new ArrayList<InstanceContext>();
- terminatingPending = new ArrayList<InstanceContext>();
- }
-
-
- public int getMinInstanceCount() {
- return minInstanceCount;
- }
-
- public void setMinInstanceCount(int minInstanceCount) {
- this.minInstanceCount = minInstanceCount;
- }
-
- public int getMaxInstanceCount() {
- return maxInstanceCount;
- }
-
- public void setMaxInstanceCount(int maxInstanceCount) {
- this.maxInstanceCount = maxInstanceCount;
- }
-
- public int hashCode() {
-
- final int prime = 31;
- int result = 1;
- result = prime * result + ((super.getId() == null) ? 0 : super.getId().hashCode());
- return result;
-
- }
-
- public boolean equals(final Object obj) {
-
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (!(obj instanceof GroupLevelNetworkPartitionContext)) {
- return false;
- }
- final GroupLevelNetworkPartitionContext other = (GroupLevelNetworkPartitionContext) obj;
- if (super.getId() == null) {
- if (super.getId() != null) {
- return false;
- }
- } else if (!super.getId().equals(super.getId())) {
- return false;
- }
- return true;
- }
-
- @Override
- public String toString() {
- return "NetworkPartitionContext [id=" + super.getId() + "partitionAlgorithm=" + partitionAlgorithm + ", minInstanceCount=" +
- minInstanceCount + ", maxInstanceCount=" + maxInstanceCount + "]";
- }
-
- public int getCurrentPartitionIndex() {
- return currentPartitionIndex;
- }
-
- public void setCurrentPartitionIndex(int currentPartitionIndex) {
- this.currentPartitionIndex = currentPartitionIndex;
- }
-
- public String getId() {
- return super.getId();
- }
-
-
- public String getPartitionAlgorithm() {
- return partitionAlgorithm;
- }
-
- public int getScaleDownRequestsCount() {
- return scaleDownRequestsCount;
- }
-
- public void resetScaleDownRequestsCount() {
- this.scaleDownRequestsCount = 0;
- }
-
- public void increaseScaleDownRequestsCount() {
- this.scaleDownRequestsCount += 1;
- }
-
- public float getRequiredInstanceCountBasedOnStats() {
- return requiredInstanceCountBasedOnStats;
- }
-
- public void setRequiredInstanceCountBasedOnStats(int requiredInstanceCountBasedOnStats) {
- this.requiredInstanceCountBasedOnStats = requiredInstanceCountBasedOnStats;
- }
-
- public int getRequiredInstanceCountBasedOnDependencies() {
- return requiredInstanceCountBasedOnDependencies;
- }
-
- public void setRequiredInstanceCountBasedOnDependencies(int requiredInstanceCountBasedOnDependencies) {
- this.requiredInstanceCountBasedOnDependencies = requiredInstanceCountBasedOnDependencies;
- }
-
- public List<GroupLevelPartitionContext> getPartitionCtxts() {
-
- return partitionContexts;
- }
-
- public GroupLevelPartitionContext getPartitionCtxt(String partitionId) {
-
- for (GroupLevelPartitionContext partitionContext : partitionContexts) {
- if (partitionContext.getPartitionId().equals(partitionId)) {
- return partitionContext;
- }
- }
- return null;
- }
-
- public void addPartitionContext(GroupLevelPartitionContext partitionContext) {
- partitionContexts.add(partitionContext);
- }
-
- public int getNonTerminatedMemberCountOfPartition(String partitionId) {
-
- for (GroupLevelPartitionContext partitionContext : partitionContexts) {
- if (partitionContext.getPartitionId().equals(partitionId)) {
- return partitionContext.getNonTerminatedInstanceCount();
- }
- }
- return 0;
- }
-
- public int getActiveMemberCount(String currentPartitionId) {
-
- for (GroupLevelPartitionContext partitionContext : partitionContexts) {
- if (partitionContext.getPartitionId().equals(currentPartitionId)) {
- return partitionContext.getActiveInstanceCount();
- }
- }
- return 0;
- }
-
- public GroupLevelPartitionContext getPartitionContextById(String partitionId) {
- for (GroupLevelPartitionContext partitionContext : partitionContexts) {
- if (partitionContext.getPartitionId().equals(partitionId)) {
- return partitionContext;
- }
- }
- 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/824364f0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ParentLevelNetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ParentLevelNetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ParentLevelNetworkPartitionContext.java
new file mode 100644
index 0000000..50bdb78
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/network/ParentLevelNetworkPartitionContext.java
@@ -0,0 +1,390 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+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;
+
+/**
+ * Holds runtime data of a network partition.
+ */
+public class ParentLevelNetworkPartitionContext extends NetworkPartitionContext implements Serializable {
+ private static final Log log = LogFactory.getLog(ParentLevelNetworkPartitionContext.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
+ private List<GroupLevelPartitionContext> partitionContexts;
+
+ //details required for partition selection algorithms
+ private int currentPartitionIndex;
+
+
+ public ParentLevelNetworkPartitionContext(String id, String partitionAlgo) {
+ super(id);
+ this.partitionAlgorithm = partitionAlgo;
+ partitionContexts = new ArrayList<GroupLevelPartitionContext>();
+ requiredInstanceCountBasedOnStats = minInstanceCount;
+ requiredInstanceCountBasedOnDependencies = minInstanceCount;
+ pendingInstances = new ArrayList<InstanceContext>();
+ activeInstances = new ArrayList<InstanceContext>();
+ terminatingPending = new ArrayList<InstanceContext>();
+
+ }
+
+ public ParentLevelNetworkPartitionContext(String id) {
+ super(id);
+ partitionContexts = new ArrayList<GroupLevelPartitionContext>();
+ requiredInstanceCountBasedOnStats = minInstanceCount;
+ requiredInstanceCountBasedOnDependencies = minInstanceCount;
+ pendingInstances = new ArrayList<InstanceContext>();
+ activeInstances = new ArrayList<InstanceContext>();
+ terminatingPending = new ArrayList<InstanceContext>();
+ }
+
+
+ public int getMinInstanceCount() {
+ return minInstanceCount;
+ }
+
+ public void setMinInstanceCount(int minInstanceCount) {
+ this.minInstanceCount = minInstanceCount;
+ }
+
+ public int getMaxInstanceCount() {
+ return maxInstanceCount;
+ }
+
+ public void setMaxInstanceCount(int maxInstanceCount) {
+ this.maxInstanceCount = maxInstanceCount;
+ }
+
+ public int hashCode() {
+
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((super.getId() == null) ? 0 : super.getId().hashCode());
+ return result;
+
+ }
+
+ public boolean equals(final Object obj) {
+
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof ParentLevelNetworkPartitionContext)) {
+ return false;
+ }
+ final ParentLevelNetworkPartitionContext other = (ParentLevelNetworkPartitionContext) obj;
+ if (super.getId() == null) {
+ if (super.getId() != null) {
+ return false;
+ }
+ } else if (!super.getId().equals(super.getId())) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public String toString() {
+ return "NetworkPartitionContext [id=" + super.getId() + "partitionAlgorithm=" + partitionAlgorithm + ", minInstanceCount=" +
+ minInstanceCount + ", maxInstanceCount=" + maxInstanceCount + "]";
+ }
+
+ public int getCurrentPartitionIndex() {
+ return currentPartitionIndex;
+ }
+
+ public void setCurrentPartitionIndex(int currentPartitionIndex) {
+ this.currentPartitionIndex = currentPartitionIndex;
+ }
+
+ public String getId() {
+ return super.getId();
+ }
+
+
+ public String getPartitionAlgorithm() {
+ return partitionAlgorithm;
+ }
+
+ public int getScaleDownRequestsCount() {
+ return scaleDownRequestsCount;
+ }
+
+ public void resetScaleDownRequestsCount() {
+ this.scaleDownRequestsCount = 0;
+ }
+
+ public void increaseScaleDownRequestsCount() {
+ this.scaleDownRequestsCount += 1;
+ }
+
+ public float getRequiredInstanceCountBasedOnStats() {
+ return requiredInstanceCountBasedOnStats;
+ }
+
+ public void setRequiredInstanceCountBasedOnStats(int requiredInstanceCountBasedOnStats) {
+ this.requiredInstanceCountBasedOnStats = requiredInstanceCountBasedOnStats;
+ }
+
+ public int getRequiredInstanceCountBasedOnDependencies() {
+ return requiredInstanceCountBasedOnDependencies;
+ }
+
+ public void setRequiredInstanceCountBasedOnDependencies(int requiredInstanceCountBasedOnDependencies) {
+ this.requiredInstanceCountBasedOnDependencies = requiredInstanceCountBasedOnDependencies;
+ }
+
+ public List<GroupLevelPartitionContext> getPartitionCtxts() {
+
+ return partitionContexts;
+ }
+
+ public GroupLevelPartitionContext getPartitionCtxt(String partitionId) {
+
+ for (GroupLevelPartitionContext partitionContext : partitionContexts) {
+ if (partitionContext.getPartitionId().equals(partitionId)) {
+ return partitionContext;
+ }
+ }
+ return null;
+ }
+
+ public void addPartitionContext(GroupLevelPartitionContext partitionContext) {
+ partitionContexts.add(partitionContext);
+ }
+
+ public int getNonTerminatedMemberCountOfPartition(String partitionId) {
+
+ for (GroupLevelPartitionContext partitionContext : partitionContexts) {
+ if (partitionContext.getPartitionId().equals(partitionId)) {
+ return partitionContext.getNonTerminatedInstanceCount();
+ }
+ }
+ return 0;
+ }
+
+ public int getActiveMemberCount(String currentPartitionId) {
+
+ for (GroupLevelPartitionContext partitionContext : partitionContexts) {
+ if (partitionContext.getPartitionId().equals(currentPartitionId)) {
+ return partitionContext.getActiveInstanceCount();
+ }
+ }
+ return 0;
+ }
+
+ public GroupLevelPartitionContext getPartitionContextById(String partitionId) {
+ for (GroupLevelPartitionContext partitionContext : partitionContexts) {
+ if (partitionContext.getPartitionId().equals(partitionId)) {
+ return partitionContext;
+ }
+ }
+ 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;
+ }
+
+
+}