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:12 UTC

[1/6] stratos git commit: adding stratos restart support for ApplicationInstances handling

Repository: stratos
Updated Branches:
  refs/heads/master 64e874796 -> 707f11171


adding stratos restart support for ApplicationInstances handling


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

Branch: refs/heads/master
Commit: c7c3ec601a2800df420f770b69eead24b7733668
Parents: 64e8747
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 11:46:17 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 16:46:24 2014 +0530

----------------------------------------------------------------------
 .../applications/topic/ApplicationBuilder.java  |  15 +--
 .../monitor/component/ApplicationMonitor.java   | 112 ++++++++++++-------
 .../domain/applications/Application.java        |  33 ++++--
 3 files changed, 106 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/c7c3ec60/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
index 6fb76df..06271db 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationBuilder.java
@@ -82,7 +82,7 @@ public class ApplicationBuilder {
         ApplicationsEventPublisher.sendApplicationCreatedEvent(application);
     }
 
-    public static void handleApplicationInstanceCreatedEvent(String appId, String instanceId,
+    public static ApplicationInstance handleApplicationInstanceCreatedEvent(String appId, String instanceId,
                                                              String networkPartitionId) {
         if (log.isDebugEnabled()) {
             log.debug("Handling application activation event: [application-id] " + appId);
@@ -94,18 +94,18 @@ public class ApplicationBuilder {
         if (application == null) {
             log.warn(String.format("Application does not exist: [application-id] %s",
                     appId));
-            return;
+            return null;
         }
 
         ApplicationStatus status = ApplicationStatus.Created;
-
+        ApplicationInstance applicationInstance = null;
 
         if (!application.containsInstanceContext(instanceId)) {
             //setting the status, persist and publish
-            ApplicationInstance context = new ApplicationInstance(appId, instanceId);
-            context.setStatus(status);
-            context.setNetworkPartitionId(networkPartitionId);
-            application.addInstanceContext(instanceId, context);
+            applicationInstance = new ApplicationInstance(appId, instanceId);
+            applicationInstance.setStatus(status);
+            applicationInstance.setNetworkPartitionId(networkPartitionId);
+            application.addInstanceContext(instanceId, applicationInstance);
             //updateApplicationMonitor(appId, status);
             ApplicationHolder.persistApplication(application);
             //ApplicationsEventPublisher.sendApplicationActivatedEvent(appId);
@@ -113,6 +113,7 @@ public class ApplicationBuilder {
             log.warn(String.format("Application Instance Context already exists" +
                     " [appId] %s [ApplicationInstanceId] %s", appId, instanceId));
         }
+        return applicationInstance;
     }
 
     public static void handleApplicationActivatedEvent(String appId, String instanceId) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/c7c3ec60/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 4a8ae19..58c1fa0 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
@@ -41,7 +41,6 @@ import org.apache.stratos.messaging.domain.applications.Application;
 import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
 import org.apache.stratos.messaging.domain.applications.GroupStatus;
 import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
-import org.apache.stratos.messaging.domain.instance.GroupInstance;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
 
@@ -108,7 +107,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
      * @param status the status
      */
     public void setStatus(ApplicationStatus status, String instanceId) {
-        ((ApplicationInstance)this.instanceIdToInstanceMap.get(instanceId)).setStatus(status);
+        ((ApplicationInstance) this.instanceIdToInstanceMap.get(instanceId)).setStatus(status);
 
         //notify the children about the state change
         try {
@@ -144,9 +143,9 @@ public class ApplicationMonitor extends ParentComponentMonitor {
             } else {
                 log.warn("[monitor] " + id + " cannot be found in the inActive monitors list");
             }
-            ApplicationInstance instance = (ApplicationInstance)instanceIdToInstanceMap.get(instanceId);
+            ApplicationInstance instance = (ApplicationInstance) instanceIdToInstanceMap.get(instanceId);
             if (instance != null) {
-                if(instance.getStatus() == ApplicationStatus.Terminating) {
+                if (instance.getStatus() == ApplicationStatus.Terminating) {
                     ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
                             appId, instanceId);
                 } else {
@@ -200,37 +199,65 @@ public class ApplicationMonitor extends ParentComponentMonitor {
         DeploymentPolicy deploymentPolicy = getDeploymentPolicy(application);
         String instanceId;
 
-        if(deploymentPolicy == null) {
+        if (deploymentPolicy == null) {
             //FIXME for docker with deployment policy
-            instanceId = createApplicationInstance(application, null);
-            instanceIds.add(instanceId);
+            ApplicationInstance appInstance = createApplicationInstance(application, null);
+            instanceIds.add(appInstance.getInstanceId());
         } else {
             for (ApplicationLevelNetworkPartition networkPartition :
-                                        deploymentPolicy.getApplicationLevelNetworkPartitions()) {
+                    deploymentPolicy.getApplicationLevelNetworkPartitions()) {
                 if (networkPartition.isActiveByDefault()) {
                     ApplicationLevelNetworkPartitionContext context =
                             new ApplicationLevelNetworkPartitionContext(networkPartition.getId());
-                    instanceId = createApplicationInstance(application, networkPartition.getId());
-                    ApplicationInstanceContext instanceContext = new ApplicationInstanceContext(instanceId);
-                    context.addInstanceContext(instanceContext);
-
-                    ApplicationInstance instance = new ApplicationInstance(appId, instanceId);
-                    instance.setStatus(ApplicationStatus.Created);
-                    instance.setNetworkPartitionId(networkPartition.getId());
-                    this.instanceIdToInstanceMap.put(instanceId, instance);
-
-                    this.networkPartitionCtxts.put(context.getId(), context);
-
+                    //If application instances found in the ApplicationsTopology,
+                    // then have to add them first before creating new one
+                    ApplicationInstance appInstance = (ApplicationInstance) application.
+                            getInstanceByNetworkPartitionId(context.getId());
+                    if (appInstance != null) {
+                        //use the existing instance in the Topology to create the data
+                        instanceId = handleApplicationInstanceCreation(application, context, appInstance);
+                    } else {
+                        //create new app instance as it doesn't exist in the Topology
+                        instanceId = handleApplicationInstanceCreation(application, context, null);
+                    }
                     instanceIds.add(instanceId);
                     log.info("Application instance has been added for the [network partition] " +
                             networkPartition.getId() + " [appInstanceId] " + instanceId);
-                }
 
+                }
             }
         }
         startDependency(application, instanceIds);
     }
 
+    private String handleApplicationInstanceCreation(Application application,
+                                                     ApplicationLevelNetworkPartitionContext context,
+                                                     ApplicationInstance instanceExist) {
+        ApplicationInstance instance;
+        ApplicationInstanceContext instanceContext;
+        if (instanceExist != null) {
+            //using the existing instance
+            instance = instanceExist;
+        } else {
+            //creating a new applicationInstance
+            instance = createApplicationInstance(application, context.getId());
+
+        }
+        String instanceId = instance.getInstanceId();
+
+        //Creating appInstanceContext
+        instanceContext = new ApplicationInstanceContext(instanceId);
+        //adding the created App InstanceContext to ApplicationLevelNetworkPartitionContext
+        context.addInstanceContext(instanceContext);
+
+        //adding to instance map
+        this.instanceIdToInstanceMap.put(instanceId, instance);
+        //adding ApplicationLevelNetworkPartitionContext to networkPartitionContexts map
+        this.networkPartitionCtxts.put(context.getId(), context);
+
+        return instanceId;
+    }
+
     public void createInstanceOnBurstingForApplication() throws TopologyInConsistentException,
             PolicyValidationException,
             MonitorNotFoundException {
@@ -243,48 +270,52 @@ public class ApplicationMonitor extends ParentComponentMonitor {
         DeploymentPolicy deploymentPolicy = getDeploymentPolicy(application);
         String instanceId = null;
         //Find out the inActive network partition
-        if(deploymentPolicy == null) {
+        if (deploymentPolicy == null) {
             //FIXME for docker with deployment policy
-            instanceId = createApplicationInstance(application, null);
+            ApplicationInstance appInstance = createApplicationInstance(application, null);
+            instanceId = appInstance.getInstanceId();
 
         } else {
             for (ApplicationLevelNetworkPartition networkPartition : deploymentPolicy.
-                                                            getApplicationLevelNetworkPartitions()) {
+                    getApplicationLevelNetworkPartitions()) {
+                //Checking whether any not active NP found
                 if (!networkPartition.isActiveByDefault()) {
+
                     if (!this.networkPartitionCtxts.containsKey(networkPartition.getId())) {
+
                         ApplicationLevelNetworkPartitionContext context =
                                 new ApplicationLevelNetworkPartitionContext(networkPartition.getId());
-                        context.setCreatedOnBurst(true);
-                        instanceId = createApplicationInstance(application, networkPartition.getId());
-
-                        ApplicationInstanceContext instanceContext = new ApplicationInstanceContext(instanceId);
-                        context.addInstanceContext(instanceContext);
-                        this.networkPartitionCtxts.put(context.getId(), context);
-
-                        ApplicationInstance instance = new ApplicationInstance(appId, instanceId);
-                        instance.setStatus(ApplicationStatus.Created);
-                        this.instanceIdToInstanceMap.put(instanceId, instance);
 
+                        //Setting flags saying that it has been created by burst
+                        context.setCreatedOnBurst(true);
+                        ApplicationInstance appInstance = (ApplicationInstance) application.
+                                getInstanceByNetworkPartitionId(context.getId());
+
+                        if (appInstance == null) {
+                            instanceId = handleApplicationInstanceCreation(application, context, null);
+                        } else {
+                            log.warn("The Network partition is already associated with an " +
+                                    "[ApplicationInstance] " + appInstance.getInstanceId() +
+                                    "in the ApplicationsTopology. Hence not creating new AppInstance.");
+                            instanceId = handleApplicationInstanceCreation(application, context, appInstance);
+                        }
                         burstNPFound = true;
                     }
                 }
             }
         }
-
-
         if (!burstNPFound) {
             log.warn("[Application] " + appId + " cannot be burst as no available resources found");
         } else {
             startDependency(application, instanceId);
         }
-
     }
 
     private DeploymentPolicy getDeploymentPolicy(Application application) throws PolicyValidationException {
         String deploymentPolicyName = application.getDeploymentPolicy();
         DeploymentPolicy deploymentPolicy = PolicyManager.getInstance().
                 getDeploymentPolicyByApplication(application.getUniqueIdentifier());
-        if(deploymentPolicyName != null) {
+        if (deploymentPolicyName != null) {
             deploymentPolicy = PolicyManager.getInstance()
                     .getDeploymentPolicy(deploymentPolicyName);
             if (deploymentPolicy == null) {
@@ -297,10 +328,11 @@ public class ApplicationMonitor extends ParentComponentMonitor {
         return deploymentPolicy;
     }
 
-    private String createApplicationInstance(Application application, String networkPartitionId) {
+    private ApplicationInstance createApplicationInstance(Application application, String networkPartitionId) {
         String instanceId = this.generateInstanceId(application);
-        ApplicationBuilder.handleApplicationInstanceCreatedEvent(appId, instanceId, networkPartitionId);
-        return instanceId;
+        ApplicationInstance instance = ApplicationBuilder.handleApplicationInstanceCreatedEvent(
+                appId, instanceId, networkPartitionId);
+        return instance;
     }
 
     public Map<String, ApplicationLevelNetworkPartitionContext> getApplicationLevelNetworkPartitionCtxts() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/c7c3ec60/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
index e0238ea..b8e3ee3 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/applications/Application.java
@@ -20,9 +20,12 @@
 package org.apache.stratos.messaging.domain.applications;
 
 import org.apache.commons.lang3.RandomStringUtils;
+import org.apache.poi.ss.formula.functions.T;
 import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
+import org.apache.stratos.messaging.domain.instance.Instance;
 
-import java.util.*;
+import java.util.HashMap;
+import java.util.Stack;
 
 /**
  * Represents an Application in the Topology
@@ -44,13 +47,13 @@ public class Application extends ParentComponent<ApplicationInstance> {
     // Life cycle state manager
     //protected LifeCycleStateManager<ApplicationStatus> applicationStateManager;
 
-    public Application (String id) {
+    public Application(String id) {
         super();
         this.id = id;
         this.key = RandomStringUtils.randomAlphanumeric(16);
         this.instanceIdToInstanceContextMap = new HashMap<String, ApplicationInstance>();
         //this.applicationStateManager =
-                //new LifeCycleStateManager<ApplicationStatus>(ApplicationStatus.Created, id);
+        //new LifeCycleStateManager<ApplicationStatus>(ApplicationStatus.Created, id);
     }
 
     public String getUniqueIdentifier() {
@@ -102,19 +105,35 @@ public class Application extends ParentComponent<ApplicationInstance> {
     }
 
     public boolean equals(Object other) {
-        if(other == null || !(other instanceof Application)) {
+        if (other == null || !(other instanceof Application)) {
             return false;
         }
 
-        if(this == other) {
+        if (this == other) {
             return true;
         }
 
-        Application that = (Application)other;
+        Application that = (Application) other;
         return this.id.equals(that.id);
     }
 
-    public int hashCode () {
+    public int hashCode() {
         return id.hashCode();
     }
+
+    public Instance getInstanceByNetworkPartitionId(String networkPartitionId) {
+        // if map is empty, return null
+        if (getInstanceIdToInstanceContextMap().isEmpty()) {
+            return null;
+        }
+
+        for (Instance instance : instanceIdToInstanceContextMap.values()) {
+            if (instance.getNetworkPartitionId().equals(networkPartitionId)) {
+                return instance;
+            }
+        }
+
+        return null;
+
+    }
 }


[6/6] stratos git commit: fixing wrong arguement passing issue

Posted by re...@apache.org.
fixing wrong arguement passing issue


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

Branch: refs/heads/master
Commit: 707f11171a98b3aebdd6ecad221f7220da452e93
Parents: ec3fd0f
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 18:00:42 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 18:00:42 2014 +0530

----------------------------------------------------------------------
 .../org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java   | 2 +-
 .../modules/distribution/src/main/conf/drools/scaling.drl        | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/707f1117/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 6c58244..bbe499c 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
@@ -194,8 +194,8 @@ public class RuleTasksDelegator {
                     CloudControllerClient.getInstance()
                             .spawnAnInstance(clusterMonitorPartitionContext.getPartition(),
                                     clusterId,
-                                    instanceId,
                                     clusterMonitorPartitionContext.getNetworkPartitionId(),
+                                    instanceId,
                                     isPrimary,
                                     minimumCountOfNetworkPartition);
             if (memberContext != null) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/707f1117/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
----------------------------------------------------------------------
diff --git a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
index 8523088..621cbe6 100644
--- a/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
+++ b/products/stratos/modules/distribution/src/main/conf/drools/scaling.drl
@@ -132,7 +132,7 @@ dialect "mvel"
             int count = 0;
 
             //Calculating the factor scaling
-            float factor = numberOfRequiredInstances / clusterInstanceContext.getMinMembers();
+            float factor = numberOfRequiredInstances / clusterInstanceContext.getMinInstanceCount();
             delegator.delegateScalingDependencyNotification(clusterId, clusterInstanceContext.getId(), factor);
 
             while(count != additionalInstances){
@@ -146,7 +146,7 @@ dialect "mvel"
           }    
         } else if(scaleDown){
 
-            float factor = numberOfRequiredInstances / clusterInstanceContext.getMinMembers();
+            float factor = numberOfRequiredInstances / clusterInstanceContext.getMinInstanceCount();
             delegator.delegateScalingDependencyNotification(clusterId, clusterInstanceContext.getNetworkPartitionId(), factor);
 
             log.debug("[scale-down] Decided to Scale down [cluster] " + clusterId);


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

Posted by re...@apache.org.
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();


[3/6] stratos git commit: adding status checking before monitoring and fixing network partition issue

Posted by re...@apache.org.
adding status checking before monitoring and fixing network partition issue


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

Branch: refs/heads/master
Commit: ad400d984f9420acc1f3ed592b55cec1bf8b04df
Parents: 761b88f
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 17:05:41 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 17:05:41 2014 +0530

----------------------------------------------------------------------
 .../context/cluster/ClusterInstanceContext.java |  13 +-
 .../context/cluster/VMClusterContext.java       |  20 +-
 .../monitor/cluster/VMClusterMonitor.java       | 186 +++++++++----------
 3 files changed, 103 insertions(+), 116 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/ad400d98/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 bf6a051..a6fe42a 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
@@ -66,31 +66,22 @@ public class ClusterInstanceContext extends InstanceContext {
     private int maxMembers;
     //details required for partition selection algorithms
     private int currentPartitionIndex;
-    private ChildLevelPartition[] partitions;
 
     private String networkPartitionId;
 
     public ClusterInstanceContext(String clusterInstanceId, String partitionAlgo,
-                                  ChildLevelPartition[] partitions,
-                                  int min, String networkPartitionId) {
+                                  int min, int max, String networkPartitionId) {
 
         super(clusterInstanceId);
         this.networkPartitionId = networkPartitionId;
         this.setMinMembers(min);
-        if (partitions == null) {
-            this.partitions = new ChildLevelPartition[0];
-        } else {
-            this.partitions = Arrays.copyOf(partitions, partitions.length);
-        }
         partitionCtxts = new ArrayList<ClusterLevelPartitionContext>();
         this.partitionAlgorithm = partitionAlgo;
         //partitionCtxts = new HashMap<String, ClusterLevelPartitionContext>();
         requestsInFlight = new RequestsInFlight();
         loadAverage = new LoadAverage();
         memoryConsumption = new MemoryConsumption();
-        for (ChildLevelPartition partition : partitions) {
-            maxInstanceCount += partition.getMax();
-        }
+        maxInstanceCount = max;
         requiredInstanceCountBasedOnStats = minInstanceCount;
         requiredInstanceCountBasedOnDependencies = minInstanceCount;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/ad400d98/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 2505cbe..f5cdb32 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
@@ -227,9 +227,9 @@ public class VMClusterContext extends AbstractClusterContext {
             ChildLevelPartition childLevelPartition)
             throws PolicyValidationException, PartitionValidationException {
         //Getting the associated network partition
-        ChildLevelNetworkPartition networkPartition = deploymentPolicy.
-                getChildLevelNetworkPartition(clusterInstance.getNetworkPartitionId());
-        if (networkPartition == null) {
+       /* ChildLevelNetworkPartition networkPartition = deploymentPolicy.
+                getChildLevelNetworkPartition(clusterInstance.getNetworkPartitionId());*/
+        if (clusterLevelNetworkPartitionContext == null) {
             String msg =
                     "Network Partition is null in deployment policy: [policy-name]: " +
                             deploymentPolicy.getId();
@@ -237,6 +237,8 @@ public class VMClusterContext extends AbstractClusterContext {
             throw new PolicyValidationException(msg);
         }
 
+        String nPartitionId = clusterLevelNetworkPartitionContext.getId();
+
         //Getting the associated  partition
         if (clusterInstance.getPartitionId() == null || childLevelPartition == null) {
             String msg =
@@ -247,12 +249,12 @@ public class VMClusterContext extends AbstractClusterContext {
             throw new PolicyValidationException(msg);
         }
 
-        //Creating cluster level network partitionContext, if not exist
+        /*//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());
@@ -270,8 +272,8 @@ public class VMClusterContext extends AbstractClusterContext {
                 ApplicationHolder.releaseReadLock();
             }
             clusterInstanceContext = new ClusterInstanceContext(clusterInstance.getInstanceId(),
-                    networkPartition.getPartitionAlgo(),
-                    networkPartition.getChildLevelPartitions(), networkPartition.getMin(), networkPartition.getId());
+                    clusterLevelNetworkPartitionContext.getPartitionAlgorithm(),
+                    minInstances, maxInstances , nPartitionId);
         }
         String partitionId;
         if(childLevelPartition != null) {
@@ -283,8 +285,8 @@ public class VMClusterContext extends AbstractClusterContext {
             partitionId = clusterInstance.getPartitionId();
         }
         //Retrieving the actual partition from application
-        Partition appPartition = deploymentPolicy.getApplicationLevelNetworkPartition(networkPartition.getId()).
-                getPartition(partitionId);
+        Partition appPartition = deploymentPolicy.getApplicationLevelNetworkPartition(nPartitionId).
+                                                                        getPartition(partitionId);
         org.apache.stratos.cloud.controller.stub.domain.Partition partition =
                 convertTOCCPartition(appPartition);
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/ad400d98/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 befe3cd..edea5cc 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
@@ -34,9 +34,9 @@ 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.status.processor.cluster.ClusterStatusTerminatedProcessor;
 import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusActiveProcessor;
 import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusInActiveProcessor;
+import org.apache.stratos.autoscaler.status.processor.cluster.ClusterStatusTerminatedProcessor;
 import org.apache.stratos.autoscaler.util.AutoScalerConstants;
 import org.apache.stratos.autoscaler.util.AutoscalerUtil;
 import org.apache.stratos.autoscaler.util.ConfUtil;
@@ -47,6 +47,7 @@ import org.apache.stratos.common.Property;
 import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
 import org.apache.stratos.messaging.domain.applications.GroupStatus;
+import org.apache.stratos.messaging.domain.instance.ClusterInstance;
 import org.apache.stratos.messaging.domain.topology.Cluster;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.Member;
@@ -54,7 +55,6 @@ import org.apache.stratos.messaging.domain.topology.Service;
 import org.apache.stratos.messaging.event.health.stat.*;
 import org.apache.stratos.messaging.event.topology.*;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
-import org.drools.runtime.StatefulKnowledgeSession;
 
 import java.util.*;
 
@@ -138,19 +138,10 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
     public void run() {
         while (!isDestroyed()) {
             try {
-                /* 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();
-                /*} else {
-                    if (log.isDebugEnabled()) {
-                        log.debug("Cluster monitor is suspended as the cluster is in " +
-                                ClusterStatus.Inactive + " mode......");
-                    }
-                }*/
             } catch (Exception e) {
                 log.error("Cluster monitor: Monitor failed." + this.toString(), e);
             }
@@ -189,109 +180,112 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
             final Collection<ClusterInstanceContext> clusterInstanceContexts = networkPartitionContext.
                     getClusterInstanceContextMap().values();
 
-            for (final ClusterInstanceContext instanceContext : clusterInstanceContexts ) {
-                /* TODO ***********if  (((getStatus().getCode() <= ClusterStatus.Active.getCode()) ||
-                        (getStatus() == ClusterStatus.Inactive && !hasStartupDependents)) && !this.hasFaultyMember
-                        && !stop) {*/
+            for (final ClusterInstanceContext instanceContext : clusterInstanceContexts) {
+                ClusterInstance instance = (ClusterInstance) this.instanceIdToInstanceMap.
+                        get(instanceContext.getId());
+                if ((instance.getStatus().getCode() <= ClusterStatus.Active.getCode()) ||
+                        (getStatus() == ClusterStatus.Inactive && !hasStartupDependents) && !this.hasFaultyMember
+                                && !stop) {
 
-                Runnable monitoringRunnable = new Runnable() {
-                    @Override
-                    public void run() {
+                    Runnable monitoringRunnable = new Runnable() {
+                        @Override
+                        public void run() {
 
-                    if (log.isDebugEnabled()) {
-                        log.debug("Monitor is running for [cluster] : " + getClusterId());
-                    }
+                            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
 
-                    // store primary members in the cluster instance context
-                    List<String> primaryMemberListInClusterInstance = new ArrayList<String>();
+                            // store primary members in the cluster instance context
+                            List<String> primaryMemberListInClusterInstance = new ArrayList<String>();
 
-                    //FIXME to check the status of the instance
-                    if (true) {
+                            //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());
-
-                        if (log.isDebugEnabled()) {
-                            log.debug(String.format("Running minimum check for cluster instance %s ",
-                                    instanceContext.getId()));
-                        }
-
-                        minCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getMinCheckKnowledgeSession(),
-                                minCheckFactHandle, instanceContext);
 
-                        obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate(
-                                getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, instanceContext);
+                                getMinCheckKnowledgeSession().setGlobal("clusterId", getClusterId());
+                                getMinCheckKnowledgeSession().setGlobal("isPrimary", hasPrimary);
+                                getMinCheckKnowledgeSession().setGlobal("algorithmName",
+                                        instanceContext.getPartitionAlgorithm());
 
-                        //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(String.format("Running minimum check for cluster instance %s ",
+                                            instanceContext.getId()));
+                                }
 
+                                minCheckFactHandle = AutoscalerRuleEvaluator.evaluate(getMinCheckKnowledgeSession(),
+                                        minCheckFactHandle, instanceContext);
 
-                            VMClusterContext vmClusterContext = (VMClusterContext) clusterContext;
+                                obsoleteCheckFactHandle = AutoscalerRuleEvaluator.evaluate(
+                                        getObsoleteCheckKnowledgeSession(), obsoleteCheckFactHandle, instanceContext);
 
-                            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());
+                                //checking the status of the cluster
+                                boolean rifReset = instanceContext.isRifReset();
+                                boolean memoryConsumptionReset = instanceContext.isMemoryConsumptionReset();
+                                boolean loadAverageReset = instanceContext.isLoadAverageReset();
 
-                            if (log.isDebugEnabled()) {
-                                log.debug(String.format("Running scale check for [cluster instance context] %s ",
-                                        instanceContext.getId()));
-                                log.debug(" Primary members : " + primaryMemberListInClusterInstance);
+                                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);
+
+                                    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()));
+                                }
                             }
-
-                            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();
+                    };
+                    monitoringRunnable.run();
+                }
             }
         }
     }


[5/6] stratos git commit: fixing log format issue

Posted by re...@apache.org.
fixing log format issue


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

Branch: refs/heads/master
Commit: ec3fd0fe29517035a04397fba468bdbf012055b2
Parents: 853e149
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 17:44:33 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 17:44:33 2014 +0530

----------------------------------------------------------------------
 .../apache/stratos/autoscaler/client/CloudControllerClient.java   | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/ec3fd0fe/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
index a8e275a..308e276 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/client/CloudControllerClient.java
@@ -173,7 +173,8 @@ public class CloudControllerClient {
                                                       int minMemberCount) throws SpawningException {
         try {
             if (log.isInfoEnabled()) {
-                log.info(String.format("Trying to spawn an instance via cloud controller: [cluster] %s [partition] %s [lb-cluster] %s [network-partition-id] %s",
+                log.info(String.format("Trying to spawn an instance via cloud controller: " +
+                                "[cluster] %s [partition] %s [network-partition-id] %s",
                         clusterId, partition.getId(), networkPartitionId));
             }
 


[2/6] stratos git commit: adding restart support for cluster monitor and app monitor

Posted by re...@apache.org.
adding restart support for cluster monitor and app monitor


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

Branch: refs/heads/master
Commit: 761b88f8940b6b89ade1c926489bab73730ec6ed
Parents: c7c3ec6
Author: reka <rt...@gmail.com>
Authored: Thu Dec 4 16:46:04 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 4 16:48:23 2014 +0530

----------------------------------------------------------------------
 .../context/cluster/ClusterContextFactory.java  |   8 +-
 .../context/cluster/VMClusterContext.java       | 152 +++++++++----------
 .../partition/ClusterLevelPartitionContext.java |   8 +-
 .../partition/GroupLevelPartitionContext.java   |   4 +-
 .../context/partition/PartitionContext.java     |  13 +-
 .../autoscaler/monitor/MonitorFactory.java      |  84 +++++-----
 .../monitor/cluster/VMClusterMonitor.java       |   6 +
 .../monitor/component/ApplicationMonitor.java   |  19 +--
 8 files changed, 140 insertions(+), 154 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
index c92ee73..68ed6a4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/ClusterContextFactory.java
@@ -63,12 +63,8 @@ public class ClusterContextFactory {
             log.debug("Autoscaler policy name: " + autoscalePolicyName);
         }
         DeploymentPolicy deploymentPolicy;
-        ApplicationHolder.acquireReadLock();
-        try {
-            deploymentPolicy = PolicyManager.getInstance().getDeploymentPolicyByApplication(cluster.getAppId());
-        } finally {
-            ApplicationHolder.releaseReadLock();
-        }
+        deploymentPolicy = PolicyManager.getInstance().
+                                getDeploymentPolicyByApplication(cluster.getAppId());
 
         return new VMClusterContext(cluster.getClusterId(), cluster.getServiceName(), autoscalePolicy,
                 deploymentPolicy);

http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/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 9944f94..2505cbe 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
@@ -138,16 +138,18 @@ public class VMClusterContext extends AbstractClusterContext {
                         networkPartition.getPartitionAlgo(), 0);
             } else {
                 //Parent should have the partition specified
-                networkPartitionContext = new ClusterLevelNetworkPartitionContext(clusterInstance.getNetworkPartitionId(),
-                        null, 0);
+                networkPartitionContext = new ClusterLevelNetworkPartitionContext(
+                                                        clusterInstance.getNetworkPartitionId(),
+                                                        null,
+                                                        0);
             }
 
         }
 
         if (clusterInstance.getPartitionId() != null) {
             //Need to add partition Context based on the given one from the parent
-            networkPartitionContext = addPartition(clusterInstance, cluster, networkPartitionContext);
-
+            networkPartitionContext = addPartition(clusterInstance, cluster,
+                                                    networkPartitionContext, null);
         } else {
             networkPartitionContext = parseDeploymentPolicy(clusterInstance, cluster,
                     policy, networkPartitionContext);
@@ -165,7 +167,7 @@ public class VMClusterContext extends AbstractClusterContext {
     }
 
     private ClusterLevelNetworkPartitionContext parseDeploymentPolicy(
-            ClusterInstance instance,
+            ClusterInstance clusterInstance,
             Cluster cluster,
             ChildPolicy childPolicy,
             ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext)
@@ -192,65 +194,25 @@ public class VMClusterContext extends AbstractClusterContext {
             throw new PolicyValidationException(msg);
         }
 
-        for(ChildLevelPartition childLevelPartition : childLevelPartitions) {
-            Partition partition = this.deploymentPolicy.
-                    getApplicationLevelNetworkPartition(clusterLevelNetworkPartitionContext.getId()).
-                    getPartition(childLevelPartition.getPartitionId());
-            CloudControllerClient.getInstance().validatePartition(convertTOCCPartition(partition));
-        }
-
-
+        //Retrieving the ChildLevelNetworkPartition and create NP Context
         ChildLevelNetworkPartition networkPartition;
-        networkPartition = childPolicy.getChildLevelNetworkPartition(instance.getNetworkPartitionId());
-        String networkPartitionId = networkPartition.getId();
-
+        networkPartition = childPolicy.
+                                getChildLevelNetworkPartition(clusterInstance.getNetworkPartitionId());
         if (clusterLevelNetworkPartitionContext == null) {
             clusterLevelNetworkPartitionContext = new ClusterLevelNetworkPartitionContext(
-                    networkPartitionId, networkPartition.getPartitionAlgo(), networkPartition.getMin());
-        }
-        ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.
-                getClusterInstanceContext(instance.getInstanceId());
-        if (clusterInstanceContext == null) {
-            clusterInstanceContext = new ClusterInstanceContext(instance.getInstanceId(),
-                    networkPartition.getPartitionAlgo(),
-                    networkPartition.getChildLevelPartitions(), 2,
-                    networkPartitionId);
-            ApplicationHolder.acquireReadLock();
-            try {
-                Application application = ApplicationHolder.getApplications().
-                        getApplication(cluster.getAppId());
-                ClusterDataHolder dataHolder = application.
-                        getClusterData(AutoscalerUtil.getAliasFromClusterId(clusterId));
-                clusterInstanceContext.setMinMembers(2); //dataHolder.getMinInstances());
-                clusterInstanceContext.setMaxMembers(2); //dataHolder.getMaxInstances());
-            } finally {
-                ApplicationHolder.releaseReadLock();
-            }
+                                                                networkPartition.getId(),
+                                                                networkPartition.getPartitionAlgo(),
+                                                                networkPartition.getMin());
         }
 
-        for (ChildLevelPartition partition : networkPartition.getChildLevelPartitions()) {
-            //FIXME to have correct member expirery time
-            ClusterLevelPartitionContext clusterLevelPartitionContext =
-                    new ClusterLevelPartitionContext(0);
-            clusterLevelPartitionContext.setServiceName(cluster.getServiceName());
-            clusterLevelPartitionContext.setProperties(cluster.getProperties());
-            clusterLevelPartitionContext.setNetworkPartitionId(networkPartition.getId());
-            //add members to partition Context
-            Partition partition1 = this.deploymentPolicy.
-                    getApplicationLevelNetworkPartition(clusterLevelNetworkPartitionContext.getId()).
-                    getPartition(partition.getPartitionId());
-
-            addMembersFromTopology(cluster, partition1, clusterLevelPartitionContext);
-
-            clusterInstanceContext.addPartitionCtxt(clusterLevelPartitionContext);
+        //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",
-                        clusterLevelPartitionContext.getPartitionId()));
+                        childLevelPartition.getPartitionId()));
             }
         }
-
-        clusterLevelNetworkPartitionContext.addClusterInstanceContext(clusterInstanceContext);
-
         if (log.isInfoEnabled()) {
             log.info(String.format("Network partition context has been added: " +
                     "[network partition] %s", clusterLevelNetworkPartitionContext.getId()));
@@ -261,9 +223,10 @@ public class VMClusterContext extends AbstractClusterContext {
     private ClusterLevelNetworkPartitionContext addPartition(
             ClusterInstance clusterInstance,
             Cluster cluster,
-            ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext)
+            ClusterLevelNetworkPartitionContext clusterLevelNetworkPartitionContext,
+            ChildLevelPartition childLevelPartition)
             throws PolicyValidationException, PartitionValidationException {
-
+        //Getting the associated network partition
         ChildLevelNetworkPartition networkPartition = deploymentPolicy.
                 getChildLevelNetworkPartition(clusterInstance.getNetworkPartitionId());
         if (networkPartition == null) {
@@ -273,8 +236,9 @@ public class VMClusterContext extends AbstractClusterContext {
             log.error(msg);
             throw new PolicyValidationException(msg);
         }
-        ChildLevelPartition partition = networkPartition.getChildLevelPartition(clusterInstance.getPartitionId());
-        if (partition == null) {
+
+        //Getting the associated  partition
+        if (clusterInstance.getPartitionId() == null || childLevelPartition == null) {
             String msg =
                     "[Partition] " + clusterInstance.getPartitionId() + " for [networkPartition] " +
                             clusterInstance.getNetworkPartitionId() + "is null " +
@@ -283,41 +247,62 @@ public class VMClusterContext extends AbstractClusterContext {
             throw new PolicyValidationException(msg);
         }
 
-        Partition partition1 = deploymentPolicy.getApplicationLevelNetworkPartition(networkPartition.getId()).
-                getPartition(partition.getPartitionId());
-        CloudControllerClient.getInstance().validatePartition(convertTOCCPartition(partition1));
+        //Creating cluster level network partitionContext, if not exist
         if (clusterLevelNetworkPartitionContext == null) {
             clusterLevelNetworkPartitionContext =
                     new ClusterLevelNetworkPartitionContext(clusterInstance.getNetworkPartitionId()
                             , networkPartition.getPartitionAlgo(), networkPartition.getMin());
         }
-        //FIXME to have correct member expiry time
-        ClusterLevelPartitionContext clusterLevelPartitionContext =
-                new ClusterLevelPartitionContext(0);
-        clusterLevelPartitionContext.setServiceName(cluster.getServiceName());
-        clusterLevelPartitionContext.setProperties(cluster.getProperties());
-        clusterLevelPartitionContext.setNetworkPartitionId(networkPartition.getId());
-        //add members to partition Context
-        addMembersFromTopology(cluster, partition1, clusterLevelPartitionContext);
 
         ClusterInstanceContext clusterInstanceContext = clusterLevelNetworkPartitionContext.
-                getClusterInstanceContext(clusterInstance.getInstanceId());
-        ApplicationHolder.acquireReadLock();
-        try {
-            Application application = ApplicationHolder.getApplications().
-                    getApplication(cluster.getAppId());
-            ClusterDataHolder dataHolder = application.getClusterData(AutoscalerUtil.getAliasFromClusterId(clusterId));
-            clusterInstanceContext.setMinMembers(2); //dataHolder.getMinInstances());
-            clusterInstanceContext.setMaxMembers(2); //dataHolder.getMaxInstances());
-        } finally {
-            ApplicationHolder.releaseReadLock();
-        }
+                                        getClusterInstanceContext(clusterInstance.getInstanceId());
+        int maxInstances = 2;
         if (clusterInstanceContext == null) {
+            int minInstances = 2;
+            ApplicationHolder.acquireReadLock();
+            try {
+                Application application = ApplicationHolder.getApplications().
+                        getApplication(cluster.getAppId());
+                ClusterDataHolder dataHolder = application.getClusterData(AutoscalerUtil.getAliasFromClusterId(clusterId));
+                //TODO minInstances = dataHolder.getMinInstances();
+                //maxInstances = dataHolder.getMaxInstances();
+            } finally {
+                ApplicationHolder.releaseReadLock();
+            }
             clusterInstanceContext = new ClusterInstanceContext(clusterInstance.getInstanceId(),
                     networkPartition.getPartitionAlgo(),
                     networkPartition.getChildLevelPartitions(), networkPartition.getMin(), networkPartition.getId());
         }
+        String partitionId;
+        if(childLevelPartition != null) {
+            //use it own defined partition
+            partitionId = childLevelPartition.getPartitionId();
+            maxInstances = childLevelPartition.getMax();
+        } else {
+            //handling the partition given by the parent
+            partitionId = clusterInstance.getPartitionId();
+        }
+        //Retrieving the actual partition from application
+        Partition appPartition = deploymentPolicy.getApplicationLevelNetworkPartition(networkPartition.getId()).
+                getPartition(partitionId);
+        org.apache.stratos.cloud.controller.stub.domain.Partition partition =
+                convertTOCCPartition(appPartition);
+
+        //Validate the partition
+        CloudControllerClient.getInstance().validatePartition(partition);
+
+        //Creating cluster level partition context
+        ClusterLevelPartitionContext clusterLevelPartitionContext = new ClusterLevelPartitionContext(
+                                                        maxInstances,
+                                                        partition,
+                                                        clusterInstance.getNetworkPartitionId());
+        clusterLevelPartitionContext.setServiceName(cluster.getServiceName());
+        clusterLevelPartitionContext.setProperties(cluster.getProperties());
+
+        //add members to partition Context
+        addMembersFromTopology(cluster, partition, clusterLevelPartitionContext);
 
+        //adding it to the monitors context
         clusterInstanceContext.addPartitionCtxt(clusterLevelPartitionContext);
         clusterLevelNetworkPartitionContext.addClusterInstanceContext(clusterInstanceContext);
 
@@ -330,7 +315,8 @@ public class VMClusterContext extends AbstractClusterContext {
         return clusterLevelNetworkPartitionContext;
     }
 
-    private void addMembersFromTopology(Cluster cluster, Partition partition,
+    private void addMembersFromTopology(Cluster cluster,
+                                        org.apache.stratos.cloud.controller.stub.domain.Partition partition,
                                         ClusterLevelPartitionContext clusterLevelPartitionContext) {
         for (Member member : cluster.getMembers()) {
             String memberId = member.getMemberId();
@@ -339,7 +325,7 @@ public class VMClusterContext extends AbstractClusterContext {
                 memberContext.setClusterId(member.getClusterId());
                 memberContext.setMemberId(memberId);
                 memberContext.setInitTime(member.getInitTime());
-                memberContext.setPartition(convertTOCCPartition(partition));
+                memberContext.setPartition(partition);
                 //FIXME********memberContext.setProperties(convertMemberPropsToMemberContextProps(member.getProperties()));
 
                 if (MemberStatus.Activated.equals(member.getStatus())) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/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 e9c3cff..850a54b 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
@@ -24,13 +24,14 @@ 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.Partition;
 import org.apache.stratos.cloud.controller.stub.domain.MemberContext;
 
 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;
 
 /**
@@ -87,10 +88,9 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
         this.pendingMembers = new ArrayList<MemberContext>();
     }
     
-    public ClusterLevelPartitionContext(ChildLevelPartition childLevelPartition, Partition partition, int max) {
+    public ClusterLevelPartitionContext(int max, Partition partition, String networkPartitionId) {
 
-        super(partition, childLevelPartition, max);
-        this.minimumMemberCount = partition.getPartitionMin();
+        super(max,partition, networkPartitionId);
         this.pendingMembers = new ArrayList<MemberContext>();
         this.activeMembers = new ArrayList<MemberContext>();
         this.terminationPendingMembers = new ArrayList<MemberContext>();

http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
index 8cf5e61..dfb1225 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
@@ -85,8 +85,8 @@ public class GroupLevelPartitionContext extends PartitionContext implements Seri
         pendingInstanceExpiryTime = instanceExpiryTime;
     }
 
-    public GroupLevelPartitionContext(Partition partition, ChildLevelPartition childLevelPartition, int max) {
-        super(partition, childLevelPartition, max);
+    public GroupLevelPartitionContext(int max, Partition partition, String networkPartitionIid ) {
+        super(max, partition, networkPartitionIid);
         this.setPartition(partition);
         this.minimumInstanceCount = partition.getPartitionMin();
         this.partitionId = partition.getId();

http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/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 3a81952..db4f2cb 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
@@ -22,6 +22,7 @@ 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.*;
 /**
@@ -38,7 +39,6 @@ public abstract class PartitionContext implements Serializable{
     protected String partitionId;
     private Partition partition;
     private int max;
-    private ChildLevelPartition childLevelPartition;
     private String networkPartitionId;
     // properties
     private Properties properties;
@@ -48,11 +48,11 @@ public abstract class PartitionContext implements Serializable{
 
     }
 
-    public PartitionContext(Partition partition, ChildLevelPartition childLevelPartition, int max) {
-
+    public PartitionContext(int max, Partition partition, String networkPartitionId) {
         this.partition = partition;
-        this.childLevelPartition = childLevelPartition;
         this.max = max;
+        this.partitionId = partition.getId();
+        this.networkPartitionId = networkPartitionId;
     }
 
     public Partition getPartition() {
@@ -80,11 +80,6 @@ public abstract class PartitionContext implements Serializable{
     }
 
     public abstract int getActiveInstanceCount();
-
-    public ChildLevelPartition getChildLevelPartition() {
-        return childLevelPartition;
-    }
-
     public int getMax() {
         return max;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
index 63e2b4a..addffa4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
@@ -26,6 +26,8 @@ import org.apache.stratos.autoscaler.applications.dependency.context.ClusterChil
 import org.apache.stratos.autoscaler.applications.dependency.context.GroupChildContext;
 import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.context.AutoscalerContext;
+import org.apache.stratos.autoscaler.context.cluster.ClusterContextFactory;
+import org.apache.stratos.autoscaler.context.cluster.VMClusterContext;
 import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
 import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
 import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException;
@@ -39,6 +41,7 @@ import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 import org.apache.stratos.messaging.domain.applications.Application;
 import org.apache.stratos.messaging.domain.applications.Group;
 import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
+import org.apache.stratos.messaging.domain.instance.ClusterInstance;
 import org.apache.stratos.messaging.domain.instance.GroupInstance;
 import org.apache.stratos.messaging.domain.instance.Instance;
 import org.apache.stratos.messaging.domain.topology.Cluster;
@@ -77,32 +80,7 @@ public class MonitorFactory {
         if (context instanceof GroupChildContext) {
             monitor = getGroupMonitor(parentMonitor, context, appId, parentInstanceIds);
         } else if (context instanceof ClusterChildContext) {
-            monitor = getClusterMonitor(parentMonitor, (ClusterChildContext) context);
-            if (monitor != null) {
-                //((AbstractClusterMonitor)monitor).startScheduler();
-                ClusterChildContext clusterChildCtxt = (ClusterChildContext) context;
-                AbstractClusterMonitor clusterMonitor = (AbstractClusterMonitor) monitor;
-                AutoscalerContext.getInstance().
-                        addClusterMonitor((AbstractClusterMonitor) monitor);
-                // FIXME: passing null as alias for cluster instance temporarily. should be removed.
-                for(String parentInstanceId : parentInstanceIds) {
-                    Instance instance = parentMonitor.getInstance(parentInstanceId);
-                    String partitionId = null;
-                    if(instance instanceof GroupInstance) {
-                        partitionId = ((GroupInstance)instance).getPartitionId();
-                    }
-                    if(instance != null) {
-                        createClusterInstance(clusterChildCtxt.getServiceName(),
-                                clusterMonitor.getClusterId(), null,
-                                parentInstanceId, partitionId,
-                                instance.getNetworkPartitionId());
-                    } else {
-
-                    }
-
-                }
-
-            }
+            monitor = getClusterMonitor(parentMonitor, (ClusterChildContext) context, parentInstanceIds);
         } else {
             monitor = getApplicationMonitor(appId);
         }
@@ -270,7 +248,8 @@ public class MonitorFactory {
      * @throws org.apache.stratos.autoscaler.exception.partition.PartitionValidationException
      */
     public static AbstractClusterMonitor getClusterMonitor(ParentComponentMonitor parentMonitor,
-                                                           ClusterChildContext context)
+                                                           ClusterChildContext context,
+                                                           List<String> parentInstanceIds)
             throws PolicyValidationException,
             PartitionValidationException,
             TopologyInConsistentException {
@@ -315,19 +294,48 @@ public class MonitorFactory {
             } else {
                 clusterMonitor.setHasGroupScalingDependent(false);
             }
-            //setting the status of the cluster, if it doesn't match with Topology cluster status.
-            //TODO after adding cluster instances*************
-            /*if (cluster.getStatus(null) != clusterMonitor.getStatus()) {
-                //updating the status, so that it will notify the parent
-                clusterMonitor.setStatus(cluster.getStatus(null));
-            } else {
-                if(!cluster.hasMembers()) {
-                    StatusChecker.getInstance().onMemberStatusChange(clusterId);
+
+            for(String parentInstanceId : parentInstanceIds) {
+                Instance instance = parentMonitor.getInstance(parentInstanceId);
+                String partitionId = null;
+                if(instance instanceof GroupInstance) {
+                    partitionId = ((GroupInstance)instance).getPartitionId();
                 }
-            }*/
-            if (cluster.getInstanceContextCount() > 0) {
-                //Starting the cluster monitor as existing instances are found
+                if(instance != null) {
+                    ClusterInstance clusterInstance = cluster.getInstanceContexts(parentInstanceId);
+                    if(clusterInstance != null) {
+                        if(cluster.isKubernetesCluster()) {
+                            clusterMonitor.setClusterContext(
+                                    ClusterContextFactory.getKubernetesClusterContext(
+                                            clusterInstance.getInstanceId(),
+                                            cluster));
+                        } else {
+                            //Cluster instance is already there. No need to create one.
+                            VMClusterContext clusterContext;
+                            clusterContext = ClusterContextFactory.
+                                    getVMClusterContext(clusterInstance.getInstanceId(),
+                                            cluster);
+                            clusterMonitor.setClusterContext(clusterContext);
+                            //create VMClusterContext and then add all the instanceContexts
+                            clusterContext.addInstanceContext(parentInstanceId, cluster);
+                            if(clusterMonitor.getInstance(clusterInstance.getInstanceId()) == null) {
+                                clusterMonitor.addInstance(clusterInstance);
+                            }
+                        }
+                    } else {
+                        createClusterInstance(cluster.getServiceName(),
+                                clusterId, null,
+                                parentInstanceId, partitionId,
+                                instance.getNetworkPartitionId());
+                    }
+
+                } else {
+
+                }
+                AutoscalerContext.getInstance().addClusterMonitor(clusterMonitor);
+
             }
+
             return clusterMonitor;
 
         } finally {

http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/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 2744361..befe3cd 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
@@ -190,6 +190,9 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
                     getClusterInstanceContextMap().values();
 
             for (final ClusterInstanceContext instanceContext : clusterInstanceContexts ) {
+                /* TODO ***********if  (((getStatus().getCode() <= ClusterStatus.Active.getCode()) ||
+                        (getStatus() == ClusterStatus.Inactive && !hasStartupDependents)) && !this.hasFaultyMember
+                        && !stop) {*/
 
                 Runnable monitoringRunnable = new Runnable() {
                     @Override
@@ -199,6 +202,9 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
                         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>();
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/761b88f8/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 58c1fa0..e49f3bf 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
@@ -180,21 +180,13 @@ public class ApplicationMonitor extends ParentComponentMonitor {
 
     public boolean startMinimumDependencies(Application application)
             throws TopologyInConsistentException, PolicyValidationException {
-        boolean initialStartup = false;
-        //There will be one application instance
-        //FIXME when having multiple network partitions
-        if (application.getInstanceContextCount() > 0) {
-            startDependency(application);
-        } else {
-            //No available instances in the Applications. Need to start them all
-            createInstanceAndStartDependency(application);
-            initialStartup = true;
-        }
-        return initialStartup;
+
+        return createInstanceAndStartDependency(application);
     }
 
-    private void createInstanceAndStartDependency(Application application)
+    private boolean createInstanceAndStartDependency(Application application)
             throws TopologyInConsistentException, PolicyValidationException {
+        boolean initialStartup = true;
         List<String> instanceIds = new ArrayList<String>();
         DeploymentPolicy deploymentPolicy = getDeploymentPolicy(application);
         String instanceId;
@@ -216,9 +208,11 @@ public class ApplicationMonitor extends ParentComponentMonitor {
                     if (appInstance != null) {
                         //use the existing instance in the Topology to create the data
                         instanceId = handleApplicationInstanceCreation(application, context, appInstance);
+                        initialStartup = false;
                     } else {
                         //create new app instance as it doesn't exist in the Topology
                         instanceId = handleApplicationInstanceCreation(application, context, null);
+
                     }
                     instanceIds.add(instanceId);
                     log.info("Application instance has been added for the [network partition] " +
@@ -228,6 +222,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
             }
         }
         startDependency(application, instanceIds);
+        return initialStartup;
     }
 
     private String handleApplicationInstanceCreation(Application application,