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/11/30 11:20:14 UTC

[2/5] stratos git commit: refactoring cluster monitor to include proper data structure with the cluster instances

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/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 25836b7..83d5374 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
@@ -21,14 +21,14 @@ package org.apache.stratos.autoscaler.monitor.cluster;
 import org.apache.commons.configuration.XMLConfiguration;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.context.cluster.AbstractClusterContext;
+import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext;
 import org.apache.stratos.autoscaler.context.cluster.VMClusterContext;
-import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext;
 import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext;
+import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext;
 import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
-import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
 import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent;
 import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
+import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.stratos.autoscaler.util.AutoScalerConstants;
 import org.apache.stratos.autoscaler.util.ConfUtil;
@@ -40,9 +40,8 @@ import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
 import org.apache.stratos.messaging.domain.applications.GroupStatus;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 /**
  * Is responsible for monitoring a service cluster which is based on VMs. This runs periodically
@@ -58,9 +57,9 @@ public class VMServiceClusterMonitor extends VMClusterMonitor {
 
     public VMServiceClusterMonitor(String serviceType, String clusterId) {
         super(serviceType, clusterId, new AutoscalerRuleEvaluator(
-                        StratosConstants.VM_MIN_CHECK_DROOL_FILE,
-                        StratosConstants.VM_OBSOLETE_CHECK_DROOL_FILE,
-                        StratosConstants.VM_SCALE_CHECK_DROOL_FILE));
+                StratosConstants.VM_MIN_CHECK_DROOL_FILE,
+                StratosConstants.VM_OBSOLETE_CHECK_DROOL_FILE,
+                StratosConstants.VM_SCALE_CHECK_DROOL_FILE));
         readConfigurations();
     }
 
@@ -71,10 +70,10 @@ public class VMServiceClusterMonitor extends VMClusterMonitor {
                 /* TODO ***********if  (((getStatus().getCode() <= ClusterStatus.Active.getCode()) ||
                         (getStatus() == ClusterStatus.Inactive && !hasStartupDependents)) && !this.hasFaultyMember
                         && !stop) {*/
