You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2014/12/04 13:31:15 UTC

[4/6] stratos git commit: fixing min rule issue

fixing min rule issue


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

Branch: refs/heads/master
Commit: 853e149602d124fc8482e081ba6f889739b25a44
Parents: ad400d9
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 17:38:41 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 17:38:41 2014 +0530

----------------------------------------------------------------------
 .../context/cluster/ClusterInstanceContext.java |  32 +--
 .../context/cluster/VMClusterContext.java       |  31 +--
 .../partition/ClusterLevelPartitionContext.java | 201 +++++++++----------
 .../context/partition/PartitionContext.java     |   9 +-
 .../AutoscalerTopologyEventReceiver.java        |   2 +
 .../monitor/cluster/VMClusterMonitor.java       | 131 ++++++------
 6 files changed, 177 insertions(+), 229 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
index a6fe42a..509ccfe 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterInstanceContext.java
@@ -25,11 +25,9 @@ import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionCont
 import org.apache.stratos.autoscaler.pojo.policy.autoscale.LoadAverage;
 import org.apache.stratos.autoscaler.pojo.policy.autoscale.MemoryConsumption;
 import org.apache.stratos.autoscaler.pojo.policy.autoscale.RequestsInFlight;
-import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
 import org.apache.stratos.messaging.domain.topology.Member;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 /*
@@ -62,8 +60,6 @@ public class ClusterInstanceContext extends InstanceContext {
     private int minInstanceCount = 0, maxInstanceCount = 0;
     private int requiredInstanceCountBasedOnStats;
     private int requiredInstanceCountBasedOnDependencies;
-    private int minMembers;
-    private int maxMembers;
     //details required for partition selection algorithms
     private int currentPartitionIndex;
 
@@ -74,14 +70,14 @@ public class ClusterInstanceContext extends InstanceContext {
 
         super(clusterInstanceId);
         this.networkPartitionId = networkPartitionId;
-        this.setMinMembers(min);
+        this.minInstanceCount = min;
+        this.maxInstanceCount = max;
         partitionCtxts = new ArrayList<ClusterLevelPartitionContext>();
         this.partitionAlgorithm = partitionAlgo;
         //partitionCtxts = new HashMap<String, ClusterLevelPartitionContext>();
         requestsInFlight = new RequestsInFlight();
         loadAverage = new LoadAverage();
         memoryConsumption = new MemoryConsumption();
-        maxInstanceCount = max;
         requiredInstanceCountBasedOnStats = minInstanceCount;
         requiredInstanceCountBasedOnDependencies = minInstanceCount;
 
@@ -141,10 +137,11 @@ public class ClusterInstanceContext extends InstanceContext {
         }
         return null;
     }
-    public  int getNonTerminatedMemberCount(){
+
+    public int getNonTerminatedMemberCount() {
 
         int nonTerminatedMemberCount = 0;
-        for(ClusterLevelPartitionContext partitionContext : partitionCtxts){
+        for (ClusterLevelPartitionContext partitionContext : partitionCtxts) {
 
             nonTerminatedMemberCount += partitionContext.getNonTerminatedMemberCount();
         }
@@ -191,7 +188,7 @@ public class ClusterInstanceContext extends InstanceContext {
 
         if (log.isDebugEnabled()) {
             log.debug(String.format("Average Requesets Served Per Instance stats are reset, ready to do scale check " +
-                    "[network partition] %s" , this.id));
+                    "[network partition] %s", this.id));
 
         }
     }
@@ -437,23 +434,6 @@ public class ClusterInstanceContext extends InstanceContext {
         this.requiredInstanceCountBasedOnDependencies = requiredInstanceCountBasedOnDependencies;
     }
 
-
-    public int getMinMembers() {
-        return minMembers;
-    }
-
-    public int getMaxMembers() {
-        return maxMembers;
-    }
-
-    public void setMaxMembers(int maxMembers) {
-        this.maxMembers = maxMembers;
-    }
-
-    public void setMinMembers(int minMembers) {
-        this.minMembers = minMembers;
-    }
-
     public String getNetworkPartitionId() {
         return networkPartitionId;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
index f5cdb32..2cdef55 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/VMClusterContext.java
@@ -208,14 +208,6 @@ public class VMClusterContext extends AbstractClusterContext {
         //Fill cluster instance context with child level partitions
         for (ChildLevelPartition childLevelPartition : networkPartition.getChildLevelPartitions()) {
             addPartition(clusterInstance, cluster, clusterLevelNetworkPartitionContext, childLevelPartition);
-            if (log.isInfoEnabled()) {
-                log.info(String.format("Partition context has been added: [partition] %s",
-                        childLevelPartition.getPartitionId()));
-            }
-        }
-        if (log.isInfoEnabled()) {
-            log.info(String.format("Network partition context has been added: " +
-                    "[network partition] %s", clusterLevelNetworkPartitionContext.getId()));
         }
         return clusterLevelNetworkPartitionContext;
     }
@@ -226,9 +218,6 @@ public class VMClusterContext extends AbstractClusterContext {
             ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext,
             ChildLevelPartition childLevelPartition)
             throws PolicyValidationException, PartitionValidationException {
-        //Getting the associated network partition
-       /* ChildLevelNetworkPartition networkPartition = deploymentPolicy.
-                getChildLevelNetworkPartition(clusterInstance.getNetworkPartitionId());*/
         if (clusterLevelNetworkPartitionContext == null) {
             String msg =
                     "Network Partition is null in deployment policy: [policy-name]: " +
@@ -240,7 +229,7 @@ public class VMClusterContext extends AbstractClusterContext {
         String nPartitionId = clusterLevelNetworkPartitionContext.getId();
 
         //Getting the associated  partition
-        if (clusterInstance.getPartitionId() == null || childLevelPartition == null) {
+        if (clusterInstance.getPartitionId() == null && childLevelPartition == null) {
             String msg =
                     "[Partition] " + clusterInstance.getPartitionId() + " for [networkPartition] " +
                             clusterInstance.getNetworkPartitionId() + "is null " +
@@ -249,13 +238,6 @@ public class VMClusterContext extends AbstractClusterContext {
             throw new PolicyValidationException(msg);
         }
 
-        /*//Creating cluster level network partitionContext, if not exist
-        if (clusterLevelNetworkPartitionContext == null) {
-            clusterLevelNetworkPartitionContext =
-                    new ClusterLevelNetworkPartitionContext(clusterInstance.getNetworkPartitionId()
-                            , networkPartition.getPartitionAlgo(), networkPartition.getMin());
-        }*/
-
         ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.
                                         getClusterInstanceContext(clusterInstance.getInstanceId());
         int maxInstances = 2;
@@ -306,13 +288,20 @@ public class VMClusterContext extends AbstractClusterContext {
 
         //adding it to the monitors context
         clusterInstanceContext.addPartitionCtxt(clusterLevelPartitionContext);
-        clusterLevelNetworkPartitionContext.addClusterInstanceContext(clusterInstanceContext);
-
         if (log.isInfoEnabled()) {
             log.info(String.format("Partition context has been added: [partition] %s",
                     clusterLevelPartitionContext.getPartitionId()));
         }
 
+        clusterLevelNetworkPartitionContext.addClusterInstanceContext(clusterInstanceContext);
+
+        if (log.isInfoEnabled()) {
+            log.info(String.format("Cluster Instance context has been added: " +
+                    "[ClusterInstanceContext] %s", clusterInstanceContext.getId()));
+        }
+
+
+
 
         return clusterLevelNetworkPartitionContext;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
index 850a54b..4594e58 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
@@ -22,52 +22,46 @@ import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.context.member.MemberStatsContext;
-import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
 import org.apache.stratos.autoscaler.util.ConfUtil;
 import org.apache.stratos.cloud.controller.stub.domain.MemberContext;
+import org.apache.stratos.cloud.controller.stub.domain.Partition;
+import org.apache.stratos.common.constants.StratosConstants;
 
 import java.io.Serializable;
 import java.util.*;
 import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.apache.stratos.cloud.controller.stub.domain.Partition;
-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 extends PartitionContext implements Serializable{
+public class ClusterLevelPartitionContext extends PartitionContext implements Serializable {
 
-	private static final long serialVersionUID = -2920388667345980487L;
-	private static final Log log = LogFactory.getLog(ClusterLevelPartitionContext.class);
+    private static final long serialVersionUID = -2920388667345980487L;
+    private static final Log log = LogFactory.getLog(ClusterLevelPartitionContext.class);
+    private final int PENDING_MEMBER_FAILURE_THRESHOLD = 5;
     private String serviceName;
-    private String networkPartitionId;
     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;
+    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;
 
@@ -87,10 +81,10 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
         this.terminationPendingMembers = new ArrayList<MemberContext>();
         this.pendingMembers = new ArrayList<MemberContext>();
     }
-    
+
     public ClusterLevelPartitionContext(int max, Partition partition, String networkPartitionId) {
 
-        super(max,partition, networkPartitionId);
+        super(max, partition, networkPartitionId);
         this.pendingMembers = new ArrayList<MemberContext>();
         this.activeMembers = new ArrayList<MemberContext>();
         this.terminationPendingMembers = new ArrayList<MemberContext>();
@@ -103,8 +97,8 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
         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);
+            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));
@@ -118,22 +112,18 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
     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 int getMinimumMemberCount() {
         return minimumMemberCount;
@@ -146,9 +136,9 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
     public void addPendingMember(MemberContext ctxt) {
         this.pendingMembers.add(ctxt);
     }
-    
+
     public boolean removePendingMember(String id) {
-    	if (id == null) {
+        if (id == null) {
             return false;
         }
         synchronized (pendingMembers) {
@@ -161,10 +151,10 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
 
             }
         }
-    	
-    	return false;
+
+        return false;
     }
-    
+
     public void movePendingMemberToActiveMembers(String memberId) {
         if (memberId == null) {
             return;
@@ -318,11 +308,11 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
 
         return null;
     }
-    
+
     public void addActiveMember(MemberContext ctxt) {
         this.activeMembers.add(ctxt);
     }
-    
+
     public void removeActiveMember(MemberContext ctxt) {
         this.activeMembers.remove(ctxt);
     }
@@ -340,24 +330,24 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
         }
         return terminationPendingMemberAvailable;
     }
-    
+
     public long getObsoltedMemberExpiryTime() {
-    	return obsoltedMemberExpiryTime;
+        return obsoltedMemberExpiryTime;
     }
-    
+
     public void setObsoltedMemberExpiryTime(long obsoltedMemberExpiryTime) {
-    	this.obsoltedMemberExpiryTime = 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;
+        if (this.obsoletedMembers.remove(memberId) == null) {
+            return false;
+        }
+        return true;
     }
 
     public long getPendingMemberExpiryTime() {
@@ -367,30 +357,21 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
     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;
-    }
-
     @Override
     public int getActiveInstanceCount() {
-        
+
         return getNonTerminatedMemberCount();
     }
 
-
     public Map<String, MemberStatsContext> getMemberStatsContexts() {
         return memberStatsContexts;
     }
@@ -411,15 +392,14 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
         return this.memberStatsContexts.get(id);
     }
 
-//    public boolean memberExist(String memberId) {
-//        return memberStatsContexts.containsKey(memberId);
-//    }
-
-
     public Properties getProperties() {
         return properties;
     }
 
+//    public boolean memberExist(String memberId) {
+//        return memberStatsContexts.containsKey(memberId);
+//    }
+
     public void setProperties(Properties properties) {
         this.properties = properties;
     }
@@ -448,18 +428,22 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
     public int getNonTerminatedMemberCount() {
         return activeMembers.size() + pendingMembers.size();
     }
-    
+
     public List<MemberContext> getActiveMembers() {
-		return activeMembers;
-	}
+        return activeMembers;
+    }
 
-	public boolean removeActiveMemberById(String memberId) {
+    public void setActiveMembers(List<MemberContext> activeMembers) {
+        this.activeMembers = 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())){
+                if (memberId.equals(memberContext.getMemberId())) {
                     iterator.remove();
                     removeActiveMember = true;
 
@@ -472,47 +456,47 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
 
     public boolean activeMemberExist(String memberId) {
 
-        for (MemberContext memberContext: activeMembers) {
-            if(memberId.equals(memberContext.getMemberId())){
+        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;
+
+    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 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) {
@@ -607,10 +591,10 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
             while (true) {
                 long expiryTime = ctxt.getPendingMemberExpiryTime();
                 List<MemberContext> pendingMembers = ctxt.getPendingMembers();
-                
+
                 synchronized (pendingMembers) {
                     Iterator<MemberContext> iterator = pendingMembers.listIterator();
-                    while ( iterator.hasNext()) {
+                    while (iterator.hasNext()) {
                         MemberContext pendingMember = iterator.next();
 
                         if (pendingMember == null) {
@@ -622,11 +606,11 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
 
                             iterator.remove();
                             log.info("Pending state of member: " + pendingMember.getMemberId() +
-                                     " is expired. " + "Adding as an obsoleted member.");
+                                    " is expired. " + "Adding as an obsoleted member.");
                             // member should be terminated
                             ctxt.addObsoleteMember(pendingMember);
                             pendingMembersFailureCount++;
-                            if( pendingMembersFailureCount > PENDING_MEMBER_FAILURE_THRESHOLD){
+                            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
                             }
@@ -642,8 +626,8 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
             }
         }
 
-    } 
-    
+    }
+
     private class ObsoletedMemberWatcher implements Runnable {
         private ClusterLevelPartitionContext ctxt;
 
@@ -698,7 +682,7 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
                 while (iterator.hasNext()) {
 
                     MemberContext terminationPendingMember = iterator.next();
-                    if (terminationPendingMember == null){
+                    if (terminationPendingMember == null) {
                         continue;
                     }
                     long terminationPendingTime = System.currentTimeMillis()
@@ -712,7 +696,8 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
                 try {
                     // TODO find a constant
                     Thread.sleep(15000);
-                } catch (InterruptedException ignore) {}
+                } catch (InterruptedException ignore) {
+                }
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
index db4f2cb..ad6174f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/PartitionContext.java
@@ -20,19 +20,17 @@ package org.apache.stratos.autoscaler.context.partition;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelPartition;
 import org.apache.stratos.cloud.controller.stub.domain.Partition;
 
 import java.io.Serializable;
-import java.util.*;
+import java.util.Properties;
+
 /**
  * This is an object that inserted to the rules engine.
  * Holds information about a partition.
- *
- *
  */
 
-public abstract class PartitionContext implements Serializable{
+public abstract class PartitionContext implements Serializable {
 
     private static final long serialVersionUID = -2920388667345980487L;
     private static final Log log = LogFactory.getLog(ClusterLevelPartitionContext.class);
@@ -80,6 +78,7 @@ public abstract class PartitionContext implements Serializable{
     }
 
     public abstract int getActiveInstanceCount();
+
     public int getMax() {
         return max;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
index 6251d18..50f2430 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -456,6 +456,8 @@ public class AutoscalerTopologyEventReceiver {
                                                    cluster.getClusterId(),
                                                    clusterInstance.getInstanceId());
                                            instance.setParentId(clusterInstance.getParentId());
+                                           instance.setNetworkPartitionId(clusterInstance.getNetworkPartitionId());
+                                           instance.setPartitionId(clusterInstance.getPartitionId());
                                            instance.setStatus(clusterInstance.getStatus());
                                            clusterMonitor.addInstance(instance);
                                        }

http://git-wip-us.apache.org/repos/asf/stratos/blob/853e1496/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 edea5cc..7e86601 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
@@ -194,94 +194,87 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
                             if (log.isDebugEnabled()) {
                                 log.debug("Monitor is running for [cluster] : " + getClusterId());
                             }
-
-
-                            // store primary members in the cluster instance context
-
                             // store primary members in the cluster instance context
                             List<String> primaryMemberListInClusterInstance = new ArrayList<String>();
 
-                            //FIXME to check the status of the instance
-                            if (true) {
+                            for (ClusterLevelPartitionContext partitionContext : instanceContext.getPartitionCtxts()) {
 
-                                for (ClusterLevelPartitionContext partitionContext : instanceContext.getPartitionCtxts()) {
-
-                                    // get active primary members in this cluster instance context
-                                    for (MemberContext memberContext : partitionContext.getActiveMembers()) {
-                                        if (isPrimaryMember(memberContext)) {
-                                            primaryMemberListInClusterInstance.add(memberContext.getMemberId());
-                                        }
+                                // get active primary members in this cluster instance context
+                                for (MemberContext memberContext : partitionContext.getActiveMembers()) {
+                                    if (isPrimaryMember(memberContext)) {
+                                        primaryMemberListInClusterInstance.add(memberContext.getMemberId());
                                     }
+                                }
 
-                                    // get pending primary members in this cluster instance context
-                                    for (MemberContext memberContext : partitionContext.getPendingMembers()) {
-                                        if (isPrimaryMember(memberContext)) {
-                                            primaryMemberListInClusterInstance.add(memberContext.getMemberId());
-                                        }
+                                // get pending primary members in this cluster instance context
+                                for (MemberContext memberContext : partitionContext.getPendingMembers()) {
+                                    if (isPrimaryMember(memberContext)) {
+                                        primaryMemberListInClusterInstance.add(memberContext.getMemberId());
                                     }
                                 }
+                            }
 
-                                getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
-                                getMinCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary);
-                                getMinCheckKnowledgeSession().setGlobal("algorithmName",
-                                        instanceContext.getPartitionAlgorithm());
+                            getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
+                            getMinCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary);
+                            getMinCheckKnowledgeSession().setGlobal("algorithmName",
+                                    instanceContext.getPartitionAlgorithm());
 
-                                if (log.isDebugEnabled()) {
-                                    log.debug(String.format("Running minimum check for cluster instance %s ",
-                                            instanceContext.getId()));
-                                }
+                            if (log.isDebugEnabled()) {
+                                log.debug(String.format("Running minimum check for cluster instance %s ",
+                                        instanceContext.getId()));
+                            }
 
-                                minCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getMinCheckKnowledgeSession(),
-                                        minCheckFactHandle, instanceContext);
+                            minCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getMinCheckKnowledgeSession(),
+                                    minCheckFactHandle, instanceContext);
 
-                                obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate(
-                                        getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, instanceContext);
+                            obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate(
+                                    getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, instanceContext);
 
-                                //checking the status of the cluster
-                                boolean rifReset = instanceContext.isRifReset();
-                                boolean memoryConsumptionReset = instanceContext.isMemoryConsumptionReset();
-                                boolean loadAverageReset = instanceContext.isLoadAverageReset();
+                            //checking the status of the cluster
+                            boolean rifReset = instanceContext.isRifReset();
+                            boolean memoryConsumptionReset = instanceContext.isMemoryConsumptionReset();
+                            boolean loadAverageReset = instanceContext.isLoadAverageReset();
+
+                            if (log.isDebugEnabled()) {
+                                log.debug("Execution point of scaling Rule, [Is rif Reset] : " + rifReset
+                                        + " [Is memoryConsumption Reset] : " + memoryConsumptionReset
+                                        + " [Is loadAverage Reset] : " + loadAverageReset);
+                            }
+                            if (rifReset || memoryConsumptionReset || loadAverageReset) {
 
-                                if (log.isDebugEnabled()) {
-                                    log.debug("Execution point of scaling Rule, [Is rif Reset] : " + rifReset
-                                            + " [Is memoryConsumption Reset] : " + memoryConsumptionReset
-                                            + " [Is loadAverage Reset] : " + loadAverageReset);
-                                }
-                                if (rifReset || memoryConsumptionReset || loadAverageReset) {
-
-
-                                    VMClusterContext vmClusterContext = (VMClusterContext) clusterContext;
-
-                                    getScaleCheckKnowledgeSession().setGlobal("instance", instanceContext);
-                                    getScaleCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
-                                    getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy",
-                                            vmClusterContext.getAutoscalePolicy());
-                                    getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset);
-                                    getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset);
-                                    getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset);
-                                    getScaleCheckKnowledgeSession().setGlobal("isPrimary", false);
-                                    getScaleCheckKnowledgeSession().setGlobal("primaryMembers", primaryMemberListInClusterInstance);
-                                    getMinCheckKnowledgeSession().setGlobal("algorithmName",
-                                            instanceContext.getPartitionAlgorithm());
-
-                                    if (log.isDebugEnabled()) {
-                                        log.debug(String.format("Running scale check for [cluster instance context] %s ",
-                                                instanceContext.getId()));
-                                        log.debug(" Primary members : " + primaryMemberListInClusterInstance);
-                                    }
 
-                                    scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getScaleCheckKnowledgeSession()
-                                            , scaleCheckFactHandle, instanceContext);
+                                VMClusterContext vmClusterContext = (VMClusterContext) clusterContext;
 
-                                    instanceContext.setRifReset(false);
-                                    instanceContext.setMemoryConsumptionReset(false);
-                                    instanceContext.setLoadAverageReset(false);
-                                } else if (log.isDebugEnabled()) {
-                                    log.debug(String.format("Scale rule will not run since the LB statistics have not " +
-                                                    "received before this cycle for [cluster instance context] %s ",
+                                getScaleCheckKnowledgeSession().setGlobal("instance", instanceContext);
+                                getScaleCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
+                                getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy",
+                                        vmClusterContext.getAutoscalePolicy());
+                                getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset);
+                                getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset);
+                                getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset);
+                                getScaleCheckKnowledgeSession().setGlobal("isPrimary", false);
+                                getScaleCheckKnowledgeSession().setGlobal("primaryMembers", primaryMemberListInClusterInstance);
+                                getMinCheckKnowledgeSession().setGlobal("algorithmName",
+                                        instanceContext.getPartitionAlgorithm());
+
+                                if (log.isDebugEnabled()) {
+                                    log.debug(String.format("Running scale check for [cluster instance context] %s ",
                                             instanceContext.getId()));
+                                    log.debug(" Primary members : " + primaryMemberListInClusterInstance);
                                 }
+
+                                scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getScaleCheckKnowledgeSession()
+                                        , scaleCheckFactHandle, instanceContext);
+
+                                instanceContext.setRifReset(false);
+                                instanceContext.setMemoryConsumptionReset(false);
+                                instanceContext.setLoadAverageReset(false);
+                            } else if (log.isDebugEnabled()) {
+                                log.debug(String.format("Scale rule will not run since the LB statistics have not " +
+                                                "received before this cycle for [cluster instance context] %s ",
+                                        instanceContext.getId()));
                             }
+
                         }
                     };
                     monitoringRunnable.run();