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;
+    }
+
+
+}