-                    if (log.isDebugEnabled()) {
-                        log.debug("Cluster monitor is running.. " + this.toString());
-                    }
-                    monitor();
+                if (log.isDebugEnabled()) {
+                    log.debug("Cluster monitor is running.. " + this.toString());
+                }
+                monitor();
                 /*} else {
                     if (log.isDebugEnabled()) {
                         log.debug("Cluster monitor is suspended as the cluster is in " +
@@ -113,98 +112,107 @@ public class VMServiceClusterMonitor extends VMClusterMonitor {
     }
 
     public void monitor() {
-
-        Set<Map.Entry<String, AbstractClusterContext>> instanceIdToClusterCtxtEntries = instanceIdToClusterContextMap.entrySet();
-        for (final Map.Entry<String, AbstractClusterContext> instanceIdToClusterCtxtEntry : instanceIdToClusterCtxtEntries) {
-            Runnable monitoringRunnable = new Runnable() {
-                @Override
-                public void run() {
-                    for (ClusterLevelNetworkPartitionContext networkPartitionContext :
-                            getNetworkPartitionCtxts(instanceIdToClusterCtxtEntry.getKey()).values()) {
-                        // store primary members in the network partition context
-                        List<String> primaryMemberListInNetworkPartition = new ArrayList<String>();
-                        //minimum check per partition
-                        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
-                            for (MemberContext memberContext : partitionContext.getActiveMembers()) {
-                                if (isPrimaryMember(memberContext)) {
-                                    primaryMemberListInPartition.add(memberContext.getMemberId());
+        final Collection<ClusterLevelNetworkPartitionContext> clusterLevelNetworkPartitionContexts =
+                ((VMClusterContext) this.clusterContext).getNetworkPartitionCtxts().values();
+        Runnable monitoringRunnable = new Runnable() {
+            @Override
+            public void run() {
+                for (ClusterLevelNetworkPartitionContext networkPartitionContext :
+                        clusterLevelNetworkPartitionContexts) {
+                    // store primary members in the network partition context
+                    List<String> primaryMemberListInNetworkPartition = new ArrayList<String>();
+                    //minimum check per partition
+                    for (ClusterInstanceContext instanceContext : networkPartitionContext.
+                            getClusterInstanceContextMap().values()) {
+                        //FIXME to check the status of the instance
+                        if (true) {
+                            for (ClusterLevelPartitionContext partitionContext :
+                                    instanceContext.getPartitionCtxts().values()) {
+                                // store primary members in the partition context
+                                List<String> primaryMemberListInPartition = new ArrayList<String>();
+                                // get active primary members in this partition context
+                                for (MemberContext memberContext : partitionContext.getActiveMembers()) {
+                                    if (isPrimaryMember(memberContext)) {
+                                        primaryMemberListInPartition.add(memberContext.getMemberId());
+                                    }
                                 }
-                            }
 
-                            // get pending primary members in this partition context
-                            for (MemberContext memberContext : partitionContext.getPendingMembers()) {
-                                if (isPrimaryMember(memberContext)) {
-                                    primaryMemberListInPartition.add(memberContext.getMemberId());
+                                // get pending primary members in this partition context
+                                for (MemberContext memberContext : partitionContext.getPendingMembers()) {
+                                    if (isPrimaryMember(memberContext)) {
+                                        primaryMemberListInPartition.add(memberContext.getMemberId());
+                                    }
+                                }
+                                primaryMemberListInNetworkPartition.addAll(primaryMemberListInPartition);
+                                getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
+                                getMinCheckKnowledgeSession().setGlobal("lbRef", lbReferenceType);
+                                getMinCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary);
+                                getMinCheckKnowledgeSession().setGlobal("instanceId",
+                                        instanceContext.getId());
+
+                                if (log.isDebugEnabled()) {
+                                    log.debug(String.format("Running minimum check for partition %s ",
+                                            partitionContext.getPartitionId()));
                                 }
-                            }
-                            primaryMemberListInNetworkPartition.addAll(primaryMemberListInPartition);
-                            getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
-                            getMinCheckKnowledgeSession().setGlobal("lbRef", lbReferenceType);
-                            getMinCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary);
-                            getMinCheckKnowledgeSession().setGlobal("instanceId", instanceIdToClusterCtxtEntry.getKey());
-
-                            if (log.isDebugEnabled()) {
-                                log.debug(String.format("Running minimum check for partition %s ", partitionContext.getPartitionId()));
-                            }
-
-                            minCheckFactHandle = AutoscalerRuleEvaluator.evaluateMinCheck(getMinCheckKnowledgeSession()
-                                    , minCheckFactHandle, partitionContext);
-
-                            obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluateObsoleteCheck(getObsoleteCheckKnowledgeSession(),
-                                    obsoleteCheckFactHandle, partitionContext);
-
-                            //checking the status of the cluster
-
-
-                        }
-                        boolean rifReset = networkPartitionContext.isRifReset();
-                        boolean memoryConsumptionReset = networkPartitionContext.isMemoryConsumptionReset();
-                        boolean loadAverageReset = networkPartitionContext.isLoadAverageReset();
 
-                        if (log.isDebugEnabled()) {
-                            log.debug("flag of rifReset: " + rifReset + " flag of memoryConsumptionReset" + memoryConsumptionReset
-                                    + " flag of loadAverageReset" + loadAverageReset);
-                        }
-                        if (rifReset || memoryConsumptionReset || loadAverageReset) {
+                                minCheckFactHandle = AutoscalerRuleEvaluator.
+                                        evaluateMinCheck(getMinCheckKnowledgeSession()
+                                                , minCheckFactHandle, partitionContext);
 
+                                obsoleteCheckFactHandle = AutoscalerRuleEvaluator.
+                                        evaluateObsoleteCheck(getObsoleteCheckKnowledgeSession(),
+                                                obsoleteCheckFactHandle, partitionContext);
 
-                            VMClusterContext vmClusterContext = (VMClusterContext) instanceIdToClusterCtxtEntry.getValue();
+                                //checking the status of the cluster
 
-                            getScaleCheckKnowledgeSession().setGlobal("instanceId", instanceIdToClusterCtxtEntry.getKey());
-                            getScaleCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
-                            getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy", vmClusterContext.getAutoscalePolicy());
-                            getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset);
-                            getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset);
-                            getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset);
-                            getScaleCheckKnowledgeSession().setGlobal("lbRef", lbReferenceType);
-                            getScaleCheckKnowledgeSession().setGlobal("isPrimary", false);
-                            getScaleCheckKnowledgeSession().setGlobal("primaryMembers", primaryMemberListInNetworkPartition);
+                                boolean rifReset = instanceContext.isRifReset();
+                                boolean memoryConsumptionReset = instanceContext.isMemoryConsumptionReset();
+                                boolean loadAverageReset = instanceContext.isLoadAverageReset();
 
-                            if (log.isDebugEnabled()) {
-                                log.debug(String.format("Running scale check for network partition %s ", networkPartitionContext.getId()));
-                                log.debug(" Primary members : " + primaryMemberListInNetworkPartition);
+                                if (log.isDebugEnabled()) {
+                                    log.debug("flag of rifReset: " + rifReset + " flag of memoryConsumptionReset" + memoryConsumptionReset
+                                            + " flag of loadAverageReset" + loadAverageReset);
+                                }
+                                if (rifReset || memoryConsumptionReset || loadAverageReset) {
+
+
+                                    VMClusterContext vmClusterContext = (VMClusterContext) clusterContext;
+
+                                    getScaleCheckKnowledgeSession().setGlobal("instanceId",
+                                            instanceContext.getId());
+                                    getScaleCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
+                                    getScaleCheckKnowledgeSession().setGlobal("autoscalePolicy", vmClusterContext.getAutoscalePolicy());
+                                    getScaleCheckKnowledgeSession().setGlobal("rifReset", rifReset);
+                                    getScaleCheckKnowledgeSession().setGlobal("mcReset", memoryConsumptionReset);
+                                    getScaleCheckKnowledgeSession().setGlobal("laReset", loadAverageReset);
+                                    getScaleCheckKnowledgeSession().setGlobal("lbRef", lbReferenceType);
+                                    getScaleCheckKnowledgeSession().setGlobal("isPrimary", false);
+                                    getScaleCheckKnowledgeSession().setGlobal("primaryMembers", primaryMemberListInNetworkPartition);
+
+                                    if (log.isDebugEnabled()) {
+                                        log.debug(String.format("Running scale check for network partition %s ", networkPartitionContext.getId()));
+                                        log.debug(" Primary members : " + primaryMemberListInNetworkPartition);
+                                    }
+
+                                    scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluateScaleCheck(getScaleCheckKnowledgeSession()
+                                            , scaleCheckFactHandle, networkPartitionContext);
+
+                                    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 network partition %s", networkPartitionContext.getId()));
+                                }
                             }
 
-                            scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluateScaleCheck(getScaleCheckKnowledgeSession()
-                                    , scaleCheckFactHandle, networkPartitionContext);
-
-                            networkPartitionContext.setRifReset(false);
-                            networkPartitionContext.setMemoryConsumptionReset(false);
-                            networkPartitionContext.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 network partition %s", networkPartitionContext.getId()));
                         }
-
                     }
                 }
-            };
 
-            monitoringRunnable.run();
-        }
+            }
+        };
+        monitoringRunnable.run();
     }
 
     @Override
@@ -279,16 +287,18 @@ public class VMServiceClusterMonitor extends VMClusterMonitor {
     @Override
     public void onParentScalingEvent(MonitorScalingEvent scalingEvent) {
 
-        if(log.isDebugEnabled()){
+        if (log.isDebugEnabled()) {
             log.debug("Parent scaling event received to [cluster]: " + this.getClusterId()
-                    + ", [network partition]: "  + scalingEvent.getNetworkPartitionId()
+                    + ", [network partition]: " + scalingEvent.getNetworkPartitionId()
                     + ", [event] " + scalingEvent.getId() + ", [group instance] " + scalingEvent.getInstanceId());
         }
 
         this.scalingFactorBasedOnDependencies = scalingEvent.getFactor();
-        VMClusterContext vmClusterContext = (VMClusterContext) instanceIdToClusterContextMap.get(scalingEvent.getInstanceId());
+        VMClusterContext vmClusterContext = (VMClusterContext) clusterContext;
+        String instanceId = scalingEvent.getInstanceId();
 
-        ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext = getNetworkPartitionCtxt(null, scalingEvent.getNetworkPartitionId());
+        ClusterInstanceContext clusterLevelNetworkPartitionContext =
+                getClusterInstanceContext(scalingEvent.getNetworkPartitionId(), instanceId);
 
 
         //TODO get min instance count from instance context

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
index 58a02a6..b332b15 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ApplicationMonitor.java
@@ -200,53 +200,66 @@ public class ApplicationMonitor extends ParentComponentMonitor {
         List<String> instanceIds = new ArrayList<String>();
         DeploymentPolicy deploymentPolicy = getDeploymentPolicy(application);
         String instanceId;
-        for (ApplicationLevelNetworkPartition networkPartition : deploymentPolicy.getApplicationLevelNetworkPartitions()) {
-            if (networkPartition.isActiveByDefault()) {
-                ApplicationLevelNetworkPartitionContext context =
-                        new ApplicationLevelNetworkPartitionContext(networkPartition.getId());
-                instanceId = createApplicationInstance(application, networkPartition.getId());
-                context.addInstanceContext(application.getInstanceContexts(instanceId));
-
-                this.networkPartitionCtxts.put(context.getId(), context);
-
-                instanceIds.add(instanceId);
-                log.info("Application instance has been added for the [network partition] " +
-                        networkPartition.getId() + " [appInstanceId] " + instanceId);
-            }
 
-        }
-        startDependency(application, instanceIds);
+        if(deploymentPolicy == null) {
+            //FIXME for docker with deployment policy
+            instanceId = createApplicationInstance(application, null);
+            instanceIds.add(instanceId);
+        } else {
+            for (ApplicationLevelNetworkPartition networkPartition :
+                                        deploymentPolicy.getApplicationLevelNetworkPartitions()) {
+                if (networkPartition.isActiveByDefault()) {
+                    ApplicationLevelNetworkPartitionContext context =
+                            new ApplicationLevelNetworkPartitionContext(networkPartition.getId());
+                    instanceId = createApplicationInstance(application, networkPartition.getId());
+                    context.addInstanceContext(application.getInstanceContexts(instanceId));
+
+                    this.networkPartitionCtxts.put(context.getId(), context);
 
+                    instanceIds.add(instanceId);
+                    log.info("Application instance has been added for the [network partition] " +
+                            networkPartition.getId() + " [appInstanceId] " + instanceId);
+                }
 
+            }
+        }
+        startDependency(application, instanceIds);
     }
 
     public void createInstanceOnBurstingForApplication() throws TopologyInConsistentException,
             PolicyValidationException,
             ParentMonitorNotFoundException {
-        //TODO get lock
         Application application = ApplicationHolder.getApplications().getApplication(appId);
         if (application == null) {
             String msg = "Application cannot be found in the Topology.";
             throw new TopologyInConsistentException(msg);
         }
+        boolean burstNPFound = false;
         DeploymentPolicy deploymentPolicy = getDeploymentPolicy(application);
         String instanceId = null;
         //Find out the inActive network partition
-        boolean burstNPFound = false;
-        for (ApplicationLevelNetworkPartition networkPartition : deploymentPolicy.getApplicationLevelNetworkPartitions()) {
-            if (!networkPartition.isActiveByDefault()) {
-                if (!this.networkPartitionCtxts.containsKey(networkPartition.getId())) {
-                    ApplicationLevelNetworkPartitionContext context =
-                            new ApplicationLevelNetworkPartitionContext(networkPartition.getId());
-                    context.setCreatedOnBurst(true);
-                    instanceId = createApplicationInstance(application, networkPartition.getId());
-                    context.addInstanceContext(application.getInstanceContexts(instanceId));
-                    this.networkPartitionCtxts.put(context.getId(), context);
-                    burstNPFound = true;
+        if(deploymentPolicy == null) {
+            //FIXME for docker with deployment policy
+            instanceId = createApplicationInstance(application, null);
+
+        } else {
+            for (ApplicationLevelNetworkPartition networkPartition : deploymentPolicy.
+                                                            getApplicationLevelNetworkPartitions()) {
+                if (!networkPartition.isActiveByDefault()) {
+                    if (!this.networkPartitionCtxts.containsKey(networkPartition.getId())) {
+                        ApplicationLevelNetworkPartitionContext context =
+                                new ApplicationLevelNetworkPartitionContext(networkPartition.getId());
+                        context.setCreatedOnBurst(true);
+                        instanceId = createApplicationInstance(application, networkPartition.getId());
+                        context.addInstanceContext(application.getInstanceContexts(instanceId));
+                        this.networkPartitionCtxts.put(context.getId(), context);
+                        burstNPFound = true;
+                    }
                 }
             }
         }
 
+
         if (!burstNPFound) {
             log.warn("[Application] " + appId + " cannot be burst as no available resources found");
         } else {
@@ -257,22 +270,21 @@ public class ApplicationMonitor extends ParentComponentMonitor {
 
     private DeploymentPolicy getDeploymentPolicy(Application application) throws PolicyValidationException {
         String deploymentPolicyName = application.getDeploymentPolicy();
-        if (deploymentPolicyName == null) {
+        /*if (deploymentPolicyName == null) {
             String msg = "Deployment Policy is not specified to the [Application]:" + appId;
             log.error(msg);
             throw new PolicyValidationException(msg);
         }
-
-        DeploymentPolicy deploymentPolicy =
-                PolicyManager.getInstance()
-                        .getDeploymentPolicy(deploymentPolicyName);
-        if (deploymentPolicy == null) {
+*/      DeploymentPolicy deploymentPolicy = null;
+        if(deploymentPolicyName != null) {
+            deploymentPolicy = PolicyManager.getInstance()
+                    .getDeploymentPolicy(deploymentPolicyName);
             if (deploymentPolicy == null) {
                 String msg = "Deployment policy is null: [policy-name] " + deploymentPolicyName;
                 log.error(msg);
                 throw new PolicyValidationException(msg);
             }
-        }
+            }
 
         return deploymentPolicy;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ApplicationLevelNetworkPartition.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ApplicationLevelNetworkPartition.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ApplicationLevelNetworkPartition.java
