You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2014/11/27 11:03:03 UTC

[1/3] stratos git commit: Rename PartitionContext.java to CLusterLevelPartitionContext.java

Repository: stratos
Updated Branches:
  refs/heads/master 6af990114 -> 7587568a7


http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
index 5027057..8a21257 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java
@@ -168,32 +168,32 @@ public class RuleTasksDelegator {
         }
     }
 
-    public void delegateSpawn(PartitionContext partitionContext, String clusterId, String instanceId, String lbRefType, boolean isPrimary) {
+    public void delegateSpawn(ClusterLevelPartitionContext clusterMonitorPartitionContext, String clusterId, String instanceId, String lbRefType, boolean isPrimary) {
 
         try {
 
-            String nwPartitionId = partitionContext.getNetworkPartitionId();
+            String nwPartitionId = clusterMonitorPartitionContext.getNetworkPartitionId();
             NetworkPartitionLbHolder lbHolder =
                     PartitionManager.getInstance()
                             .getNetworkPartitionLbHolder(nwPartitionId);
-            String lbClusterId = getLbClusterId(lbRefType, partitionContext, lbHolder);
+            String lbClusterId = getLbClusterId(lbRefType, clusterMonitorPartitionContext, lbHolder);
             //Calculate accumulation of minimum counts of all the partition of current network partition
             int minimumCountOfNetworkPartition = 0;
             VMClusterMonitor vmClusterMonitor = (VMClusterMonitor) AutoscalerContext.getInstance().getClusterMonitor(clusterId);
-            for (PartitionContext partitionContextOfCurrentNetworkPartition : vmClusterMonitor.getNetworkPartitionCtxt(instanceId, nwPartitionId).
+            for (ClusterLevelPartitionContext partitionContextOfCurrentNetworkClusterMonitorPartition : vmClusterMonitor.getNetworkPartitionCtxt(instanceId, nwPartitionId).
                     getPartitionCtxts().values()) {
 
-                minimumCountOfNetworkPartition += partitionContextOfCurrentNetworkPartition.getMinimumMemberCount();
+                minimumCountOfNetworkPartition += partitionContextOfCurrentNetworkClusterMonitorPartition.getMinimumMemberCount();
             }
             MemberContext memberContext =
                     CloudControllerClient.getInstance()
-                            .spawnAnInstance(partitionContext.getPartition(),
+                            .spawnAnInstance(clusterMonitorPartitionContext.getPartition(),
                                     clusterId,
-                                    lbClusterId, partitionContext.getNetworkPartitionId(),
+                                    lbClusterId, clusterMonitorPartitionContext.getNetworkPartitionId(),
                                     isPrimary,
                                     minimumCountOfNetworkPartition);
             if (memberContext != null) {
-                partitionContext.addPendingMember(memberContext);
+                clusterMonitorPartitionContext.addPendingMember(memberContext);
                 if (log.isDebugEnabled()) {
                     log.debug(String.format("Pending member added, [member] %s [partition] %s", memberContext.getMemberId(),
                             memberContext.getPartition().getId()));
@@ -260,7 +260,7 @@ public class RuleTasksDelegator {
    	}*/
 
 
-    public static String getLbClusterId(String lbRefType, PartitionContext partitionCtxt,
+    public static String getLbClusterId(String lbRefType, ClusterLevelPartitionContext partitionCtxt,
                                         NetworkPartitionLbHolder networkPartitionLbHolder) {
 
         String lbClusterId = null;
@@ -285,25 +285,25 @@ public class RuleTasksDelegator {
         return lbClusterId;
     }
 
-    public void delegateTerminate(PartitionContext partitionContext, String memberId) {
+    public void delegateTerminate(ClusterLevelPartitionContext clusterMonitorPartitionContext, String memberId) {
 
         log.info("Starting to terminate Member [ " + memberId + " ], in Partition [ " +
-                partitionContext.getPartitionId() + " ], NW Partition [ " +
-                partitionContext.getNetworkPartitionId() + " ]");
+                clusterMonitorPartitionContext.getPartitionId() + " ], NW Partition [ " +
+                clusterMonitorPartitionContext.getNetworkPartitionId() + " ]");
 
         try {
             //Moving member to pending termination list
-            if (partitionContext.activeMemberAvailable(memberId)) {
-                partitionContext.moveActiveMemberToTerminationPendingMembers(memberId);
-            } else if (partitionContext.pendingMemberAvailable(memberId)) {
-                partitionContext.movePendingMemberToObsoleteMembers(memberId);
+            if (clusterMonitorPartitionContext.activeMemberAvailable(memberId)) {
+                clusterMonitorPartitionContext.moveActiveMemberToTerminationPendingMembers(memberId);
+            } else if (clusterMonitorPartitionContext.pendingMemberAvailable(memberId)) {
+                clusterMonitorPartitionContext.movePendingMemberToObsoleteMembers(memberId);
             }
         } catch (Throwable e) {
             log.error("Cannot terminate instance", e);
         }
     }
 
-    public void delegateTerminateDependency(PartitionContext partitionContext, String memberId) {
+    public void delegateTerminateDependency(ClusterLevelPartitionContext clusterMonitorPartitionContext, String memberId) {
         try {
             //calling SM to send the instance notification event.
             if (log.isDebugEnabled()) {
@@ -449,8 +449,8 @@ public class RuleTasksDelegator {
         double loadAveragePredicted = 0.0d;
         int totalMemberCount = 0;
 
-        for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
-            for (MemberStatsContext memberStatsContext : partitionContext.getMemberStatsContexts().values()) {
+        for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
+            for (MemberStatsContext memberStatsContext : clusterMonitorPartitionContext.getMemberStatsContexts().values()) {
 
                 float memberAverageLoadAverage = memberStatsContext.getLoadAverage().getAverage();
                 float memberGredientLoadAverage = memberStatsContext.getLoadAverage().getGradient();
@@ -477,8 +477,8 @@ public class RuleTasksDelegator {
         double memoryConsumptionPredicted = 0.0d;
         int totalMemberCount = 0;
 
-        for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
-            for (MemberStatsContext memberStatsContext : partitionContext.getMemberStatsContexts().values()) {
+        for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
+            for (MemberStatsContext memberStatsContext : clusterMonitorPartitionContext.getMemberStatsContexts().values()) {
 
                 float memberMemoryConsumptionAverage = memberStatsContext.getMemoryConsumption().getAverage();
                 float memberMemoryConsumptionGredient = memberStatsContext.getMemoryConsumption().getGradient();

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/StatusChecker.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/StatusChecker.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/StatusChecker.java
index 9a0bc7b..d4d0a2e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/StatusChecker.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/StatusChecker.java
@@ -21,8 +21,8 @@ package org.apache.stratos.autoscaler.status.processor;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.AutoscalerContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.autoscaler.NetworkPartitionContext;
-import org.apache.stratos.autoscaler.PartitionContext;
 import org.apache.stratos.autoscaler.applications.ApplicationHolder;
 import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
 import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
@@ -174,10 +174,10 @@ public class StatusChecker {
         boolean clusterActive = false;
         for (NetworkPartitionContext networkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
             //minimum check per partition
-            for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
-                if (partitionContext.getMinimumMemberCount() == partitionContext.getActiveMemberCount()) {
+            for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
+                if (clusterMonitorPartitionContext.getMinimumMemberCount() == clusterMonitorPartitionContext.getActiveMemberCount()) {
                     clusterActive = true;
-                } else if (partitionContext.getActiveMemberCount() > partitionContext.getMinimumMemberCount()) {
+                } else if (clusterMonitorPartitionContext.getActiveMemberCount() > clusterMonitorPartitionContext.getMinimumMemberCount()) {
                     log.info("cluster already activated...");
                     clusterActive = true;
                 } else {
@@ -198,8 +198,8 @@ public class StatusChecker {
         boolean hasMember = false;
         for (NetworkPartitionContext networkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
             //minimum check per partition
-            for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
-                if (partitionContext.getNonTerminatedMemberCount() > 0) {
+            for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
+                if (clusterMonitorPartitionContext.getNonTerminatedMemberCount() > 0) {
                     hasMember = true;
                 } else {
                     hasMember = false;
@@ -262,7 +262,7 @@ public class StatusChecker {
     private boolean getClusterInactive(VMClusterMonitor monitor, String partitionId) {
         boolean clusterInActive = false;
         for (NetworkPartitionContext networkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
-            for (PartitionContext partition : networkPartitionContext.getPartitionCtxts().values()) {
+            for (ClusterLevelPartitionContext partition : networkPartitionContext.getPartitionCtxts().values()) {
                 if (partitionId.equals(partition.getPartitionId()) &&
                         partition.getActiveMemberCount() <= partition.getMinimumMemberCount()) {
                     clusterInActive = true;

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
index c59bc31..4d4cb03 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusActiveProcessor.java
@@ -21,8 +21,8 @@ package org.apache.stratos.autoscaler.status.processor.cluster;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.AutoscalerContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.autoscaler.NetworkPartitionContext;
-import org.apache.stratos.autoscaler.PartitionContext;
 import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
 import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
 import org.apache.stratos.autoscaler.status.processor.StatusProcessor;
@@ -67,10 +67,10 @@ public class ClusterStatusActiveProcessor extends ClusterStatusProcessor {
         boolean clusterActive = false;
         for (NetworkPartitionContext networkPartitionContext : monitor.getNetworkPartitionCtxts(instanceId).values()) {
             //minimum check per partition
-            for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
-                if (partitionContext.getMinimumMemberCount() == partitionContext.getActiveMemberCount()) {
+            for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
+                if (clusterMonitorPartitionContext.getMinimumMemberCount() == clusterMonitorPartitionContext.getActiveMemberCount()) {
                     clusterActive = true;
-                } else if (partitionContext.getActiveMemberCount() > partitionContext.getMinimumMemberCount()) {
+                } else if (clusterMonitorPartitionContext.getActiveMemberCount() > clusterMonitorPartitionContext.getMinimumMemberCount()) {
                     log.info("cluster already activated...");
                     clusterActive = true;
                 } else {

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java
index 1fc5292..6728371 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusInActiveProcessor.java
@@ -21,8 +21,8 @@ package org.apache.stratos.autoscaler.status.processor.cluster;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.AutoscalerContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.autoscaler.NetworkPartitionContext;
-import org.apache.stratos.autoscaler.PartitionContext;
 import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
 import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
 import org.apache.stratos.autoscaler.status.processor.StatusProcessor;
@@ -92,7 +92,7 @@ public class ClusterStatusInActiveProcessor extends ClusterStatusProcessor {
     private boolean getClusterInactive(VMClusterMonitor monitor) {
         boolean clusterInActive = false;
         for (NetworkPartitionContext networkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
-            for (PartitionContext partition : networkPartitionContext.getPartitionCtxts().values()) {
+            for (ClusterLevelPartitionContext partition : networkPartitionContext.getPartitionCtxts().values()) {
                 if (partition.getActiveMemberCount() <= partition.getMinimumMemberCount()) {
                     clusterInActive = true;
                     return clusterInActive;

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
index faee4e1..7da0012 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/cluster/ClusterStatusTerminatedProcessor.java
@@ -21,8 +21,8 @@ package org.apache.stratos.autoscaler.status.processor.cluster;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.AutoscalerContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.autoscaler.NetworkPartitionContext;
-import org.apache.stratos.autoscaler.PartitionContext;
 import org.apache.stratos.autoscaler.applications.ApplicationHolder;
 import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
 import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
@@ -122,8 +122,8 @@ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor {
         boolean hasMember = false;
         for (NetworkPartitionContext networkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
             //minimum check per partition
-            for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
-                if (partitionContext.getNonTerminatedMemberCount() > 0) {
+            for (ClusterLevelPartitionContext clusterMonitorPartitionContext : networkPartitionContext.getPartitionCtxts().values()) {
+                if (clusterMonitorPartitionContext.getNonTerminatedMemberCount() > 0) {
                     hasMember = true;
                 } else {
                     hasMember = false;

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java
index 98449c0..c58cef6 100644
--- a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java
+++ b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestMinimumRule.java
@@ -78,7 +78,7 @@ public class TestMinimumRule {
         ksession = kbase.newStatefulKnowledgeSession();
         ksession.setGlobal("clusterId", "lb.cluster.1");
         ksession.setGlobal("lbRef", null);
-        PartitionContext p = new PartitionContext(conf.getLong("autoscaler.member.expiryTimeout", 900000));
+        ClusterLevelPartitionContext p = new ClusterLevelPartitionContext(conf.getLong("autoscaler.member.expiryTimeout", 900000));
         p.setPendingMembers(new ArrayList<MemberContext>());
         p.setMinimumMemberCount(1);
         ksession.insert(p);

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java
index a7af2a6..5597426 100644
--- a/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java
+++ b/components/org.apache.stratos.autoscaler/src/test/java/org/apache/stratos/autoscaler/TestObsoletedMemberRule.java
@@ -34,9 +34,7 @@ import org.drools.runtime.rule.FactHandle;
 import org.junit.Before;
 import org.junit.Test;
 
-import java.util.ArrayList;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
@@ -83,7 +81,7 @@ public class TestObsoletedMemberRule {
             throw new IllegalArgumentException("Knowledge base is null.");
         }
         ksession = kbase.newStatefulKnowledgeSession();
-        PartitionContext p = new PartitionContext(conf.getLong("autoscaler.member.expiryTimeout", 900000));
+        ClusterLevelPartitionContext p = new ClusterLevelPartitionContext(conf.getLong("autoscaler.member.expiryTimeout", 900000));
         p.setObsoletedMembers(new ConcurrentHashMap<String, MemberContext>());
         String memberId = "member1";
         MemberContext ctxt1 = new MemberContext();
@@ -115,7 +113,7 @@ public class TestObsoletedMemberRule {
         }
 
         ksession = kbase.newStatefulKnowledgeSession();
-        PartitionContext p = new PartitionContext(conf.getLong("autoscaler.member.expiryTimeout", 900000));
+        ClusterLevelPartitionContext p = new ClusterLevelPartitionContext(conf.getLong("autoscaler.member.expiryTimeout", 900000));
         p.setObsoletedMembers(new ConcurrentHashMap<String, MemberContext>());
         String memberId1 = "member1";
         String memberId2 = "member2";

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl b/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
index a10eccb..b370721 100644
--- a/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
+++ b/components/org.apache.stratos.autoscaler/src/test/resources/autoscaler.drl
@@ -32,7 +32,7 @@ import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;
-import org.apache.stratos.autoscaler.PartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.commons.logging.Log;
@@ -57,7 +57,7 @@ import function org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator.deleg
 rule "Minimum Rule"
 dialect "mvel"
        when
-	       $ctxt : PartitionContext ()
+	       $ctxt : ClusterLevelPartitionContext ()
 	       eval($ctxt.getCurrentMemberCount() < $ctxt.getMinimumMemberCount())
 
        then

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/test/resources/test-minimum-autoscaler-rule.drl
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/resources/test-minimum-autoscaler-rule.drl b/components/org.apache.stratos.autoscaler/src/test/resources/test-minimum-autoscaler-rule.drl
index 0bc5284..ea57cae 100644
--- a/components/org.apache.stratos.autoscaler/src/test/resources/test-minimum-autoscaler-rule.drl
+++ b/components/org.apache.stratos.autoscaler/src/test/resources/test-minimum-autoscaler-rule.drl
@@ -31,7 +31,7 @@ import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;
-import org.apache.stratos.autoscaler.PartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.commons.logging.Log;
@@ -54,7 +54,7 @@ import function org.apache.stratos.autoscaler.TestDelegator.setMinRuleFired;
 rule "Minimum Rule"
 dialect "mvel"
        when
-	       $ctxt : PartitionContext ()
+	       $ctxt : ClusterLevelPartitionContext ()
 	       eval($ctxt.getTotalMemberCount() < $ctxt.getMinimumMemberCount())
 
        then

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/test/resources/test-terminating-obsoleted-members-rule.drl
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/test/resources/test-terminating-obsoleted-members-rule.drl b/components/org.apache.stratos.autoscaler/src/test/resources/test-terminating-obsoleted-members-rule.drl
index 5e6829a..b4af9ad 100644
--- a/components/org.apache.stratos.autoscaler/src/test/resources/test-terminating-obsoleted-members-rule.drl
+++ b/components/org.apache.stratos.autoscaler/src/test/resources/test-terminating-obsoleted-members-rule.drl
@@ -31,7 +31,7 @@ import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;
-import org.apache.stratos.autoscaler.PartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.commons.logging.Log;
@@ -54,7 +54,7 @@ import function org.apache.stratos.autoscaler.TestDelegator.addObsoleteMember;
 rule "Terminate Obsoleted Instances"
 dialect "mvel"
         when
-            $ctxt : PartitionContext ()
+            $ctxt : ClusterLevelPartitionContext ()
             eval($ctxt.getObsoletedMembers().keySet().size() > 0)
             memberId : String() from $ctxt.getObsoletedMembers().keySet()
             memCtxt : MemberContext() from $ctxt.getObsoletedMembers().get(memberId)

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/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 6a1300e..62d2fb8 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
@@ -31,7 +31,7 @@ import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;
-import org.apache.stratos.autoscaler.PartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.stratos.autoscaler.partition.PartitionGroup;
 import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/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 8ff3bc1..7bcc789 100755
--- a/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/mincheck.drl
@@ -31,7 +31,7 @@ import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;
-import org.apache.stratos.autoscaler.PartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.commons.logging.Log;
@@ -55,7 +55,7 @@ global Integer primaryMemberCount;
 rule "Minimum Rule"
 dialect "mvel"
        when
-           $ctxt : PartitionContext ()
+           $ctxt : ClusterLevelPartitionContext ()
            eval(log.debug("Running minimum rule: [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId()))
 	       eval(log.debug("[min-check] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() + " Non terminated member count: " + $ctxt.getNonTerminatedMemberCount()))
 	       eval(log.debug("[min-check] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() + " Minimum member count: " + $ctxt.getMinimumMemberCount()))

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl b/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl
index 81120d3..ba90499 100755
--- a/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/obsoletecheck.drl
@@ -31,7 +31,7 @@ import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;
-import org.apache.stratos.autoscaler.PartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.commons.logging.Log;
@@ -54,7 +54,7 @@ global Integer primaryMemberCount;
 rule "Terminate Obsoleted Instances"
 dialect "mvel"
         when
-            $ctxt : PartitionContext ()
+            $ctxt : ClusterLevelPartitionContext ()
             eval(log.debug("Running obsolete instances rule: [partition] " + $ctxt.getPartitionId() + " [network-partition] " + $ctxt.getNetworkPartitionId()))
             eval(log.debug("[obsolete-check] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() +" Obsolete member count: " + $ctxt.getObsoletedMembers().size()))
             eval($ctxt.getObsoletedMembers().keySet().size() > 0)
@@ -67,7 +67,7 @@ end
 rule "Cleanup Instances which are pending termination"
 dialect "mvel"
         when
-            $ctxt : PartitionContext ()
+            $ctxt : ClusterLevelPartitionContext ()
             eval(log.debug("Running instances cleanup event sender rule: [partition] " + $ctxt.getPartitionId() + " [network-partition] " + $ctxt.getNetworkPartitionId()))
             eval(log.debug("[instance-cleanup-check] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() +" Pending termination member count: " + $ctxt.getTerminationPendingMembers().size()))
             eval($ctxt.getTerminationPendingMembers().size() > 0)

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/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 40a4fee..4a8927f 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
@@ -36,7 +36,7 @@ import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.algorithm.AutoscaleAlgorithm;
 import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;
-import org.apache.stratos.autoscaler.PartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.stratos.autoscaler.partition.PartitionGroup;
 import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
@@ -158,14 +158,14 @@ dialect "mvel"
                 if(partition != null){
                     log.info("[scale-down] Partition available to scale down ");
                     log.debug("[scale-down] " + " [partition] " + partition.getId() + " [cluster] " + clusterId);
-                    partitionContext = networkPartitionContext.getPartitionCtxt(partition.getId());
+                    clusterMonitorPartitionContext = networkPartitionContext.getPartitionCtxt(partition.getId());
 
 
 					// 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()){
+                    for(MemberStatsContext memberStatsContext: clusterMonitorPartitionContext.getMemberStatsContexts().values()){
 					
 						if( !primaryMembers.contains(memberStatsContext.getMemberId()) ) {
 						
@@ -207,7 +207,7 @@ dialect "mvel"
                         log.debug("[scale-down] " + " [partition] " + partition.getId() + " [cluster] "
                             + clusterId + " Member with lowest overall load: " + selectedMemberStatsContext.getMemberId());
 
-                        delegator.delegateTerminate(partitionContext, selectedMemberStatsContext.getMemberId());
+                        delegator.delegateTerminate(clusterMonitorPartitionContext, selectedMemberStatsContext.getMemberId());
                     }
                 }
             } else{

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/products/stratos/modules/distribution/src/main/conf/drools/terminateall.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/drools/terminateall.drl b/products/stratos/modules/distribution/src/main/conf/drools/terminateall.drl
index 75c26fc..42c5827 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/terminateall.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/terminateall.drl
@@ -20,7 +20,7 @@
 package org.apache.stratos.autoscaler.rule;
 
 import org.apache.stratos.messaging.domain.topology.Cluster;
-import org.apache.stratos.autoscaler.PartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 
 global org.apache.stratos.autoscaler.rule.RuleLog log;
 global org.apache.stratos.autoscaler.rule.RuleTasksDelegator $delegator;
@@ -29,7 +29,7 @@ rule "Terminate all Rule"
 
 dialect "mvel"
         when
-            $ctxt : PartitionContext ()
+            $ctxt : ClusterLevelPartitionContext ()
             eval(log.debug("Running terminate all rule: [partition] " + $ctxt.getPartitionId() + " [network-partition] " + $ctxt.getNetworkPartitionId()))
             eval(log.debug("[terminate all] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() +" Member count: " + $ctxt.getMemberStatsContexts().size()))
             eval($ctxt.getMemberStatsContexts().size() > 0)

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/products/stratos/modules/distribution/src/main/conf/drools/terminatedependency.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/drools/terminatedependency.drl b/products/stratos/modules/distribution/src/main/conf/drools/terminatedependency.drl
index 9ea243c..681f938 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/terminatedependency.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/terminatedependency.drl
@@ -20,7 +20,7 @@
 package org.apache.stratos.autoscaler.rule;
 
 import org.apache.stratos.messaging.domain.topology.Cluster;
-import org.apache.stratos.autoscaler.PartitionContext;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 
 global org.apache.stratos.autoscaler.rule.RuleLog log;
 global org.apache.stratos.autoscaler.rule.RuleTasksDelegator $delegator;
@@ -35,7 +35,7 @@ rule "Terminate Dependency Rule"
 
 dialect "mvel"
         when
-            $ctxt : PartitionContext ()
+            $ctxt : ClusterLevelPartitionContext ()
             eval(log.debug("Running terminate dependency rule: [partition] " + $ctxt.getPartitionId() + " [network-partition] " + $ctxt.getNetworkPartitionId()))
             eval(log.debug("[terminate dependency] [network-partition] " + $ctxt.getNetworkPartitionId() + " [partition] " + $ctxt.getPartitionId() +" Member count: " + $ctxt.getMemberStatsContexts().size()))
             eval(log.debug("Grouping ... in terminatedependency rule terminating all members " + $ctxt.getAllMemberForTerminationCount()))


[2/3] stratos git commit: Rename PartitionContext.java to CLusterLevelPartitionContext.java

Posted by la...@apache.org.
Rename PartitionContext.java to CLusterLevelPartitionContext.java


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/a19c5a80
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/a19c5a80
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/a19c5a80

Branch: refs/heads/master
Commit: a19c5a80ad9ef8a6f714139db2968fd24102ca68
Parents: 8683ac9
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Thu Nov 27 15:27:03 2014 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Thu Nov 27 15:27:03 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/ClusterContextFactory.java       |  37 +-
 .../ClusterLevelPartitionContext.java           | 722 +++++++++++++++++++
 .../autoscaler/NetworkPartitionContext.java     |  12 +-
 .../stratos/autoscaler/PartitionContext.java    | 722 -------------------
 .../monitor/cluster/VMClusterMonitor.java       |  42 +-
 .../monitor/cluster/VMLbClusterMonitor.java     |   5 +-
 .../cluster/VMServiceClusterMonitor.java        |   3 +-
 .../rule/AutoscalerRuleEvaluator.java           |   8 +-
 .../autoscaler/rule/RuleTasksDelegator.java     |  42 +-
 .../status/processor/StatusChecker.java         |  14 +-
 .../cluster/ClusterStatusActiveProcessor.java   |   8 +-
 .../cluster/ClusterStatusInActiveProcessor.java |   4 +-
 .../ClusterStatusTerminatedProcessor.java       |   6 +-
 .../stratos/autoscaler/TestMinimumRule.java     |   2 +-
 .../autoscaler/TestObsoletedMemberRule.java     |   6 +-
 .../src/test/resources/autoscaler.drl           |   4 +-
 .../resources/test-minimum-autoscaler-rule.drl  |   4 +-
 .../test-terminating-obsoleted-members-rule.drl |   4 +-
 .../src/main/conf/drools/dependent-scaling.drl  |   2 +-
 .../src/main/conf/drools/mincheck.drl           |   4 +-
 .../src/main/conf/drools/obsoletecheck.drl      |   6 +-
 .../src/main/conf/drools/scaling.drl            |   8 +-
 .../src/main/conf/drools/terminateall.drl       |   4 +-
 .../main/conf/drools/terminatedependency.drl    |   4 +-
 24 files changed, 833 insertions(+), 840 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContextFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContextFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContextFactory.java
index 317e7a2..4e17b2a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContextFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterContextFactory.java
@@ -37,7 +37,6 @@ import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.messaging.domain.topology.Cluster;
 import org.apache.stratos.messaging.domain.topology.Member;
 import org.apache.stratos.messaging.domain.topology.MemberStatus;
-import org.apache.stratos.messaging.util.*;
 import org.apache.stratos.messaging.util.Constants;
 
 import java.util.HashMap;
@@ -96,10 +95,10 @@ public class ClusterContextFactory {
                     partitionGroup.getPartitions());
 
             for (Partition partition : partitionGroup.getPartitions()) {
-                PartitionContext partitionContext = new PartitionContext(partition);
-                partitionContext.setServiceName(cluster.getServiceName());
-                partitionContext.setProperties(cluster.getProperties());
-                partitionContext.setNetworkPartitionId(partitionGroup.getId());
+                ClusterLevelPartitionContext clusterMonitorPartitionContext = new ClusterLevelPartitionContext(partition);
+                clusterMonitorPartitionContext.setServiceName(cluster.getServiceName());
+                clusterMonitorPartitionContext.setProperties(cluster.getProperties());
+                clusterMonitorPartitionContext.setNetworkPartitionId(partitionGroup.getId());
 
                 for (Member member : cluster.getMembers()) {
                     String memberId = member.getMemberId();
@@ -116,7 +115,7 @@ public class ClusterContextFactory {
                                 String msg = String.format("Active member loaded from topology and added to active member list, %s", member.toString());
                                 log.debug(msg);
                             }
-                            partitionContext.addActiveMember(memberContext);
+                            clusterMonitorPartitionContext.addActiveMember(memberContext);
 //                            networkPartitionContext.increaseMemberCountOfPartition(partition.getNetworkPartitionId(), 1);
 //                            partitionContext.incrementCurrentActiveMemberCount(1);
 
@@ -125,23 +124,23 @@ public class ClusterContextFactory {
                                 String msg = String.format("Pending member loaded from topology and added to pending member list, %s", member.toString());
                                 log.debug(msg);
                             }
-                            partitionContext.addPendingMember(memberContext);
+                            clusterMonitorPartitionContext.addPendingMember(memberContext);
 
 //                            networkPartitionContext.increaseMemberCountOfPartition(partition.getNetworkPartitionId(), 1);
                         } else if (MemberStatus.Suspended.equals(member.getStatus())) {
 //                            partitionContext.addFaultyMember(memberId);
                         }
-                        partitionContext.addMemberStatsContext(new MemberStatsContext(memberId));
+                        clusterMonitorPartitionContext.addMemberStatsContext(new MemberStatsContext(memberId));
                         if (log.isInfoEnabled()) {
                             log.info(String.format("Member stat context has been added: [member] %s", memberId));
                         }
                     }
 
                 }
-                networkPartitionContext.addPartitionContext(partitionContext);
+                networkPartitionContext.addPartitionContext(clusterMonitorPartitionContext);
                 if (log.isInfoEnabled()) {
                     log.info(String.format("Partition context has been added: [partition] %s",
-                            partitionContext.getPartitionId()));
+                            clusterMonitorPartitionContext.getPartitionId()));
                 }
             }
 
@@ -201,11 +200,11 @@ public class ClusterContextFactory {
             // FIXME pick a random partition
             Partition partition =
                     partitionGroup.getPartitions()[new Random().nextInt(partitionGroup.getPartitions().length)];
-            PartitionContext partitionContext = new PartitionContext(partition);
-            partitionContext.setServiceName(cluster.getServiceName());
-            partitionContext.setProperties(cluster.getProperties());
-            partitionContext.setNetworkPartitionId(networkPartitionId);
-            partitionContext.setMinimumMemberCount(1);//Here it hard codes the minimum value as one for LB cartridge partitions
+            ClusterLevelPartitionContext clusterMonitorPartitionContext = new ClusterLevelPartitionContext(partition);
+            clusterMonitorPartitionContext.setServiceName(cluster.getServiceName());
+            clusterMonitorPartitionContext.setProperties(cluster.getProperties());
+            clusterMonitorPartitionContext.setNetworkPartitionId(networkPartitionId);
+            clusterMonitorPartitionContext.setMinimumMemberCount(1);//Here it hard codes the minimum value as one for LB cartridge partitions
 
             NetworkPartitionContext networkPartitionContext = new NetworkPartitionContext(networkPartitionId,
                     partitionGroup.getPartitionAlgo(),
@@ -224,7 +223,7 @@ public class ClusterContextFactory {
                             String msg = String.format("Active member loaded from topology and added to active member list, %s", member.toString());
                             log.debug(msg);
                         }
-                        partitionContext.addActiveMember(memberContext);
+                        clusterMonitorPartitionContext.addActiveMember(memberContext);
 //                        networkPartitionContext.increaseMemberCountOfPartition(partition.getNetworkPartitionId(), 1);
 //                        partitionContext.incrementCurrentActiveMemberCount(1);
                     } else if (MemberStatus.Created.equals(member.getStatus()) ||
@@ -233,20 +232,20 @@ public class ClusterContextFactory {
                             String msg = String.format("Pending member loaded from topology and added to pending member list, %s", member.toString());
                             log.debug(msg);
                         }
-                        partitionContext.addPendingMember(memberContext);
+                        clusterMonitorPartitionContext.addPendingMember(memberContext);
 //                        networkPartitionContext.increaseMemberCountOfPartition(partition.getNetworkPartitionId(), 1);
                     } else if (MemberStatus.Suspended.equals(member.getStatus())) {
 //                        partitionContext.addFaultyMember(memberId);
                     }
 
-                    partitionContext.addMemberStatsContext(new MemberStatsContext(memberId));
+                    clusterMonitorPartitionContext.addMemberStatsContext(new MemberStatsContext(memberId));
                     if (log.isInfoEnabled()) {
                         log.info(String.format("Member stat context has been added: [member] %s", memberId));
                     }
                 }
 
             }
-            networkPartitionContext.addPartitionContext(partitionContext);
+            networkPartitionContext.addPartitionContext(clusterMonitorPartitionContext);
 
             // populate lb cluster id in network partition context.
             java.util.Properties props = cluster.getProperties();

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterLevelPartitionContext.java
new file mode 100644
index 0000000..01f0b8e
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterLevelPartitionContext.java
@@ -0,0 +1,722 @@
+/*
+ * 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;
+
+import org.apache.commons.configuration.XMLConfiguration;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.util.ConfUtil;
+import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
+import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
+
+import java.io.Serializable;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
+import org.apache.stratos.common.constants.StratosConstants;
+
+/**
+ * This is an object that inserted to the rules engine.
+ * Holds information about a partition.
+ *
+ *
+ */
+
+public class ClusterLevelPartitionContext implements Serializable{
+
+	private static final long serialVersionUID = -2920388667345980487L;
+	private static final Log log = LogFactory.getLog(ClusterLevelPartitionContext.class);
+    private String partitionId;
+    private String serviceName;
+    private String networkPartitionId;
+    private Partition partition;
+    private int minimumMemberCount = 0;
+    private int pendingMembersFailureCount = 0;
+    private final int PENDING_MEMBER_FAILURE_THRESHOLD = 5;
+
+    // properties
+    private Properties properties;
+    
+    // 15 mints as the default
+    private long pendingMemberExpiryTime = 900000;
+    // pending members
+    private List<MemberContext> pendingMembers;
+    
+    // 1 day as default
+    private long obsoltedMemberExpiryTime = 1*24*60*60*1000;
+
+    // 30 mints as default
+    private long terminationPendingMemberExpiryTime = 1800000;
+
+    // members to be terminated
+    private Map<String, MemberContext> obsoletedMembers;
+    
+    // active members
+    private List<MemberContext> activeMembers;
+
+    // termination pending members, member is added to this when Autoscaler send grace fully shut down event
+    private List<MemberContext> terminationPendingMembers;
+
+    //member id: time that member is moved to termination pending status
+    private Map<String, Long> terminationPendingStartedTime;
+
+    //Keep statistics come from CEP
+    private Map<String, MemberStatsContext> memberStatsContexts;
+
+    // for the use of tests
+    public ClusterLevelPartitionContext(long memberExpiryTime) {
+
+        this.activeMembers = new ArrayList<MemberContext>();
+        this.terminationPendingMembers = new ArrayList<MemberContext>();
+        pendingMemberExpiryTime = memberExpiryTime;
+    }
+    
+    public ClusterLevelPartitionContext(Partition partition) {
+        this.setPartition(partition);
+        this.minimumMemberCount = partition.getPartitionMin();
+        this.partitionId = partition.getId();
+        this.pendingMembers = new ArrayList<MemberContext>();
+        this.activeMembers = new ArrayList<MemberContext>();
+        this.terminationPendingMembers = new ArrayList<MemberContext>();
+        this.obsoletedMembers = new ConcurrentHashMap<String, MemberContext>();
+        memberStatsContexts = new ConcurrentHashMap<String, MemberStatsContext>();
+
+        terminationPendingStartedTime = new HashMap<String, Long>();
+        // check if a different value has been set for expiryTime
+        XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration();
+        pendingMemberExpiryTime = conf.getLong(StratosConstants.PENDING_VM_MEMBER_EXPIRY_TIMEOUT, 900000);
+        obsoltedMemberExpiryTime = conf.getLong(StratosConstants.OBSOLETED_VM_MEMBER_EXPIRY_TIMEOUT, 86400000);
+        if (log.isDebugEnabled()) {
+        	log.debug("Member expiry time is set to: " + pendingMemberExpiryTime);
+        	log.debug("Member obsoleted expiry time is set to: " + obsoltedMemberExpiryTime);
+        }
+
+        Thread th = new Thread(new PendingMemberWatcher(this));
+        th.start();
+        Thread th2 = new Thread(new ObsoletedMemberWatcher(this));
+        th2.start();
+        Thread th3 = new Thread(new TerminationPendingMemberWatcher(this));
+        th3.start();
+    }
+
+    public long getTerminationPendingStartedTimeOfMember(String memberId) {
+        return terminationPendingStartedTime.get(memberId);
+    }
+    
+    public List<MemberContext> getPendingMembers() {
+        return pendingMembers;
+    }
+    
+    public void setPendingMembers(List<MemberContext> pendingMembers) {
+        this.pendingMembers = pendingMembers;
+    }
+    
+    public int getActiveMemberCount() {
+        return activeMembers.size();
+    }
+    
+    public void setActiveMembers(List<MemberContext> activeMembers) {
+        this.activeMembers = activeMembers;
+    }
+    
+    public String getPartitionId() {
+        return partitionId;
+    }
+    public void setPartitionId(String partitionId) {
+        this.partitionId = partitionId;
+    }
+
+    public int getMinimumMemberCount() {
+        return minimumMemberCount;
+    }
+
+    public void setMinimumMemberCount(int minimumMemberCount) {
+        this.minimumMemberCount = minimumMemberCount;
+    }
+
+    public Partition getPartition() {
+        return partition;
+    }
+
+    public void setPartition(Partition partition) {
+        this.partition = partition;
+    }
+    
+    public void addPendingMember(MemberContext ctxt) {
+        this.pendingMembers.add(ctxt);
+    }
+    
+    public boolean removePendingMember(String id) {
+    	if (id == null) {
+            return false;
+        }
+        synchronized (pendingMembers) {
+            for (Iterator<MemberContext> iterator = pendingMembers.iterator(); iterator.hasNext(); ) {
+                MemberContext pendingMember = (MemberContext) iterator.next();
+                if (id.equals(pendingMember.getMemberId())) {
+                    iterator.remove();
+                    return true;
+                }
+
+            }
+        }
+    	
+    	return false;
+    }
+    
+    public void movePendingMemberToActiveMembers(String memberId) {
+        if (memberId == null) {
+            return;
+        }
+        synchronized (pendingMembers) {
+            Iterator<MemberContext> iterator = pendingMembers.listIterator();
+            while (iterator.hasNext()) {
+                MemberContext pendingMember = iterator.next();
+                if (pendingMember == null) {
+                    iterator.remove();
+                    continue;
+                }
+                if (memberId.equals(pendingMember.getMemberId())) {
+                    // member is activated
+                    // remove from pending list
+                    iterator.remove();
+                    // add to the activated list
+                    this.activeMembers.add(pendingMember);
+                    pendingMembersFailureCount = 0;
+                    if (log.isDebugEnabled()) {
+                        log.debug(String.format("Pending member is removed and added to the " +
+                                "activated member list. [Member Id] %s", memberId));
+                    }
+                    break;
+                }
+            }
+        }
+    }
+
+    public boolean activeMemberAvailable(String memberId) {
+        for (MemberContext activeMember : activeMembers) {
+            if (memberId.equals(activeMember.getMemberId())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public boolean pendingMemberAvailable(String memberId) {
+
+        for (MemberContext pendingMember : pendingMembers) {
+            if (memberId.equals(pendingMember.getMemberId())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public void moveActiveMemberToTerminationPendingMembers(String memberId) {
+        if (memberId == null) {
+            return;
+        }
+        synchronized (activeMembers) {
+            Iterator<MemberContext> iterator = activeMembers.listIterator();
+            while (iterator.hasNext()) {
+                MemberContext activeMember = iterator.next();
+                if (activeMember == null) {
+                    iterator.remove();
+                    continue;
+                }
+                if (memberId.equals(activeMember.getMemberId())) {
+                    // member is activated
+                    // remove from pending list
+                    iterator.remove();
+                    // add to the activated list
+                    this.terminationPendingMembers.add(activeMember);
+                    if (log.isDebugEnabled()) {
+                        log.debug(String.format("Active member is removed and added to the " +
+                                "termination pending member list. [Member Id] %s", memberId));
+                    }
+                    break;
+                }
+            }
+        }
+    }
+
+    /**
+     * Check the member lists for the provided member ID and move the member to the obsolete list
+     *
+     * @param memberId The member ID of the member to search
+     */
+    public void moveMemberToObsoleteList(String memberId) {
+        if (memberId == null) {
+            return;
+        }
+
+        // check active member list
+        Iterator<MemberContext> activeMemberIterator = activeMembers.listIterator();
+        MemberContext removedMember = this.removeMemberFrom(activeMemberIterator, memberId);
+        if (removedMember != null) {
+            this.addObsoleteMember(removedMember);
+            removedMember.setObsoleteInitTime(System.currentTimeMillis());
+            if (log.isDebugEnabled()) {
+                log.debug(String.format("Active member is removed and added to the " +
+                        "obsolete member list. [Member Id] %s", memberId));
+            }
+
+            return;
+        }
+
+        // check pending member list
+        Iterator<MemberContext> pendingMemberIterator = pendingMembers.listIterator();
+        removedMember = this.removeMemberFrom(pendingMemberIterator, memberId);
+        if (removedMember != null) {
+            this.addObsoleteMember(removedMember);
+            removedMember.setObsoleteInitTime(System.currentTimeMillis());
+            if (log.isDebugEnabled()) {
+                log.debug(String.format("Pending member is removed and added to the " +
+                        "obsolete member list. [Member Id] %s", memberId));
+            }
+
+            return;
+        }
+
+        // check termination pending member list
+        Iterator<MemberContext> terminationPendingMembersIterator = terminationPendingMembers.listIterator();
+        removedMember = this.removeMemberFrom(terminationPendingMembersIterator, memberId);
+        if (removedMember != null) {
+            this.addObsoleteMember(removedMember);
+            removedMember.setObsoleteInitTime(System.currentTimeMillis());
+            if (log.isDebugEnabled()) {
+                log.debug(String.format("Termination Pending member is removed and added to the " +
+                        "obsolete member list. [Member Id] %s", memberId));
+            }
+        }
+    }
+
+    /**
+     * Removes the {@link org.apache.stratos.cloud.controller.stub.pojo.MemberContext} object mapping
+     * to the specified member id from the specified MemberContext collection
+     *
+     * @param iterator The {@link java.util.Iterator} for the collection containing {@link org.apache.stratos.cloud.controller.stub.pojo.MemberContext}
+     *                 objects
+     * @param memberId Member Id {@link String} for the {@link org.apache.stratos.cloud.controller.stub.pojo.MemberContext}
+     *                 to be removed
+     * @return {@link org.apache.stratos.cloud.controller.stub.pojo.MemberContext} object if
+     * object found and removed, null if otherwise.
+     */
+    private MemberContext removeMemberFrom(Iterator<MemberContext> iterator, String memberId) {
+        while (iterator.hasNext()) {
+            MemberContext activeMember = iterator.next();
+            if (activeMember == null) {
+                iterator.remove();
+                continue;
+            }
+            if (memberId.equals(activeMember.getMemberId())) {
+                iterator.remove();
+                return activeMember;
+            }
+        }
+
+        return null;
+    }
+    
+    public void addActiveMember(MemberContext ctxt) {
+        this.activeMembers.add(ctxt);
+    }
+    
+    public void removeActiveMember(MemberContext ctxt) {
+        this.activeMembers.remove(ctxt);
+    }
+
+    public boolean removeTerminationPendingMember(String memberId) {
+        boolean terminationPendingMemberAvailable = false;
+        synchronized (terminationPendingMembers) {
+            for (MemberContext memberContext : terminationPendingMembers) {
+                if (memberContext.getMemberId().equals(memberId)) {
+                    terminationPendingMemberAvailable = true;
+                    terminationPendingMembers.remove(memberContext);
+                    break;
+                }
+            }
+        }
+        return terminationPendingMemberAvailable;
+    }
+    
+    public long getObsoltedMemberExpiryTime() {
+    	return obsoltedMemberExpiryTime;
+    }
+    
+    public void setObsoltedMemberExpiryTime(long obsoltedMemberExpiryTime) {
+    	this.obsoltedMemberExpiryTime = obsoltedMemberExpiryTime;
+    }
+    
+    public void addObsoleteMember(MemberContext ctxt) {
+        this.obsoletedMembers.put(ctxt.getMemberId(), ctxt);
+    }
+    
+    public boolean removeObsoleteMember(String memberId) {
+    	if(this.obsoletedMembers.remove(memberId) == null) {
+    		return false;
+    	}
+    	return true;
+    }
+
+    public long getPendingMemberExpiryTime() {
+        return pendingMemberExpiryTime;
+    }
+
+    public void setPendingMemberExpiryTime(long pendingMemberExpiryTime) {
+        this.pendingMemberExpiryTime = pendingMemberExpiryTime;
+    }
+    
+    public Map<String, MemberContext> getObsoletedMembers() {
+        return obsoletedMembers;
+    }
+        
+    public void setObsoletedMembers(Map<String, MemberContext> obsoletedMembers) {
+        this.obsoletedMembers = obsoletedMembers;
+    }
+
+    public String getNetworkPartitionId() {
+        return networkPartitionId;
+    }
+
+    public void setNetworkPartitionId(String networkPartitionId) {
+        this.networkPartitionId = networkPartitionId;
+    }
+
+    
+    public Map<String, MemberStatsContext> getMemberStatsContexts() {
+        return memberStatsContexts;
+    }
+
+    public MemberStatsContext getMemberStatsContext(String memberId) {
+        return memberStatsContexts.get(memberId);
+    }
+
+    public void addMemberStatsContext(MemberStatsContext ctxt) {
+        this.memberStatsContexts.put(ctxt.getMemberId(), ctxt);
+    }
+
+    public void removeMemberStatsContext(String memberId) {
+        this.memberStatsContexts.remove(memberId);
+    }
+
+    public MemberStatsContext getPartitionCtxt(String id) {
+        return this.memberStatsContexts.get(id);
+    }
+
+//    public boolean memberExist(String memberId) {
+//        return memberStatsContexts.containsKey(memberId);
+//    }
+
+
+    public Properties getProperties() {
+        return properties;
+    }
+
+    public void setProperties(Properties properties) {
+        this.properties = properties;
+    }
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public List<MemberContext> getTerminationPendingMembers() {
+        return terminationPendingMembers;
+    }
+
+    public void setTerminationPendingMembers(List<MemberContext> terminationPendingMembers) {
+        this.terminationPendingMembers = terminationPendingMembers;
+    }
+
+    public int getTotalMemberCount() {
+
+        return activeMembers.size() + pendingMembers.size() + terminationPendingMembers.size();
+    }
+
+    public int getNonTerminatedMemberCount() {
+        return activeMembers.size() + pendingMembers.size();
+    }
+    
+    public List<MemberContext> getActiveMembers() {
+		return activeMembers;
+	}
+
+	public boolean removeActiveMemberById(String memberId) {
+        boolean removeActiveMember = false;
+        synchronized (activeMembers) {
+            Iterator<MemberContext> iterator = activeMembers.listIterator();
+            while (iterator.hasNext()) {
+                MemberContext memberContext = iterator.next();
+                if(memberId.equals(memberContext.getMemberId())){
+                    iterator.remove();
+                    removeActiveMember = true;
+
+                    break;
+                }
+            }
+        }
+        return removeActiveMember;
+    }
+
+    public boolean activeMemberExist(String memberId) {
+
+        for (MemberContext memberContext: activeMembers) {
+            if(memberId.equals(memberContext.getMemberId())){
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    public  int getAllMemberForTerminationCount () {
+    	int count = activeMembers.size() + pendingMembers.size() + terminationPendingMembers.size();
+		if (log.isDebugEnabled()) {
+    		log.debug("PartitionContext:getAllMemberForTerminationCount:size:" + count);
+    	}
+    	return count;
+    }
+    
+    // Map<String, MemberStatsContext> getMemberStatsContexts().keySet()
+    public  Set<String> getAllMemberForTermination () {
+
+    	List<MemberContext> merged =  new ArrayList<MemberContext>();
+    	
+    	
+    	merged.addAll(activeMembers);
+    	merged.addAll(pendingMembers);
+    	merged.addAll(terminationPendingMembers);
+    	
+    	Set<String> results = new HashSet<String>(merged.size());
+    	
+    	for (MemberContext ctx: merged) {
+    		results.add(ctx.getMemberId());
+    	}
+    	
+
+    	if (log.isDebugEnabled()) {
+    		log.debug("PartitionContext:getAllMemberForTermination:size:" + results.size());
+    	}
+    	
+    	//MemberContext x = new MemberContext();
+    	//x.getMemberId()
+    	
+    	return results;
+    }
+
+    public void movePendingTerminationMemberToObsoleteMembers(String memberId) {
+
+        log.info("Starting the moving of termination pending to obsolete for [member] " + memberId);
+        if (memberId == null) {
+            return;
+        }
+        Iterator<MemberContext> iterator = terminationPendingMembers.listIterator();
+        while (iterator.hasNext()) {
+            MemberContext terminationPendingMember = iterator.next();
+            if (terminationPendingMember == null) {
+                iterator.remove();
+                continue;
+            }
+            if (memberId.equals(terminationPendingMember.getMemberId())) {
+
+                log.info("Found termination pending member and trying to move [member] " + memberId + " to obsolete list");
+                // member is pending termination
+                // remove from pending termination list
+                iterator.remove();
+                // add to the obsolete list
+                this.obsoletedMembers.put(memberId, terminationPendingMember);
+
+                terminationPendingStartedTime.put(memberId, System.currentTimeMillis());
+
+                if (log.isDebugEnabled()) {
+                    log.debug(String.format("Termination pending member is removed and added to the " +
+                            "obsolete member list. [Member Id] %s", memberId));
+                }
+                break;
+            }
+        }
+    }
+
+    public MemberContext getPendingTerminationMember(String memberId) {
+        for (MemberContext memberContext : terminationPendingMembers) {
+            if (memberId.equals(memberContext.getMemberId())) {
+                return memberContext;
+            }
+        }
+        return null;
+    }
+
+    public long getTerminationPendingMemberExpiryTime() {
+        return terminationPendingMemberExpiryTime;
+    }
+
+    public void movePendingMemberToObsoleteMembers(String memberId) {
+        if (memberId == null) {
+            return;
+        }
+        Iterator<MemberContext> iterator = pendingMembers.listIterator();
+        while (iterator.hasNext()) {
+            MemberContext pendingMember = iterator.next();
+            if (pendingMember == null) {
+                iterator.remove();
+                continue;
+            }
+            if (memberId.equals(pendingMember.getMemberId())) {
+
+                // remove from pending list
+                iterator.remove();
+                // add to the obsolete list
+                this.obsoletedMembers.put(memberId, pendingMember);
+                if (log.isDebugEnabled()) {
+                    log.debug(String.format("Pending member is removed and added to the " +
+                            "obsolete member list. [Member Id] %s", memberId));
+                }
+                break;
+            }
+        }
+
+    }
+    
+    private class PendingMemberWatcher implements Runnable {
+        private ClusterLevelPartitionContext ctxt;
+
+        public PendingMemberWatcher(ClusterLevelPartitionContext ctxt) {
+            this.ctxt = ctxt;
+        }
+
+        @Override
+        public void run() {
+
+            while (true) {
+                long expiryTime = ctxt.getPendingMemberExpiryTime();
+                List<MemberContext> pendingMembers = ctxt.getPendingMembers();
+                
+                synchronized (pendingMembers) {
+                    Iterator<MemberContext> iterator = pendingMembers.listIterator();
+                    while ( iterator.hasNext()) {
+                        MemberContext pendingMember = iterator.next();
+
+                        if (pendingMember == null) {
+                            continue;
+                        }
+                        long pendingTime = System.currentTimeMillis() - pendingMember.getInitTime();
+                        if (pendingTime >= expiryTime) {
+
+
+                            iterator.remove();
+                            log.info("Pending state of member: " + pendingMember.getMemberId() +
+                                     " is expired. " + "Adding as an obsoleted member.");
+                            // member should be terminated
+                            ctxt.addObsoleteMember(pendingMember);
+                            pendingMembersFailureCount++;
+                            if( pendingMembersFailureCount > PENDING_MEMBER_FAILURE_THRESHOLD){
+                                setPendingMemberExpiryTime(expiryTime * 2);//Doubles the expiry time after the threshold of failure exceeded
+                                //TODO Implement an alerting system: STRATOS-369
+                            }
+                        }
+                    }
+                }
+
+                try {
+                    // TODO find a constant
+                    Thread.sleep(15000);
+                } catch (InterruptedException ignore) {
+                }
+            }
+        }
+
+    } 
+    
+    private class ObsoletedMemberWatcher implements Runnable {
+        private ClusterLevelPartitionContext ctxt;
+
+        public ObsoletedMemberWatcher(ClusterLevelPartitionContext ctxt) {
+            this.ctxt = ctxt;
+        }
+
+        @Override
+        public void run() {
+            while (true) {
+                long obsoltedMemberExpiryTime = ctxt.getObsoltedMemberExpiryTime();
+                Map<String, MemberContext> obsoletedMembers = ctxt.getObsoletedMembers();
+
+                Iterator<Entry<String, MemberContext>> iterator = obsoletedMembers.entrySet().iterator();
+                while (iterator.hasNext()) {
+                    Map.Entry<String, MemberContext> pairs = iterator.next();
+                    MemberContext obsoleteMember = (MemberContext) pairs.getValue();
+                    if (obsoleteMember == null) {
+                        continue;
+                    }
+                    long obsoleteTime = System.currentTimeMillis() - obsoleteMember.getInitTime();
+                    if (obsoleteTime >= obsoltedMemberExpiryTime) {
+                        iterator.remove();
+                    }
+                }
+                try {
+                    // TODO find a constant
+                    Thread.sleep(15000);
+                } catch (InterruptedException ignore) {
+                }
+            }
+        }
+    }
+
+    /**
+     * This thread is responsible for moving member to obsolete list if pending termination timeout happens
+     */
+    private class TerminationPendingMemberWatcher implements Runnable {
+        private ClusterLevelPartitionContext ctxt;
+
+        public TerminationPendingMemberWatcher(ClusterLevelPartitionContext ctxt) {
+            this.ctxt = ctxt;
+        }
+
+        @Override
+        public void run() {
+
+            while (true) {
+                long terminationPendingMemberExpiryTime = ctxt.getTerminationPendingMemberExpiryTime();
+
+                Iterator<MemberContext> iterator = ctxt.getTerminationPendingMembers().listIterator();
+                while (iterator.hasNext()) {
+
+                    MemberContext terminationPendingMember = iterator.next();
+                    if (terminationPendingMember == null){
+                        continue;
+                    }
+                    long terminationPendingTime = System.currentTimeMillis()
+                            - ctxt.getTerminationPendingStartedTimeOfMember(terminationPendingMember.getMemberId());
+                    if (terminationPendingTime >= terminationPendingMemberExpiryTime) {
+                        log.info("Moving [member] " + terminationPendingMember.getMemberId() + partitionId);
+                        iterator.remove();
+                        obsoletedMembers.put(terminationPendingMember.getMemberId(), terminationPendingMember);
+                    }
+                }
+                try {
+                    // TODO find a constant
+                    Thread.sleep(15000);
+                } catch (InterruptedException ignore) {}
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
index cadca37..8fc7bf7 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/NetworkPartitionContext.java
@@ -72,7 +72,7 @@ public class NetworkPartitionContext implements Serializable{
     private int currentPartitionIndex;
 
     //partitions of this network partition
-    private final Map<String, PartitionContext> partitionCtxts;
+    private final Map<String, ClusterLevelPartitionContext> partitionCtxts;
 
     public NetworkPartitionContext(String id, String partitionAlgo, Partition[] partitions) {
 
@@ -84,7 +84,7 @@ public class NetworkPartitionContext implements Serializable{
         } else {
             this.partitions = Arrays.copyOf(partitions, partitions.length);
         }
-        partitionCtxts = new HashMap<String, PartitionContext>();
+        partitionCtxts = new HashMap<String, ClusterLevelPartitionContext>();
         requestsInFlight = new RequestsInFlight();
         loadAverage = new LoadAverage();
         memoryConsumption = new MemoryConsumption();
@@ -359,16 +359,16 @@ public class NetworkPartitionContext implements Serializable{
         return id;
     }
 
-    public Map<String, PartitionContext> getPartitionCtxts() {
+    public Map<String, ClusterLevelPartitionContext> getPartitionCtxts() {
         return partitionCtxts;
     }
 
-    public PartitionContext getPartitionCtxt(String partitionId) {
+    public ClusterLevelPartitionContext getPartitionCtxt(String partitionId) {
         return partitionCtxts.get(partitionId);
     }
 
-    public void addPartitionContext(PartitionContext partitionContext) {
-        partitionCtxts.put(partitionContext.getPartitionId(), partitionContext);
+    public void addPartitionContext(ClusterLevelPartitionContext clusterMonitorPartitionContext) {
+        partitionCtxts.put(clusterMonitorPartitionContext.getPartitionId(), clusterMonitorPartitionContext);
     }
 
     public String getPartitionAlgorithm() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
deleted file mode 100644
index 162ae98..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java
+++ /dev/null
@@ -1,722 +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;
-
-import org.apache.commons.configuration.XMLConfiguration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.util.ConfUtil;
-import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
-import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
-
-import java.io.Serializable;
-import java.util.*;
-import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentHashMap;
-import org.apache.stratos.common.constants.StratosConstants;
-
-/**
- * This is an object that inserted to the rules engine.
- * Holds information about a partition.
- *
- *
- */
-
-public class PartitionContext implements Serializable{
-
-	private static final long serialVersionUID = -2920388667345980487L;
-	private static final Log log = LogFactory.getLog(PartitionContext.class);
-    private String partitionId;
-    private String serviceName;
-    private String networkPartitionId;
-    private Partition partition;
-    private int minimumMemberCount = 0;
-    private int pendingMembersFailureCount = 0;
-    private final int PENDING_MEMBER_FAILURE_THRESHOLD = 5;
-
-    // properties
-    private Properties properties;
-    
-    // 15 mints as the default
-    private long pendingMemberExpiryTime = 900000;
-    // pending members
-    private List<MemberContext> pendingMembers;
-    
-    // 1 day as default
-    private long obsoltedMemberExpiryTime = 1*24*60*60*1000;
-
-    // 30 mints as default
-    private long terminationPendingMemberExpiryTime = 1800000;
-
-    // members to be terminated
-    private Map<String, MemberContext> obsoletedMembers;
-    
-    // active members
-    private List<MemberContext> activeMembers;
-
-    // termination pending members, member is added to this when Autoscaler send grace fully shut down event
-    private List<MemberContext> terminationPendingMembers;
-
-    //member id: time that member is moved to termination pending status
-    private Map<String, Long> terminationPendingStartedTime;
-
-    //Keep statistics come from CEP
-    private Map<String, MemberStatsContext> memberStatsContexts;
-
-    // for the use of tests
-    public PartitionContext(long memberExpiryTime) {
-
-        this.activeMembers = new ArrayList<MemberContext>();
-        this.terminationPendingMembers = new ArrayList<MemberContext>();
-        pendingMemberExpiryTime = memberExpiryTime;
-    }
-    
-    public PartitionContext(Partition partition) {
-        this.setPartition(partition);
-        this.minimumMemberCount = partition.getPartitionMin();
-        this.partitionId = partition.getId();
-        this.pendingMembers = new ArrayList<MemberContext>();
-        this.activeMembers = new ArrayList<MemberContext>();
-        this.terminationPendingMembers = new ArrayList<MemberContext>();
-        this.obsoletedMembers = new ConcurrentHashMap<String, MemberContext>();
-        memberStatsContexts = new ConcurrentHashMap<String, MemberStatsContext>();
-
-        terminationPendingStartedTime = new HashMap<String, Long>();
-        // check if a different value has been set for expiryTime
-        XMLConfiguration conf = ConfUtil.getInstance(null).getConfiguration();
-        pendingMemberExpiryTime = conf.getLong(StratosConstants.PENDING_VM_MEMBER_EXPIRY_TIMEOUT, 900000);
-        obsoltedMemberExpiryTime = conf.getLong(StratosConstants.OBSOLETED_VM_MEMBER_EXPIRY_TIMEOUT, 86400000);
-        if (log.isDebugEnabled()) {
-        	log.debug("Member expiry time is set to: " + pendingMemberExpiryTime);
-        	log.debug("Member obsoleted expiry time is set to: " + obsoltedMemberExpiryTime);
-        }
-
-        Thread th = new Thread(new PendingMemberWatcher(this));
-        th.start();
-        Thread th2 = new Thread(new ObsoletedMemberWatcher(this));
-        th2.start();
-        Thread th3 = new Thread(new TerminationPendingMemberWatcher(this));
-        th3.start();
-    }
-
-    public long getTerminationPendingStartedTimeOfMember(String memberId) {
-        return terminationPendingStartedTime.get(memberId);
-    }
-    
-    public List<MemberContext> getPendingMembers() {
-        return pendingMembers;
-    }
-    
-    public void setPendingMembers(List<MemberContext> pendingMembers) {
-        this.pendingMembers = pendingMembers;
-    }
-    
-    public int getActiveMemberCount() {
-        return activeMembers.size();
-    }
-    
-    public void setActiveMembers(List<MemberContext> activeMembers) {
-        this.activeMembers = activeMembers;
-    }
-    
-    public String getPartitionId() {
-        return partitionId;
-    }
-    public void setPartitionId(String partitionId) {
-        this.partitionId = partitionId;
-    }
-
-    public int getMinimumMemberCount() {
-        return minimumMemberCount;
-    }
-
-    public void setMinimumMemberCount(int minimumMemberCount) {
-        this.minimumMemberCount = minimumMemberCount;
-    }
-
-    public Partition getPartition() {
-        return partition;
-    }
-
-    public void setPartition(Partition partition) {
-        this.partition = partition;
-    }
-    
-    public void addPendingMember(MemberContext ctxt) {
-        this.pendingMembers.add(ctxt);
-    }
-    
-    public boolean removePendingMember(String id) {
-    	if (id == null) {
-            return false;
-        }
-        synchronized (pendingMembers) {
-            for (Iterator<MemberContext> iterator = pendingMembers.iterator(); iterator.hasNext(); ) {
-                MemberContext pendingMember = (MemberContext) iterator.next();
-                if (id.equals(pendingMember.getMemberId())) {
-                    iterator.remove();
-                    return true;
-                }
-
-            }
-        }
-    	
-    	return false;
-    }
-    
-    public void movePendingMemberToActiveMembers(String memberId) {
-        if (memberId == null) {
-            return;
-        }
-        synchronized (pendingMembers) {
-            Iterator<MemberContext> iterator = pendingMembers.listIterator();
-            while (iterator.hasNext()) {
-                MemberContext pendingMember = iterator.next();
-                if (pendingMember == null) {
-                    iterator.remove();
-                    continue;
-                }
-                if (memberId.equals(pendingMember.getMemberId())) {
-                    // member is activated
-                    // remove from pending list
-                    iterator.remove();
-                    // add to the activated list
-                    this.activeMembers.add(pendingMember);
-                    pendingMembersFailureCount = 0;
-                    if (log.isDebugEnabled()) {
-                        log.debug(String.format("Pending member is removed and added to the " +
-                                "activated member list. [Member Id] %s", memberId));
-                    }
-                    break;
-                }
-            }
-        }
-    }
-
-    public boolean activeMemberAvailable(String memberId) {
-        for (MemberContext activeMember : activeMembers) {
-            if (memberId.equals(activeMember.getMemberId())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public boolean pendingMemberAvailable(String memberId) {
-
-        for (MemberContext pendingMember : pendingMembers) {
-            if (memberId.equals(pendingMember.getMemberId())) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    public void moveActiveMemberToTerminationPendingMembers(String memberId) {
-        if (memberId == null) {
-            return;
-        }
-        synchronized (activeMembers) {
-            Iterator<MemberContext> iterator = activeMembers.listIterator();
-            while (iterator.hasNext()) {
-                MemberContext activeMember = iterator.next();
-                if (activeMember == null) {
-                    iterator.remove();
-                    continue;
-                }
-                if (memberId.equals(activeMember.getMemberId())) {
-                    // member is activated
-                    // remove from pending list
-                    iterator.remove();
-                    // add to the activated list
-                    this.terminationPendingMembers.add(activeMember);
-                    if (log.isDebugEnabled()) {
-                        log.debug(String.format("Active member is removed and added to the " +
-                                "termination pending member list. [Member Id] %s", memberId));
-                    }
-                    break;
-                }
-            }
-        }
-    }
-
-    /**
-     * Check the member lists for the provided member ID and move the member to the obsolete list
-     *
-     * @param memberId The member ID of the member to search
-     */
-    public void moveMemberToObsoleteList(String memberId) {
-        if (memberId == null) {
-            return;
-        }
-
-        // check active member list
-        Iterator<MemberContext> activeMemberIterator = activeMembers.listIterator();
-        MemberContext removedMember = this.removeMemberFrom(activeMemberIterator, memberId);
-        if (removedMember != null) {
-            this.addObsoleteMember(removedMember);
-            removedMember.setObsoleteInitTime(System.currentTimeMillis());
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Active member is removed and added to the " +
-                        "obsolete member list. [Member Id] %s", memberId));
-            }
-
-            return;
-        }
-
-        // check pending member list
-        Iterator<MemberContext> pendingMemberIterator = pendingMembers.listIterator();
-        removedMember = this.removeMemberFrom(pendingMemberIterator, memberId);
-        if (removedMember != null) {
-            this.addObsoleteMember(removedMember);
-            removedMember.setObsoleteInitTime(System.currentTimeMillis());
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Pending member is removed and added to the " +
-                        "obsolete member list. [Member Id] %s", memberId));
-            }
-
-            return;
-        }
-
-        // check termination pending member list
-        Iterator<MemberContext> terminationPendingMembersIterator = terminationPendingMembers.listIterator();
-        removedMember = this.removeMemberFrom(terminationPendingMembersIterator, memberId);
-        if (removedMember != null) {
-            this.addObsoleteMember(removedMember);
-            removedMember.setObsoleteInitTime(System.currentTimeMillis());
-            if (log.isDebugEnabled()) {
-                log.debug(String.format("Termination Pending member is removed and added to the " +
-                        "obsolete member list. [Member Id] %s", memberId));
-            }
-        }
-    }
-
-    /**
-     * Removes the {@link org.apache.stratos.cloud.controller.stub.pojo.MemberContext} object mapping
-     * to the specified member id from the specified MemberContext collection
-     *
-     * @param iterator The {@link java.util.Iterator} for the collection containing {@link org.apache.stratos.cloud.controller.stub.pojo.MemberContext}
-     *                 objects
-     * @param memberId Member Id {@link String} for the {@link org.apache.stratos.cloud.controller.stub.pojo.MemberContext}
-     *                 to be removed
-     * @return {@link org.apache.stratos.cloud.controller.stub.pojo.MemberContext} object if
-     * object found and removed, null if otherwise.
-     */
-    private MemberContext removeMemberFrom(Iterator<MemberContext> iterator, String memberId) {
-        while (iterator.hasNext()) {
-            MemberContext activeMember = iterator.next();
-            if (activeMember == null) {
-                iterator.remove();
-                continue;
-            }
-            if (memberId.equals(activeMember.getMemberId())) {
-                iterator.remove();
-                return activeMember;
-            }
-        }
-
-        return null;
-    }
-    
-    public void addActiveMember(MemberContext ctxt) {
-        this.activeMembers.add(ctxt);
-    }
-    
-    public void removeActiveMember(MemberContext ctxt) {
-        this.activeMembers.remove(ctxt);
-    }
-
-    public boolean removeTerminationPendingMember(String memberId) {
-        boolean terminationPendingMemberAvailable = false;
-        synchronized (terminationPendingMembers) {
-            for (MemberContext memberContext : terminationPendingMembers) {
-                if (memberContext.getMemberId().equals(memberId)) {
-                    terminationPendingMemberAvailable = true;
-                    terminationPendingMembers.remove(memberContext);
-                    break;
-                }
-            }
-        }
-        return terminationPendingMemberAvailable;
-    }
-    
-    public long getObsoltedMemberExpiryTime() {
-    	return obsoltedMemberExpiryTime;
-    }
-    
-    public void setObsoltedMemberExpiryTime(long obsoltedMemberExpiryTime) {
-    	this.obsoltedMemberExpiryTime = obsoltedMemberExpiryTime;
-    }
-    
-    public void addObsoleteMember(MemberContext ctxt) {
-        this.obsoletedMembers.put(ctxt.getMemberId(), ctxt);
-    }
-    
-    public boolean removeObsoleteMember(String memberId) {
-    	if(this.obsoletedMembers.remove(memberId) == null) {
-    		return false;
-    	}
-    	return true;
-    }
-
-    public long getPendingMemberExpiryTime() {
-        return pendingMemberExpiryTime;
-    }
-
-    public void setPendingMemberExpiryTime(long pendingMemberExpiryTime) {
-        this.pendingMemberExpiryTime = pendingMemberExpiryTime;
-    }
-    
-    public Map<String, MemberContext> getObsoletedMembers() {
-        return obsoletedMembers;
-    }
-        
-    public void setObsoletedMembers(Map<String, MemberContext> obsoletedMembers) {
-        this.obsoletedMembers = obsoletedMembers;
-    }
-
-    public String getNetworkPartitionId() {
-        return networkPartitionId;
-    }
-
-    public void setNetworkPartitionId(String networkPartitionId) {
-        this.networkPartitionId = networkPartitionId;
-    }
-
-    
-    public Map<String, MemberStatsContext> getMemberStatsContexts() {
-        return memberStatsContexts;
-    }
-
-    public MemberStatsContext getMemberStatsContext(String memberId) {
-        return memberStatsContexts.get(memberId);
-    }
-
-    public void addMemberStatsContext(MemberStatsContext ctxt) {
-        this.memberStatsContexts.put(ctxt.getMemberId(), ctxt);
-    }
-
-    public void removeMemberStatsContext(String memberId) {
-        this.memberStatsContexts.remove(memberId);
-    }
-
-    public MemberStatsContext getPartitionCtxt(String id) {
-        return this.memberStatsContexts.get(id);
-    }
-
-//    public boolean memberExist(String memberId) {
-//        return memberStatsContexts.containsKey(memberId);
-//    }
-
-
-    public Properties getProperties() {
-        return properties;
-    }
-
-    public void setProperties(Properties properties) {
-        this.properties = properties;
-    }
-
-    public String getServiceName() {
-        return serviceName;
-    }
-
-    public void setServiceName(String serviceName) {
-        this.serviceName = serviceName;
-    }
-
-    public List<MemberContext> getTerminationPendingMembers() {
-        return terminationPendingMembers;
-    }
-
-    public void setTerminationPendingMembers(List<MemberContext> terminationPendingMembers) {
-        this.terminationPendingMembers = terminationPendingMembers;
-    }
-
-    public int getTotalMemberCount() {
-
-        return activeMembers.size() + pendingMembers.size() + terminationPendingMembers.size();
-    }
-
-    public int getNonTerminatedMemberCount() {
-        return activeMembers.size() + pendingMembers.size();
-    }
-    
-    public List<MemberContext> getActiveMembers() {
-		return activeMembers;
-	}
-
-	public boolean removeActiveMemberById(String memberId) {
-        boolean removeActiveMember = false;
-        synchronized (activeMembers) {
-            Iterator<MemberContext> iterator = activeMembers.listIterator();
-            while (iterator.hasNext()) {
-                MemberContext memberContext = iterator.next();
-                if(memberId.equals(memberContext.getMemberId())){
-                    iterator.remove();
-                    removeActiveMember = true;
-
-                    break;
-                }
-            }
-        }
-        return removeActiveMember;
-    }
-
-    public boolean activeMemberExist(String memberId) {
-
-        for (MemberContext memberContext: activeMembers) {
-            if(memberId.equals(memberContext.getMemberId())){
-                return true;
-            }
-        }
-        return false;
-    }
-    
-    public  int getAllMemberForTerminationCount () {
-    	int count = activeMembers.size() + pendingMembers.size() + terminationPendingMembers.size();
-		if (log.isDebugEnabled()) {
-    		log.debug("PartitionContext:getAllMemberForTerminationCount:size:" + count);
-    	}
-    	return count;
-    }
-    
-    // Map<String, MemberStatsContext> getMemberStatsContexts().keySet()
-    public  Set<String> getAllMemberForTermination () {
-
-    	List<MemberContext> merged =  new ArrayList<MemberContext>();
-    	
-    	
-    	merged.addAll(activeMembers);
-    	merged.addAll(pendingMembers);
-    	merged.addAll(terminationPendingMembers);
-    	
-    	Set<String> results = new HashSet<String>(merged.size());
-    	
-    	for (MemberContext ctx: merged) {
-    		results.add(ctx.getMemberId());
-    	}
-    	
-
-    	if (log.isDebugEnabled()) {
-    		log.debug("PartitionContext:getAllMemberForTermination:size:" + results.size());
-    	}
-    	
-    	//MemberContext x = new MemberContext();
-    	//x.getMemberId()
-    	
-    	return results;
-    }
-
-    public void movePendingTerminationMemberToObsoleteMembers(String memberId) {
-
-        log.info("Starting the moving of termination pending to obsolete for [member] " + memberId);
-        if (memberId == null) {
-            return;
-        }
-        Iterator<MemberContext> iterator = terminationPendingMembers.listIterator();
-        while (iterator.hasNext()) {
-            MemberContext terminationPendingMember = iterator.next();
-            if (terminationPendingMember == null) {
-                iterator.remove();
-                continue;
-            }
-            if (memberId.equals(terminationPendingMember.getMemberId())) {
-
-                log.info("Found termination pending member and trying to move [member] " + memberId + " to obsolete list");
-                // member is pending termination
-                // remove from pending termination list
-                iterator.remove();
-                // add to the obsolete list
-                this.obsoletedMembers.put(memberId, terminationPendingMember);
-
-                terminationPendingStartedTime.put(memberId, System.currentTimeMillis());
-
-                if (log.isDebugEnabled()) {
-                    log.debug(String.format("Termination pending member is removed and added to the " +
-                            "obsolete member list. [Member Id] %s", memberId));
-                }
-                break;
-            }
-        }
-    }
-
-    public MemberContext getPendingTerminationMember(String memberId) {
-        for (MemberContext memberContext : terminationPendingMembers) {
-            if (memberId.equals(memberContext.getMemberId())) {
-                return memberContext;
-            }
-        }
-        return null;
-    }
-
-    public long getTerminationPendingMemberExpiryTime() {
-        return terminationPendingMemberExpiryTime;
-    }
-
-    public void movePendingMemberToObsoleteMembers(String memberId) {
-        if (memberId == null) {
-            return;
-        }
-        Iterator<MemberContext> iterator = pendingMembers.listIterator();
-        while (iterator.hasNext()) {
-            MemberContext pendingMember = iterator.next();
-            if (pendingMember == null) {
-                iterator.remove();
-                continue;
-            }
-            if (memberId.equals(pendingMember.getMemberId())) {
-
-                // remove from pending list
-                iterator.remove();
-                // add to the obsolete list
-                this.obsoletedMembers.put(memberId, pendingMember);
-                if (log.isDebugEnabled()) {
-                    log.debug(String.format("Pending member is removed and added to the " +
-                            "obsolete member list. [Member Id] %s", memberId));
-                }
-                break;
-            }
-        }
-
-    }
-    
-    private class PendingMemberWatcher implements Runnable {
-        private PartitionContext ctxt;
-
-        public PendingMemberWatcher(PartitionContext ctxt) {
-            this.ctxt = ctxt;
-        }
-
-        @Override
-        public void run() {
-
-            while (true) {
-                long expiryTime = ctxt.getPendingMemberExpiryTime();
-                List<MemberContext> pendingMembers = ctxt.getPendingMembers();
-                
-                synchronized (pendingMembers) {
-                    Iterator<MemberContext> iterator = pendingMembers.listIterator();
-                    while ( iterator.hasNext()) {
-                        MemberContext pendingMember = iterator.next();
-
-                        if (pendingMember == null) {
-                            continue;
-                        }
-                        long pendingTime = System.currentTimeMillis() - pendingMember.getInitTime();
-                        if (pendingTime >= expiryTime) {
-
-
-                            iterator.remove();
-                            log.info("Pending state of member: " + pendingMember.getMemberId() +
-                                     " is expired. " + "Adding as an obsoleted member.");
-                            // member should be terminated
-                            ctxt.addObsoleteMember(pendingMember);
-                            pendingMembersFailureCount++;
-                            if( pendingMembersFailureCount > PENDING_MEMBER_FAILURE_THRESHOLD){
-                                setPendingMemberExpiryTime(expiryTime * 2);//Doubles the expiry time after the threshold of failure exceeded
-                                //TODO Implement an alerting system: STRATOS-369
-                            }
-                        }
-                    }
-                }
-
-                try {
-                    // TODO find a constant
-                    Thread.sleep(15000);
-                } catch (InterruptedException ignore) {
-                }
-            }
-        }
-
-    } 
-    
-    private class ObsoletedMemberWatcher implements Runnable {
-        private PartitionContext ctxt;
-
-        public ObsoletedMemberWatcher(PartitionContext ctxt) {
-            this.ctxt = ctxt;
-        }
-
-        @Override
-        public void run() {
-            while (true) {
-                long obsoltedMemberExpiryTime = ctxt.getObsoltedMemberExpiryTime();
-                Map<String, MemberContext> obsoletedMembers = ctxt.getObsoletedMembers();
-
-                Iterator<Entry<String, MemberContext>> iterator = obsoletedMembers.entrySet().iterator();
-                while (iterator.hasNext()) {
-                    Map.Entry<String, MemberContext> pairs = iterator.next();
-                    MemberContext obsoleteMember = (MemberContext) pairs.getValue();
-                    if (obsoleteMember == null) {
-                        continue;
-                    }
-                    long obsoleteTime = System.currentTimeMillis() - obsoleteMember.getInitTime();
-                    if (obsoleteTime >= obsoltedMemberExpiryTime) {
-                        iterator.remove();
-                    }
-                }
-                try {
-                    // TODO find a constant
-                    Thread.sleep(15000);
-                } catch (InterruptedException ignore) {
-                }
-            }
-        }
-    }
-
-    /**
-     * This thread is responsible for moving member to obsolete list if pending termination timeout happens
-     */
-    private class TerminationPendingMemberWatcher implements Runnable {
-        private PartitionContext ctxt;
-
-        public TerminationPendingMemberWatcher(PartitionContext ctxt) {
-            this.ctxt = ctxt;
-        }
-
-        @Override
-        public void run() {
-
-            while (true) {
-                long terminationPendingMemberExpiryTime = ctxt.getTerminationPendingMemberExpiryTime();
-
-                Iterator<MemberContext> iterator = ctxt.getTerminationPendingMembers().listIterator();
-                while (iterator.hasNext()) {
-
-                    MemberContext terminationPendingMember = iterator.next();
-                    if (terminationPendingMember == null){
-                        continue;
-                    }
-                    long terminationPendingTime = System.currentTimeMillis()
-                            - ctxt.getTerminationPendingStartedTimeOfMember(terminationPendingMember.getMemberId());
-                    if (terminationPendingTime >= terminationPendingMemberExpiryTime) {
-                        log.info("Moving [member] " + terminationPendingMember.getMemberId() + partitionId);
-                        iterator.remove();
-                        obsoletedMembers.put(terminationPendingMember.getMemberId(), terminationPendingMember);
-                    }
-                }
-                try {
-                    // TODO find a constant
-                    Thread.sleep(15000);
-                } catch (InterruptedException ignore) {}
-            }
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
index f22d2d2..558c612 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
@@ -307,7 +307,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
         Member member = getMemberByMemberId(memberId);
         String networkPartitionId = getNetworkPartitionIdByMemberId(memberId);
         NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
-        PartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
+        ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
         MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId);
         if (null == memberStatsContext) {
             if (log.isDebugEnabled()) {
@@ -328,7 +328,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
         Member member = getMemberByMemberId(memberId);
         String networkPartitionId = getNetworkPartitionIdByMemberId(memberId);
         NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
-        PartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
+        ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
         MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId);
         if (null == memberStatsContext) {
             if (log.isDebugEnabled()) {
@@ -355,7 +355,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
         Member member = getMemberByMemberId(memberId);
         String networkPartitionId = getNetworkPartitionIdByMemberId(memberId);
         NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
-        PartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
+        ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
         MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId);
         if (null == memberStatsContext) {
             if (log.isDebugEnabled()) {
@@ -376,7 +376,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
         Member member = getMemberByMemberId(memberId);
         String networkPartitionId = getNetworkPartitionIdByMemberId(memberId);
         NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
-        PartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
+        ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
         MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId);
         if (null == memberStatsContext) {
             if (log.isDebugEnabled()) {
@@ -397,7 +397,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
         Member member = getMemberByMemberId(memberId);
         String networkPartitionId = getNetworkPartitionIdByMemberId(memberId);
         NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
-        PartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
+        ClusterLevelPartitionContext partitionCtxt = networkPartitionCtxt.getPartitionCtxt(member.getPartitionId());
         MemberStatsContext memberStatsContext = partitionCtxt.getMemberStatsContext(memberId);
         if (null == memberStatsContext) {
             if (log.isDebugEnabled()) {
@@ -432,7 +432,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
         NetworkPartitionContext nwPartitionCtxt;
         nwPartitionCtxt = getNetworkPartitionCtxt(instanceId, member);
         String partitionId = getPartitionOfMember(memberId);
-        PartitionContext partitionCtxt = nwPartitionCtxt.getPartitionCtxt(partitionId);
+        ClusterLevelPartitionContext partitionCtxt = nwPartitionCtxt.getPartitionCtxt(partitionId);
         if (!partitionCtxt.activeMemberExist(memberId)) {
             if (log.isDebugEnabled()) {
                 log.debug(String.format("Could not find the active member in partition context, "
@@ -470,14 +470,14 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
         String partitionId = memberActivatedEvent.getPartitionId();
         String memberId = memberActivatedEvent.getMemberId();
         NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
-        PartitionContext partitionContext;
-        partitionContext = networkPartitionCtxt.getPartitionCtxt(partitionId);
-        partitionContext.addMemberStatsContext(new MemberStatsContext(memberId));
+        ClusterLevelPartitionContext clusterMonitorPartitionContext;
+        clusterMonitorPartitionContext = networkPartitionCtxt.getPartitionCtxt(partitionId);
+        clusterMonitorPartitionContext.addMemberStatsContext(new MemberStatsContext(memberId));
         if (log.isInfoEnabled()) {
             log.info(String.format("Member stat context has been added successfully: "
                     + "[member] %s", memberId));
         }
-        partitionContext.movePendingMemberToActiveMembers(memberId);
+        clusterMonitorPartitionContext.movePendingMemberToActiveMembers(memberId);
         StatusChecker.getInstance().onMemberStatusChange(memberActivatedEvent.getClusterId());
     }
 
@@ -490,13 +490,13 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
         String memberId = maintenanceModeEvent.getMemberId();
         String instanceId = maintenanceModeEvent.getInstanceId();
         NetworkPartitionContext networkPartitionCtxt = getNetworkPartitionCtxt(instanceId, networkPartitionId);
-        PartitionContext partitionContext = networkPartitionCtxt.getPartitionCtxt(partitionId);
-        partitionContext.addMemberStatsContext(new MemberStatsContext(memberId));
+        ClusterLevelPartitionContext clusterMonitorPartitionContext = networkPartitionCtxt.getPartitionCtxt(partitionId);
+        clusterMonitorPartitionContext.addMemberStatsContext(new MemberStatsContext(memberId));
         if (log.isDebugEnabled()) {
             log.debug(String.format("Member has been moved as pending termination: "
                     + "[member] %s", memberId));
         }
-        partitionContext.moveActiveMemberToTerminationPendingMembers(memberId);
+        clusterMonitorPartitionContext.moveActiveMemberToTerminationPendingMembers(memberId);
     }
 
     @Override
@@ -510,7 +510,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
         // start a new member in the same Partition
         String memberId = memberReadyToShutdownEvent.getMemberId();
         String partitionId = getPartitionOfMember(memberId);
-        PartitionContext partitionCtxt = nwPartitionCtxt.getPartitionCtxt(partitionId);
+        ClusterLevelPartitionContext partitionCtxt = nwPartitionCtxt.getPartitionCtxt(partitionId);
         // terminate the shutdown ready member
         //CloudControllerClient ccClient = CloudControllerClient.getInstance();
 
@@ -554,23 +554,23 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
         String instanceId = memberTerminatedEvent.getInstanceId();
         String partitionId = memberTerminatedEvent.getPartitionId();
         NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(instanceId, networkPartitionId);
-        PartitionContext partitionContext = networkPartitionContext.getPartitionCtxt(partitionId);
-        partitionContext.removeMemberStatsContext(memberId);
+        ClusterLevelPartitionContext clusterMonitorPartitionContext = networkPartitionContext.getPartitionCtxt(partitionId);
+        clusterMonitorPartitionContext.removeMemberStatsContext(memberId);
 
-        if (partitionContext.removeTerminationPendingMember(memberId)) {
+        if (clusterMonitorPartitionContext.removeTerminationPendingMember(memberId)) {
             if (log.isDebugEnabled()) {
                 log.debug(String.format("Member is removed from termination pending members list: "
                         + "[member] %s", memberId));
             }
-        } else if (partitionContext.removePendingMember(memberId)) {
+        } else if (clusterMonitorPartitionContext.removePendingMember(memberId)) {
             if (log.isDebugEnabled()) {
                 log.debug(String.format("Member is removed from pending members list: "
                         + "[member] %s", memberId));
             }
-        } else if (partitionContext.removeActiveMemberById(memberId)) {
+        } else if (clusterMonitorPartitionContext.removeActiveMemberById(memberId)) {
             log.warn(String.format("Member is in the wrong list and it is removed from "
                     + "active members list: %s", memberId));
-        } else if (partitionContext.removeObsoleteMember(memberId)) {
+        } else if (clusterMonitorPartitionContext.removeObsoleteMember(memberId)) {
             log.warn(String.format("Obsolete member has either been terminated or its obsolete time out has expired and"
                     + " it is removed from obsolete members list: %s", memberId));
         } else {
@@ -642,7 +642,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor {
             public void run() {
 
                 for (NetworkPartitionContext networkPartitionContext : getAllNetworkPartitionCtxts().values()) {
-                    for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
+                    for (ClusterLevelPartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
                         //if (log.isDebugEnabled()) {
                         log.info("Starting to terminate all members in cluster [" + getClusterId() + "] Network Partition [ " +
                                 networkPartitionContext.getId() + " ], Partition [ " +

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
index aa8ec30..d22d20c 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMLbClusterMonitor.java
@@ -21,7 +21,6 @@ package org.apache.stratos.autoscaler.monitor.cluster;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
@@ -30,13 +29,11 @@ import org.apache.stratos.autoscaler.*;
 import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent;
 import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
-import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.policy.model.DeploymentPolicy;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.stratos.autoscaler.util.AutoScalerConstants;
 import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.common.constants.StratosConstants;
-import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent;
 
 /**
@@ -92,7 +89,7 @@ public class VMLbClusterMonitor extends VMClusterMonitor {
                     for (NetworkPartitionContext networkPartitionContext : getNetworkPartitionCtxts(instanceIdToClusterCtxtEntry.getKey()).values()) {
 
                         // minimum check per partition
-                        for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts()
+                        for (ClusterLevelPartitionContext partitionContext : networkPartitionContext.getPartitionCtxts()
                                 .values()) {
 
                             if (partitionContext != null) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
index 6fcafea..37b7eda 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMServiceClusterMonitor.java
@@ -35,7 +35,6 @@ import org.apache.stratos.cloud.controller.stub.pojo.Property;
 import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
 import org.apache.stratos.messaging.domain.applications.GroupStatus;
-import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -122,7 +121,7 @@ public class VMServiceClusterMonitor extends VMClusterMonitor {
                         // store primary members in the network partition context
                         List<String> primaryMemberListInNetworkPartition = new ArrayList<String>();
                         //minimum check per partition
-                        for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
+                        for (ClusterLevelPartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
                             // store primary members in the partition context
                             List<String> primaryMemberListInPartition = new ArrayList<String>();
                             // get active primary members in this partition context

http://git-wip-us.apache.org/repos/asf/stratos/blob/a19c5a80/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
index 15894ef..e5b6ce1 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
@@ -21,8 +21,8 @@ package org.apache.stratos.autoscaler.rule;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.ClusterLevelPartitionContext;
 import org.apache.stratos.autoscaler.NetworkPartitionLbHolder;
-import org.apache.stratos.autoscaler.PartitionContext;
 import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.common.constants.StratosConstants;
 import org.drools.KnowledgeBase;
@@ -214,8 +214,8 @@ public class AutoscalerRuleEvaluator {
         return ksession;
     }
 
-    public static String getLbClusterId(PartitionContext partitionContext, String nwpartitionId) {
-        Properties props = partitionContext.getProperties();
+    public static String getLbClusterId(ClusterLevelPartitionContext clusterMonitorPartitionContext, String nwpartitionId) {
+        Properties props = clusterMonitorPartitionContext.getProperties();
         String value =
                        (String) props.get(org.apache.stratos.messaging.util.Constants.LOAD_BALANCER_REF);
 
@@ -229,7 +229,7 @@ public class AutoscalerRuleEvaluator {
         if (value.equals(org.apache.stratos.messaging.util.Constants.DEFAULT_LOAD_BALANCER)) {
             lbClusterId = networkPartitionLbHolder.getDefaultLbClusterId();
         } else if (value.equals(org.apache.stratos.messaging.util.Constants.SERVICE_AWARE_LOAD_BALANCER)) {
-            String serviceName = partitionContext.getServiceName();
+            String serviceName = clusterMonitorPartitionContext.getServiceName();
             lbClusterId = networkPartitionLbHolder.getLBClusterIdOfService(serviceName);
         }
         return lbClusterId;


[3/3] stratos git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/stratos

Posted by la...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/stratos


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/7587568a
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/7587568a
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/7587568a

Branch: refs/heads/master
Commit: 7587568a70802d7fce4c81827d59771fd21d77d0
Parents: a19c5a8 6af9901
Author: Lahiru Sandaruwan <la...@apache.org>
Authored: Thu Nov 27 15:27:12 2014 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
Committed: Thu Nov 27 15:27:12 2014 +0530

----------------------------------------------------------------------
 .../stratos/cli/RestCommandLineService.java     | 663 +++++-----------
 .../apache/stratos/cli/StratosApplication.java  |  12 +-
 .../cli/commands/ActivateTenantCommand.java     |   2 +-
 .../commands/DeployKubernetesGroupCommand.java  |   2 +-
 .../commands/DeployKubernetesHostCommand.java   |  38 +-
 .../cli/commands/DeployServiceCommand.java      | 139 ----
 .../commands/ListKubernetesGroupsCommand.java   |   2 +-
 .../commands/ListKubernetesHostsCommand.java    |   6 +-
 .../cli/commands/ListServicesCommand.java       |  65 --
 .../cli/commands/SubscribeCartridgeCommand.java | 330 --------
 .../UnDeployKubernetesGroupCommand.java         |   6 +-
 .../commands/UndeployKubernetesHostCommand.java |   7 +-
 .../UndeployServiceDefinitionCommand.java       |  70 --
 .../cli/commands/UnsubscribeCommand.java        | 132 ----
 .../commands/UpdateKubernetesHostCommand.java   |  41 +-
 .../commands/UpdateKubernetesMasterCommand.java |  28 +-
 .../apache/stratos/cli/utils/CliConstants.java  |   9 +-
 .../model/TopologyClusterInformationModel.java  |  10 -
 .../rest/endpoint/api/StratosApiV40Utils.java   |  16 +-
 .../rest/endpoint/api/StratosApiV41.java        | 776 ++++++++-----------
 .../rest/endpoint/api/StratosApiV41Utils.java   |  35 +-
 21 files changed, 645 insertions(+), 1744 deletions(-)
----------------------------------------------------------------------