http://git-wip-us.apache.org/repos/asf/stratos/blob/dd3dce60/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 af00873..c917f2d 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
@@ -28,7 +28,7 @@ import 
org.apache.stratos.autoscaler.applications.ApplicationHolder;
 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.application.ParentInstanceContext;
 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;
@@ -120,29 +120,30 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
                             getInstanceIdToInstanceContextMap().values()) {
                         ApplicationInstance instance = (ApplicationInstance) 
instanceIdToInstanceMap.
                                 get(instanceContext.getId());
+                        ParentInstanceContext parentInstanceContext = 
(ParentInstanceContext)instanceContext;
                         //stopping the monitoring when the group is 
inactive/Terminating/Terminated
                         if (instance.getStatus().getCode() <= 
ApplicationStatus.Active.getCode()) {
                             //Gives priority to scaling max out rather than 
dependency scaling
-                            if 
(!instanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
+                            if 
(!parentInstanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
                                 //handling the scaling max out of the children
-                                handleScalingMaxOut(instanceContext, 
networkPartitionContext);
+                                handleScalingMaxOut(parentInstanceContext, 
networkPartitionContext);
 
-                            } else if 
(!instanceContext.getIdToScalingEvent().isEmpty()) {
+                            } else if 
(!parentInstanceContext.getIdToScalingEvent().isEmpty()) {
                                 //handling the dependent scaling for 
application
-                                handleDependentScaling(instanceContext, 
networkPartitionContext);
+                                handleDependentScaling(parentInstanceContext, 
networkPartitionContext);
 
-                            } else if 
(!instanceContext.getIdToScalingDownBeyondMinEvent().isEmpty()) {
+                            } else if 
(!parentInstanceContext.getIdToScalingDownBeyondMinEvent().isEmpty()) {
                                 //handling the scale down of the application
-                                handleScalingDownBeyondMin(instanceContext, 
networkPartitionContext);
+                                
handleScalingDownBeyondMin(parentInstanceContext, networkPartitionContext);
                             }
                         }
 
                         //Resetting the events events
-                        instanceContext.setIdToScalingDownBeyondMinEvent(
+                        parentInstanceContext.setIdToScalingDownBeyondMinEvent(
                                 new ConcurrentHashMap<String, 
ScalingDownBeyondMinEvent>());
-                        instanceContext.setIdToScalingEvent(
+                        parentInstanceContext.setIdToScalingEvent(
                                 new ConcurrentHashMap<String, ScalingEvent>());
-                        instanceContext.setIdToScalingOverMaxEvent(
+                        parentInstanceContext.setIdToScalingOverMaxEvent(
                                 new ConcurrentHashMap<String, 
ScalingUpBeyondMaxEvent>());
                     }
                 }
@@ -165,7 +166,7 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
         executorService.execute(monitoringRunnable);
     }
 
-    private void handleScalingMaxOut(InstanceContext instanceContext,
+    private void handleScalingMaxOut(ParentInstanceContext instanceContext,
                                      NetworkPartitionContext 
networkPartitionContext) {
         if (((NetworkPartitionContext) 
networkPartitionContext).getPendingInstancesCount() == 0) {
             //handling the application bursting only when there are no pending 
instances found
@@ -198,7 +199,7 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
      * @param instanceContext    instance-context which can be scaled-down
      * @param nwPartitionContext the network-partition-context of the instance
      */
-    private void handleScalingDownBeyondMin(InstanceContext instanceContext,
+    private void handleScalingDownBeyondMin(ParentInstanceContext 
instanceContext,
                                             NetworkPartitionContext 
nwPartitionContext) {
         //Traverse through all the children to see whether all have sent the 
scale down
         boolean allChildrenScaleDown = false;
@@ -611,7 +612,7 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
                                                      NetworkPartitionContext 
context,
                                                      ApplicationInstance 
instanceExist) {
         ApplicationInstance instance;
-        ApplicationInstanceContext instanceContext;
+        ParentInstanceContext instanceContext;
         if (instanceExist != null) {
             //using the existing instance
             instance = instanceExist;
@@ -623,7 +624,7 @@ public class ApplicationMonitor extends 
ParentComponentMonitor {
         String instanceId = instance.getInstanceId();
 
         //Creating appInstanceContext
-        instanceContext = new ApplicationInstanceContext(instanceId);
+        instanceContext = new ParentInstanceContext(instanceId);
         //adding the created App InstanceContext to 
ApplicationLevelNetworkPartitionContext
         context.addInstanceContext(instanceContext);
         context.addPendingInstance(instanceContext);

http://git-wip-us.apache.org/repos/asf/stratos/blob/dd3dce60/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 ee519a6..b226a78 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
@@ -25,8 +25,8 @@ import 
org.apache.stratos.autoscaler.applications.ApplicationHolder;
 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.group.GroupInstanceContext;
-import 
org.apache.stratos.autoscaler.context.partition.GroupLevelPartitionContext;
+import org.apache.stratos.autoscaler.context.application.ParentInstanceContext;
+import 
org.apache.stratos.autoscaler.context.partition.ParentLevelPartitionContext;
 import org.apache.stratos.autoscaler.context.partition.PartitionContext;
 import 
org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
 import 
org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
@@ -125,31 +125,32 @@ public class GroupMonitor extends ParentComponentMonitor {
 
                     for (InstanceContext instanceContext : 
networkPartitionContext.
                             getInstanceIdToInstanceContextMap().values()) {
+                        ParentInstanceContext parentInstanceContext = 
(ParentInstanceContext)instanceContext;
                         GroupInstance instance = (GroupInstance) 
instanceIdToInstanceMap.
                                 get(instanceContext.getId());
                         //stopping the monitoring when the group is 
inactive/Terminating/Terminated
                         if (instance.getStatus().getCode() <= 
GroupStatus.Active.getCode()) {
                             //Gives priority to scaling max out rather than 
dependency scaling
-                            if 
(!instanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
+                            if 
(!parentInstanceContext.getIdToScalingOverMaxEvent().isEmpty()) {
                                 //handling the max out of the children
-                                handleScalingUpBeyondMax(instanceContext, 
networkPartitionContext);
+                                
handleScalingUpBeyondMax(parentInstanceContext, networkPartitionContext);
 
-                            } else if 
(!instanceContext.getIdToScalingEvent().isEmpty()) {
+                            } else if 
(!parentInstanceContext.getIdToScalingEvent().isEmpty()) {
                                 //handling the dependent scaling
-                                handleDependentScaling(instanceContext, 
networkPartitionContext);
+                                handleDependentScaling(parentInstanceContext, 
networkPartitionContext);
 
-                            } else if 
(!instanceContext.getIdToScalingDownBeyondMinEvent().isEmpty()) {
+                            } else if 
(!parentInstanceContext.getIdToScalingDownBeyondMinEvent().isEmpty()) {
                                 //scale down only when extra instances found
-                                handleScalingDownBeyondMin(instanceContext,
+                                
handleScalingDownBeyondMin(parentInstanceContext,
                                         networkPartitionContext, false);
                             }
 
                             //Resetting the events events
-                            instanceContext.setIdToScalingDownBeyondMinEvent(
+                            
parentInstanceContext.setIdToScalingDownBeyondMinEvent(
                                     new ConcurrentHashMap<String, 
ScalingDownBeyondMinEvent>());
-                            instanceContext.setIdToScalingEvent(
+                            parentInstanceContext.setIdToScalingEvent(
                                     new ConcurrentHashMap<String, 
ScalingEvent>());
-                            instanceContext.setIdToScalingOverMaxEvent(
+                            parentInstanceContext.setIdToScalingOverMaxEvent(
                                     new ConcurrentHashMap<String, 
ScalingUpBeyondMaxEvent>());
                         }
                     }
@@ -208,7 +209,7 @@ public class GroupMonitor extends ParentComponentMonitor {
                                                 + appId + " [group] " + id + " 
as it exceeded the " +
                                                 "maximum no of instances by " 
+ instancesToBeTerminated);
 
-                                    handleScalingDownBeyondMin(instanceContext,
+                                    
handleScalingDownBeyondMin((ParentInstanceContext)instanceContext,
                                             networkPartitionContext, true);
 
                                 }
@@ -227,7 +228,7 @@ public class GroupMonitor extends ParentComponentMonitor {
      * @param instanceContext         the instance which reaches its max
      * @param networkPartitionContext the network-partition used for the 
instances
      */
-    private void handleScalingUpBeyondMax(InstanceContext instanceContext,
+    private void handleScalingUpBeyondMax(ParentInstanceContext 
instanceContext,
                                           NetworkPartitionContext 
networkPartitionContext) {
         if (!hasScalingDependents) {
             //handling the group scaling and if pending instances found,
@@ -246,7 +247,7 @@ public class GroupMonitor extends ParentComponentMonitor {
      * @param nwPartitionContext the network-partition used for the instance
      * @param forceScaleDown     whether it is force scale-down or not
      */
-    private void handleScalingDownBeyondMin(InstanceContext instanceContext,
+    private void handleScalingDownBeyondMin(ParentInstanceContext 
instanceContext,
                                             NetworkPartitionContext 
nwPartitionContext,
                                             boolean forceScaleDown) {
         //Traverse through all the children to see whether all have sent the 
scale down
@@ -745,7 +746,7 @@ public class GroupMonitor extends ParentComponentMonitor {
 
             String parentPartitionId = parentInstanceContext.getPartitionId();
             if (parentPartitionId != null && 
networkPartitionContext.getPartitionCtxt(parentPartitionId) == null) {
-                GroupLevelPartitionContext partitionContext = new 
GroupLevelPartitionContext(parentPartitionId, networkPartitionId);
+                ParentLevelPartitionContext partitionContext = new 
ParentLevelPartitionContext(parentPartitionId, networkPartitionId);
                 networkPartitionContext.addPartitionContext(partitionContext);
                 if (log.isInfoEnabled()) {
                     log.info("[Partition] " + parentPartitionId + "has been 
added for the " + "[Group] " + this.id);
@@ -772,9 +773,9 @@ public class GroupMonitor extends ParentComponentMonitor {
 
                             if 
(networkPartitionContext.getPartitionCtxt(partition.getId()) == null) {
 
-                                GroupLevelPartitionContext 
groupLevelPartitionContext = new GroupLevelPartitionContext(
+                                ParentLevelPartitionContext 
parentLevelPartitionContext = new ParentLevelPartitionContext(
                                         partition.getId(), networkPartitionId, 
deploymentPolicyId);
-                                
networkPartitionContext.addPartitionContext(groupLevelPartitionContext);
+                                
networkPartitionContext.addPartitionContext(parentLevelPartitionContext);
                                 if (log.isInfoEnabled()) {
                                     log.info(String.format("[Partition] %s has 
been added for the [Group] %s",
                                             partition.getId(), this.id));
@@ -791,11 +792,11 @@ public class GroupMonitor extends ParentComponentMonitor {
      * Creates the group instance and adds the required context objects
      *
      * @param group                              the group
-     * @param parentInstanceContext              the parent instance context
+     * @param parentInstance              the parent instance context
      * @param partitionContext                   partition-context used to 
create the group instance
      * @param parentLevelNetworkPartitionContext the group level network 
partition context
      */
-    private String createGroupInstanceAndAddToMonitor(Group group, Instance 
parentInstanceContext,
+    private String createGroupInstanceAndAddToMonitor(Group group, Instance 
parentInstance,
                                                       PartitionContext 
partitionContext,
                                                       NetworkPartitionContext 
parentLevelNetworkPartitionContext,
                                                       GroupInstance 
groupInstance) {
@@ -807,19 +808,19 @@ public class GroupMonitor extends ParentComponentMonitor {
                 partitionId = partitionContext.getPartitionId();
             }
 
-            groupInstance = createGroupInstance(group, 
parentInstanceContext.getNetworkPartitionId(),
-                    parentInstanceContext.getInstanceId(), partitionId);
+            groupInstance = createGroupInstance(group, 
parentInstance.getNetworkPartitionId(),
+                    parentInstance.getInstanceId(), partitionId);
         }
 
         this.addInstance(groupInstance);
 
         String instanceId = groupInstance.getInstanceId();
-        GroupInstanceContext groupInstanceContext = new 
GroupInstanceContext(instanceId);
-        groupInstanceContext.setParentInstanceId(groupInstance.getParentId());
+        ParentInstanceContext parentInstanceContext = new 
ParentInstanceContext(instanceId);
+        parentInstanceContext.setParentInstanceId(groupInstance.getParentId());
 
-        groupInstanceContext.addPartitionContext((GroupLevelPartitionContext) 
partitionContext);
-        
parentLevelNetworkPartitionContext.addInstanceContext(groupInstanceContext);
-        
parentLevelNetworkPartitionContext.addPendingInstance(groupInstanceContext);
+        
parentInstanceContext.addPartitionContext((ParentLevelPartitionContext) 
partitionContext);
+        
parentLevelNetworkPartitionContext.addInstanceContext(parentInstanceContext);
+        
parentLevelNetworkPartitionContext.addPendingInstance(parentInstanceContext);
 
         if (log.isInfoEnabled()) {
             log.info("Group [Instance context] " + instanceId +
@@ -827,7 +828,7 @@ public class GroupMonitor extends ParentComponentMonitor {
         }
 
         if (partitionContext != null) {
-            ((GroupLevelPartitionContext) 
partitionContext).addActiveInstance(groupInstance);
+            ((ParentLevelPartitionContext) 
partitionContext).addActiveInstance(groupInstance);
         }
 
         return instanceId;
@@ -923,16 +924,16 @@ public class GroupMonitor extends ParentComponentMonitor {
             String parentPartitionId) {
         PartitionContext partitionContext = null;
         // Get partitionContext to create instance in
-        List<GroupLevelPartitionContext> partitionContexts = 
parentLevelNetworkPartitionContext.
+        List<ParentLevelPartitionContext> partitionContexts = 
parentLevelNetworkPartitionContext.
                 getPartitionCtxts();
-        GroupLevelPartitionContext[] groupLevelPartitionContexts =
-                new GroupLevelPartitionContext[partitionContexts.size()];
+        ParentLevelPartitionContext[] parentLevelPartitionContexts =
+                new ParentLevelPartitionContext[partitionContexts.size()];
         if (parentPartitionId == null) {
             if (!partitionContexts.isEmpty()) {
                 PartitionAlgorithm algorithm = this.getAutoscaleAlgorithm(
                         
parentLevelNetworkPartitionContext.getPartitionAlgorithm());
                 partitionContext = algorithm.getNextScaleUpPartitionContext(
-                        
(partitionContexts.toArray(groupLevelPartitionContexts)));
+                        
(partitionContexts.toArray(parentLevelPartitionContexts)));
             }
         } else {
             partitionContext = parentLevelNetworkPartitionContext.

http://git-wip-us.apache.org/repos/asf/stratos/blob/dd3dce60/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 e033f93..105d3aa 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,6 +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.application.ParentInstanceContext;
 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;
@@ -274,12 +275,13 @@ public abstract class ParentComponentMonitor extends 
Monitor {
         if (networkPartitionContext != null) {
             InstanceContext instanceContext = networkPartitionContext.
                     getInstanceContext(instanceId);
+            ParentInstanceContext parentInstanceContext = 
(ParentInstanceContext)instanceContext;
             if (instanceContext != null) {
-                if (instanceContext.containsScalingEvent(id)) {
-                    instanceContext.removeScalingEvent(id);
-                    instanceContext.addScalingEvent(scalingEvent);
+                if (parentInstanceContext.containsScalingEvent(id)) {
+                    parentInstanceContext.removeScalingEvent(id);
+                    parentInstanceContext.addScalingEvent(scalingEvent);
                 } else {
-                    instanceContext.addScalingEvent(scalingEvent);
+                    parentInstanceContext.addScalingEvent(scalingEvent);
                 }
             }
         }
@@ -298,8 +300,9 @@ public abstract class ParentComponentMonitor extends 
Monitor {
 
         String networkPartitionId = 
scalingDownBeyondMinEvent.getNetworkPartitionId();
         String instanceId = scalingDownBeyondMinEvent.getInstanceId();
-        
getNetworkPartitionContext(networkPartitionId).getInstanceContext(instanceId).
-                addScalingDownBeyondMinEvent(scalingDownBeyondMinEvent);
+        InstanceContext instanceContext = 
getNetworkPartitionContext(networkPartitionId).
+                getInstanceContext(instanceId);
+        
((ParentInstanceContext)instanceContext).addScalingDownBeyondMinEvent(scalingDownBeyondMinEvent);
     }
 
     @Override
@@ -320,11 +323,12 @@ public abstract class ParentComponentMonitor extends 
Monitor {
             InstanceContext instanceContext = networkPartitionContext.
                     getInstanceContext(instanceId);
             if (instanceContext != null) {
-                if (instanceContext.containsScalingEvent(id)) {
-                    instanceContext.removeScalingOverMaxEvent(id);
-                    
instanceContext.addScalingOverMaxEvent(scalingUpBeyondMaxEvent);
+                ParentInstanceContext parentInstanceContext = 
(ParentInstanceContext)instanceContext;
+                if (parentInstanceContext.containsScalingEvent(id)) {
+                    parentInstanceContext.removeScalingOverMaxEvent(id);
+                    
parentInstanceContext.addScalingOverMaxEvent(scalingUpBeyondMaxEvent);
                 } else {
-                    
instanceContext.addScalingOverMaxEvent(scalingUpBeyondMaxEvent);
+                    
parentInstanceContext.addScalingOverMaxEvent(scalingUpBeyondMaxEvent);
                 }
             }
         }
@@ -713,7 +717,7 @@ public abstract class ParentComponentMonitor extends 
Monitor {
      *                                the scale notification from the child
      * @param networkPartitionContext network-partition-context which belongs 
to the instance
      */
-    protected void handleDependentScaling(InstanceContext instanceContext,
+    protected void handleDependentScaling(ParentInstanceContext 
instanceContext,
                                           NetworkPartitionContext 
networkPartitionContext) {
         /**
          * Dependency scaling handling

http://git-wip-us.apache.org/repos/asf/stratos/blob/dd3dce60/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl
 
b/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl
index 56e9164..6e76706 100644
--- 
a/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl
+++ 
b/products/stratos/modules/distribution/src/main/conf/drools/dependent-scaling.drl
@@ -33,8 +33,6 @@ global java.lang.String clusterId;
 global Integer roundedRequiredInstanceCount;
 global org.apache.stratos.autoscaler.rule.RuleTasksDelegator delegator;
 global java.lang.String algorithmName;
-global java.lang.Boolean isPrimary;
-global java.util.List primaryMembers;
 
 rule "Dependent Scaling Rule"
 dialect "mvel"
@@ -84,7 +82,7 @@ dialect "mvel"
 
                         log.info("[dependency-scale] [scale-up] Partition 
available, hence trying to spawn an instance to scale up!" );
                         log.debug("[dependency-scale] [scale-up] " + " 
[partition] " + partitionContext.getPartitionId() + " [cluster] " + clusterId );
-                        delegator.delegateSpawn(partitionContext, clusterId, 
clusterInstanceContext.getId(), isPrimary);
+                        delegator.delegateSpawn(partitionContext, clusterId, 
clusterInstanceContext.getId());
                         count++;
                     } else {
                         partitionsAvailable = false;
@@ -130,8 +128,6 @@ dialect "mvel"
 
                     for(MemberStatsContext memberStatsContext: 
partitionContext.getMemberStatsContexts().values()){
 
-                                               if( 
!primaryMembers.contains(memberStatsContext.getMemberId()) ) {
-
                             LoadAverage loadAverage = 
memberStatsContext.getLoadAverage();
                             log.debug("[dependency-scale] [scale-down] " + " 
[cluster] "
                                 + clusterId + " [member] " + 
memberStatsContext.getMemberId() + " Load average: " + loadAverage);
@@ -161,9 +157,6 @@ dialect "mvel"
                                 lowestOverallLoad = overallLoad;
                             }
 
-
-                                           }
-
                     }
                     if(selectedMemberStatsContext != null) {
                         log.info("[dependency-scale] [scale-down] Trying to 
terminating an instace to scale down!" );

http://git-wip-us.apache.org/repos/asf/stratos/blob/dd3dce60/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl 
b/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl
index 96b60da..06b7fe1 100755
--- a/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl
@@ -44,8 +44,6 @@ global 
org.apache.stratos.autoscaler.context.AutoscalerContext context;
 global org.apache.stratos.autoscaler.rule.RuleTasksDelegator delegator;
 global java.util.Map partitionCtxts;
 global java.lang.String clusterId;
-global java.lang.Boolean isPrimary;
-global Integer primaryMemberCount;
 global java.lang.String algorithmName;
 
 rule "Minimum Rule"
@@ -59,20 +57,13 @@ dialect "mvel"
         eval(log.debug("[min-check] [network-partition] " + 
clusterInstanceContext.getNetworkPartitionId() + " [cluster-instance] " + 
clusterInstanceContext.getId() + " [cluster] " + clusterId + " Non terminated 
member count: " + clusterInstanceContext.getNonTerminatedMemberCount()))
         eval(log.debug("[min-check] [network-partition] " + 
clusterInstanceContext.getNetworkPartitionId() + " [cluster-instance] " + 
clusterInstanceContext.getId() + " [cluster] " + clusterId + " Minimum member 
count: " + clusterInstanceContext.getMinInstanceCount()))
 
-        eval ( (isPrimary && (primaryMemberCount < 
clusterInstanceContext.getMinInstanceCount())) || ( !isPrimary && 
(clusterInstanceContext.getNonTerminatedMemberCount() < 
clusterInstanceContext.getMinInstanceCount())) )
+        eval ( (clusterInstanceContext.getNonTerminatedMemberCount() < 
clusterInstanceContext.getMinInstanceCount()))
 
     then
 
         int additionalInstances = 0;
-        if(isPrimary){
-
-            additionalInstances = clusterInstanceContext.getMinInstanceCount() 
- primaryMemberCount;
-            log.debug("[min-check] true [primary] true [primary member count] 
" + primaryMemberCount + " [cluster] " + clusterId);
-        } else {
-
-            additionalInstances = clusterInstanceContext.getMinInstanceCount() 
- clusterInstanceContext.getNonTerminatedMemberCount();
-            log.debug("[min-check] true [primary] false [non terminated member 
count] " + clusterInstanceContext.getNonTerminatedMemberCount()+ " [cluster] " 
+ clusterId);
-        }
+        additionalInstances = clusterInstanceContext.getMinInstanceCount() - 
clusterInstanceContext.getNonTerminatedMemberCount();
+        log.debug("[min-check] true [non terminated member count] " + 
clusterInstanceContext.getNonTerminatedMemberCount()+ " [cluster] " + 
clusterId);
 
         int count = 0;
         boolean partitionsAvailable = true;
@@ -84,7 +75,7 @@ dialect "mvel"
 
                 log.info("[min-check] Partition available, hence trying to 
spawn an instance to fulfil minimum count!" + " [cluster] " + clusterId);
                 log.debug("[min-check] " + " [partition] " + 
partitionContext.getPartitionId() + " [cluster] " + clusterId);
-                delegator.delegateSpawn(partitionContext, clusterId, 
clusterInstanceContext.getId(), isPrimary);
+                delegator.delegateSpawn(partitionContext, clusterId, 
clusterInstanceContext.getId());
 
                 count++;
             } else {

http://git-wip-us.apache.org/repos/asf/stratos/blob/dd3dce60/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
----------------------------------------------------------------------
diff --git 
a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl 
b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
index e6f8f67..4b55123 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
@@ -24,7 +24,7 @@ import org.apache.stratos.messaging.domain.topology.Cluster;
 import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.context.member.MemberStatsContext;
 import org.apache.stratos.autoscaler.util.AutoscalerConstants;
-import 
org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext;
+import 
org.apache.stratos.autoscaler.context.partition.network.NetworkPartitionContext;
 import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
 import org.apache.stratos.autoscaler.pojo.policy.autoscale.AutoscalePolicy;
 import org.apache.stratos.autoscaler.pojo.policy.autoscale.RequestsInFlight;
@@ -51,8 +51,6 @@ global java.lang.String clusterId;
 global java.lang.Boolean rifReset;
 global java.lang.Boolean mcReset;
 global java.lang.Boolean laReset;
-global java.lang.Boolean isPrimary;
-global java.util.List primaryMembers;
 global java.lang.Boolean arspiReset;
 global java.lang.String algorithmName;
 
@@ -182,7 +180,7 @@ dialect "mvel"
                                 " [laPredictedValue] " + laPredictedValue + " 
[laThreshold] " + laThreshold);
 
                             log.debug("[scale-up] " + " [partition] " + 
partitionContext.getPartitionId() + " [cluster] " + clusterId );
-                            delegator.delegateSpawn(partitionContext, 
clusterId, clusterInstanceContext.getId(), isPrimary);
+                            delegator.delegateSpawn(partitionContext, 
clusterId, clusterInstanceContext.getId());
                             count++;
                         } else {
 
@@ -237,14 +235,9 @@ dialect "mvel"
                                 " [laPredictedValue] " + laPredictedValue + " 
[laThreshold] " + laThreshold
                             );
 
-                            // In partition context member stat context, all 
the primary members need to be
-                            // avoided being selected as the member to 
terminated
-
 
                             for(MemberStatsContext memberStatsContext: 
partitionContext.getMemberStatsContexts().values()){
 
-                                if( 
!primaryMembers.contains(memberStatsContext.getMemberId()) ) {
-
                                 LoadAverage loadAverage = 
memberStatsContext.getLoadAverage();
                                 log.debug("[scale-down] " + " [cluster] "
                                     + clusterId + " [member] " + 
memberStatsContext.getMemberId() + " Load average: " + loadAverage);
@@ -278,9 +271,6 @@ dialect "mvel"
                                     lowestOverallLoad = overallLoad;
                                 }
 
-
-                              }
-
                             }
                             if(selectedMemberStatsContext != null) {
                                 log.info("[scale-down] Trying to terminating 
an instace to scale down!" );

Reply via email to