index ee6c877..3e7d6e6 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ApplicationLevelNetworkPartition.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ApplicationLevelNetworkPartition.java
@@ -85,4 +85,13 @@ public class ApplicationLevelNetworkPartition implements Serializable{
     public void setActiveByDefault(boolean activeByDefault) {
         this.activeByDefault = activeByDefault;
     }
+
+    public Partition getPartition(String partitionId) {
+        for(Partition partition : partitions) {
+            if(partition.getId().equals(partitionId)) {
+                return partition;
+            }
+        }
+        return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ChildLevelNetworkPartition.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ChildLevelNetworkPartition.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ChildLevelNetworkPartition.java
index a8d6707..83af824 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ChildLevelNetworkPartition.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/pojo/policy/deployment/partition/network/ChildLevelNetworkPartition.java
@@ -92,4 +92,5 @@ public class ChildLevelNetworkPartition implements Serializable {
     public void setChildLevelPartitions(ChildLevelPartition[] childLevelPartitions) {
         this.childLevelPartitions = childLevelPartitions;
     }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/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 50c59b8..330036a 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
@@ -28,7 +28,9 @@ import org.apache.stratos.autoscaler.algorithm.OneAfterAnother;
 import org.apache.stratos.autoscaler.algorithm.RoundRobin;
 import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.client.InstanceNotificationClient;
+import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext;
 import org.apache.stratos.autoscaler.context.cluster.KubernetesClusterContext;
+import org.apache.stratos.autoscaler.context.cluster.VMClusterContext;
 import org.apache.stratos.autoscaler.context.member.MemberStatsContext;
 import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext;
 import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext;
@@ -185,11 +187,10 @@ public class RuleTasksDelegator {
             //Calculate accumulation of minimum counts of all the partition of current network partition
             int minimumCountOfNetworkPartition = 0;
             VMClusterMonitor vmClusterMonitor = (VMClusterMonitor) AutoscalerContext.getInstance().getClusterMonitor(clusterId);
-            for (ClusterLevelPartitionContext partitionContextOfCurrentNetworkClusterMonitorPartition : vmClusterMonitor.getNetworkPartitionCtxt(instanceId, nwPartitionId).
-                    getPartitionCtxts().values()) {
-
-                minimumCountOfNetworkPartition += partitionContextOfCurrentNetworkClusterMonitorPartition.getMinimumMemberCount();
-            }
+            VMClusterContext clusterContext = (VMClusterContext) vmClusterMonitor.getClusterContext();
+            ClusterLevelNetworkPartitionContext  clusterLevelNetworkPartitionContext = clusterContext.getNetworkPartitionCtxt(nwPartitionId);
+            ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.getClusterInstanceContext(instanceId);
+            minimumCountOfNetworkPartition = clusterInstanceContext.getMinInstanceCount();
             MemberContext memberContext =
                     CloudControllerClient.getInstance()
                             .spawnAnInstance(clusterMonitorPartitionContext.getPartition(),
@@ -477,11 +478,11 @@ public class RuleTasksDelegator {
         return (int) Math.ceil(predictedValue);
     }
 
-    public double getLoadAveragePredictedValue(ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext) {
+    public double getLoadAveragePredictedValue(String instanceId, ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext) {
         double loadAveragePredicted = 0.0d;
         int totalMemberCount = 0;
-
-        for (ClusterLevelPartitionContext partitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
+        ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.getClusterInstanceContext(instanceId);
+        for (ClusterLevelPartitionContext partitionContext : clusterInstanceContext.getPartitionCtxts().values()) {
             for (MemberStatsContext memberStatsContext : partitionContext.getMemberStatsContexts().values()) {
 
                 float memberAverageLoadAverage = memberStatsContext.getLoadAverage().getAverage();
@@ -505,11 +506,11 @@ public class RuleTasksDelegator {
         }
     }
 
-    public double getMemoryConsumptionPredictedValue(ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext) {
+    public double getMemoryConsumptionPredictedValue(String instanceId, ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext) {
         double memoryConsumptionPredicted = 0.0d;
         int totalMemberCount = 0;
-
-        for (ClusterLevelPartitionContext partitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
+        ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.getClusterInstanceContext(instanceId);
+        for (ClusterLevelPartitionContext partitionContext : clusterInstanceContext.getPartitionCtxts().values()) {
             for (MemberStatsContext memberStatsContext : partitionContext.getMemberStatsContexts().values()) {
 
                 float memberMemoryConsumptionAverage = memberStatsContext.getMemoryConsumption().getAverage();

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/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 1645cad..daff8ba 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
@@ -172,7 +172,7 @@ public class StatusChecker {
      */
     private boolean clusterActive(VMClusterMonitor monitor) {
         boolean clusterActive = false;
-        for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
+        /*for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
             //minimum check per partition
             for (ClusterLevelPartitionContext clusterMonitorPartitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
                 if (clusterMonitorPartitionContext.getMinimumMemberCount() == clusterMonitorPartitionContext.getActiveMemberCount()) {
@@ -184,7 +184,7 @@ public class StatusChecker {
                     return false;
                 }
             }
-        }
+        }*/
         return clusterActive;
     }
 
@@ -198,13 +198,13 @@ public class StatusChecker {
         boolean hasMember = false;
         for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
             //minimum check per partition
-            for (ClusterLevelPartitionContext partitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
+            /*for (ClusterLevelPartitionContext partitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
                 if (partitionContext.getNonTerminatedMemberCount() > 0) {
                     hasMember = true;
                 } else {
                     hasMember = false;
                 }
-            }
+            }*/
         }
         return hasMember;
     }
@@ -262,13 +262,13 @@ public class StatusChecker {
     private boolean getClusterInactive(VMClusterMonitor monitor, String partitionId) {
         boolean clusterInActive = false;
         for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
-            for (ClusterLevelPartitionContext partition : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
+            /*for (ClusterLevelPartitionContext partition : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
                 if (partitionId.equals(partition.getPartitionId()) &&
                         partition.getActiveMemberCount() <= partition.getMinimumMemberCount()) {
                     clusterInActive = true;
                     return clusterInActive;
                 }
-            }
+            }*/
 
         }
         return clusterInActive;

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/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 4b745f2..d6dc59e 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,6 +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.context.AutoscalerContext;
+import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext;
+import org.apache.stratos.autoscaler.context.cluster.VMClusterContext;
 import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext;
 import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext;
 import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
@@ -65,9 +67,10 @@ public class ClusterStatusActiveProcessor extends ClusterStatusProcessor {
         VMClusterMonitor monitor = (VMClusterMonitor) AutoscalerContext.getInstance().
                                     getClusterMonitor(clusterId);
         boolean clusterActive = false;
-        for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getNetworkPartitionCtxts(instanceId).values()) {
+        for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getNetworkPartitionCtxts()) {
             //minimum check per partition
-            for (ClusterLevelPartitionContext clusterMonitorPartitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
+            ClusterInstanceContext instanceContext = clusterLevelNetworkPartitionContext.getClusterInstanceContext(instanceId);
+            for (ClusterLevelPartitionContext clusterMonitorPartitionContext : instanceContext.getPartitionCtxts().values()) {
                 if (clusterMonitorPartitionContext.getMinimumMemberCount() == clusterMonitorPartitionContext.getActiveMemberCount()) {
                     clusterActive = true;
                 } else if (clusterMonitorPartitionContext.getActiveMemberCount() > clusterMonitorPartitionContext.getMinimumMemberCount()) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/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 b536371..01daa54 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,6 +21,7 @@ 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.context.AutoscalerContext;
+import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext;
 import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext;
 import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext;
 import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
@@ -65,7 +66,7 @@ public class ClusterStatusInActiveProcessor extends ClusterStatusProcessor {
                 getClusterMonitor(clusterId);
 
         boolean clusterInActive;
-        clusterInActive = getClusterInactive(monitor);
+        clusterInActive = getClusterInactive(instanceId, monitor);
         if(clusterInActive) {
             //if the monitor is dependent, temporarily pausing it
             if (monitor.hasStartupDependents()) {
@@ -89,10 +90,11 @@ public class ClusterStatusInActiveProcessor extends ClusterStatusProcessor {
         return clusterInActive;
     }
 
-    private boolean getClusterInactive(VMClusterMonitor monitor) {
+    private boolean getClusterInactive(String instanceId, VMClusterMonitor monitor) {
         boolean clusterInActive = false;
         for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
-            for (ClusterLevelPartitionContext partition : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
+            ClusterInstanceContext instanceContext = clusterLevelNetworkPartitionContext.getClusterInstanceContext(instanceId);
+            for (ClusterLevelPartitionContext partition : instanceContext.getPartitionCtxts().values()) {
                 if (partition.getActiveMemberCount() <= partition.getMinimumMemberCount()) {
                     clusterInActive = true;
                     return clusterInActive;

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/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 706ad9d..ec3528f 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,6 +21,7 @@ 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.context.AutoscalerContext;
+import org.apache.stratos.autoscaler.context.cluster.ClusterInstanceContext;
 import org.apache.stratos.autoscaler.context.partition.ClusterLevelPartitionContext;
 import org.apache.stratos.autoscaler.context.partition.network.ClusterLevelNetworkPartitionContext;
 import org.apache.stratos.autoscaler.applications.ApplicationHolder;
@@ -122,13 +123,18 @@ public class ClusterStatusTerminatedProcessor extends ClusterStatusProcessor {
         boolean hasMember = false;
         for (ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext : monitor.getAllNetworkPartitionCtxts().values()) {
             //minimum check per partition
-            for (ClusterLevelPartitionContext partitionContext : clusterLevelNetworkPartitionContext.getPartitionCtxts().values()) {
-                if (partitionContext.getNonTerminatedMemberCount() > 0) {
-                    hasMember = true;
-                } else {
-                    hasMember = false;
+            for(ClusterInstanceContext clusterInstanceContext :
+                    clusterLevelNetworkPartitionContext.getClusterInstanceContextMap().values()) {
+                for (ClusterLevelPartitionContext partitionContext :
+                        clusterInstanceContext.getPartitionCtxts().values()) {
+                    if (partitionContext.getNonTerminatedMemberCount() > 0) {
+                        hasMember = true;
+                    } else {
+                        hasMember = false;
+                    }
                 }
             }
+
         }
         return hasMember;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ClusterDataHolder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ClusterDataHolder.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ClusterDataHolder.java
index 6989238..d095c37 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ClusterDataHolder.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/ClusterDataHolder.java
@@ -35,6 +35,9 @@ public class ClusterDataHolder implements Serializable {
     // Cluster id
     private String clusterId;
 
+    private int minInstances;
+    private int maxInstances;
+
     public ClusterDataHolder (String serviceType, String clusterId) {
 
         this.serviceType = serviceType;
@@ -48,4 +51,20 @@ public class ClusterDataHolder implements Serializable {
     public String getClusterId() {
         return clusterId;
     }
+
+    public int getMinInstances() {
+        return minInstances;
+    }
+
+    public void setMinInstances(int minInstances) {
+        this.minInstances = minInstances;
+    }
+
+    public int getMaxInstances() {
+        return maxInstances;
+    }
+
+    public void setMaxInstances(int maxInstances) {
+        this.maxInstances = maxInstances;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
index 1a6aaf6..bd737c2 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
@@ -55,10 +55,12 @@ public class Cluster implements Serializable {
 
     private String appId;
 
+    private String parentId;
+
     private String loadBalanceAlgorithmName;
     @XmlJavaTypeAdapter(MapAdapter.class)
     private Properties properties;
-    protected Map<String, ClusterInstance> instanceIdToInstanceContextMap;
+    private Map<String, ClusterInstance> instanceIdToInstanceContextMap;
     //private LifeCycleStateManager<ClusterStatus> clusterStateManager;
 
     public Cluster(String serviceName, String clusterId, String deploymentPolicyName,
@@ -70,7 +72,7 @@ public class Cluster implements Serializable {
         this.setHostNames(new ArrayList<String>());
         this.memberMap = new HashMap<String, Member>();
         this.appId = appId;
-        this.instanceIdToInstanceContextMap = new HashMap<String, ClusterInstance>();
+        this.setInstanceIdToInstanceContextMap(new HashMap<String, ClusterInstance>());
         //this.clusterStateManager = new LifeCycleStateManager<ClusterStatus>(ClusterStatus.Created, clusterId);
         // temporary; should be removed
         //this.status = ClusterStatus.Created;
@@ -213,44 +215,44 @@ public class Cluster implements Serializable {
     }
 
     public boolean isStateTransitionValid(ClusterStatus newState, String clusterInstanceId) {
-        return instanceIdToInstanceContextMap.get(clusterInstanceId).isStateTransitionValid(newState);
+        return getInstanceIdToInstanceContextMap().get(clusterInstanceId).isStateTransitionValid(newState);
     }
 
     public Stack<ClusterStatus> getTransitionedStates(String clusterInstanceId) {
-        return instanceIdToInstanceContextMap.get(clusterInstanceId).getTransitionedStates();
+        return getInstanceIdToInstanceContextMap().get(clusterInstanceId).getTransitionedStates();
     }
 
     public ClusterStatus getStatus(String applicationInstanceId) {
         //return status;
-        return instanceIdToInstanceContextMap.get(applicationInstanceId).getStatus();
+        return getInstanceIdToInstanceContextMap().get(applicationInstanceId).getStatus();
     }
 
     public boolean setStatus(ClusterStatus newStatus, String applicationInstanceId) {
-        return instanceIdToInstanceContextMap.get(applicationInstanceId).setStatus(newStatus);
+        return getInstanceIdToInstanceContextMap().get(applicationInstanceId).setStatus(newStatus);
     }
 
     public void addInstanceContext (String instanceId, ClusterInstance instanceContext) {
 
-        instanceIdToInstanceContextMap.put(instanceId, instanceContext);
+        getInstanceIdToInstanceContextMap().put(instanceId, instanceContext);
     }
 
     public ClusterInstance getInstanceContexts (String instanceId) {
         // if map is empty, return null
-        if (instanceIdToInstanceContextMap.isEmpty()) {
+        if (getInstanceIdToInstanceContextMap().isEmpty()) {
             return null;
         }
 
         // if instanceId is null, just get the first InstanceContext
         if (instanceId == null) {
-            return instanceIdToInstanceContextMap.entrySet().iterator().next().getValue();
+            return getInstanceIdToInstanceContextMap().entrySet().iterator().next().getValue();
         }
 
-        return instanceIdToInstanceContextMap.get(instanceId);
+        return getInstanceIdToInstanceContextMap().get(instanceId);
     }
 
     public int getInstanceContextCount () {
 
-        return instanceIdToInstanceContextMap.keySet().size();
+        return getInstanceIdToInstanceContextMap().keySet().size();
     }
 
     public boolean equals(Object other) {
@@ -278,6 +280,25 @@ public class Cluster implements Serializable {
         this.hostNames = hostNames;
     }
 
+    public String getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(String parentId) {
+        this.parentId = parentId;
+    }
+
+    public Map<String, ClusterInstance> getInstanceIdToInstanceContextMap() {
+        return instanceIdToInstanceContextMap;
+    }
+
+    public void setInstanceIdToInstanceContextMap(Map<String, ClusterInstance> instanceIdToInstanceContextMap) {
+        this.instanceIdToInstanceContextMap = instanceIdToInstanceContextMap;
+    }
+
+    public Collection<ClusterInstance> getClusterInstances() {
+        return this.instanceIdToInstanceContextMap.values();
+    }
 //    public ClusterStatus getTempStatus() {
 //        return status;
 //    }

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/AverageRequestsServingCapabilityEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/AverageRequestsServingCapabilityEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/AverageRequestsServingCapabilityEvent.java
index 011c75a..47fbf7e 100755
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/AverageRequestsServingCapabilityEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/AverageRequestsServingCapabilityEvent.java
@@ -8,12 +8,14 @@ public class AverageRequestsServingCapabilityEvent extends  Event{
     private final String networkPartitionId;
     private final String clusterId;
     private final float value;
+    private final String instanceId;
 
-    public AverageRequestsServingCapabilityEvent(String networkPartitionId, String clusterId, float value) {
+    public AverageRequestsServingCapabilityEvent(String networkPartitionId, String clusterId, float value, String instanceId) {
         this.networkPartitionId = networkPartitionId;
         this.clusterId = clusterId;
         this.value = value;
 
+        this.instanceId = instanceId;
     }
     public String getClusterId() {
         return clusterId;
@@ -28,4 +30,7 @@ public class AverageRequestsServingCapabilityEvent extends  Event{
     }
 
 
+    public String getInstanceId() {
+        return instanceId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/4f2c1b70/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/MemberFaultEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/MemberFaultEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/MemberFaultEvent.java
index da358ff..e576ba8 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/MemberFaultEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/health/stat/MemberFaultEvent.java
@@ -29,15 +29,17 @@ public class MemberFaultEvent extends Event {
     private final String memberId;
     private final String partitionId;
     private final String instanceId;
+    private final String networkPartitionId;
 
     private final float value;
 
     public MemberFaultEvent(String clusterId, String memberId, String partitionId,
-                            String instanceId, float value) {
+                            String instanceId, String networkPartitionId, float value) {
         this.clusterId = clusterId;
         this.instanceId = instanceId;
         this.memberId = memberId;
         this.partitionId = partitionId;
+        this.networkPartitionId = networkPartitionId;
         this.value = value;
     }
 
@@ -61,4 +63,8 @@ public class MemberFaultEvent extends Event {
     public String getInstanceId() {
         return instanceId;
     }
+
+    public String getNetworkPartitionId() {
+        return networkPartitionId;
+    }
 }