You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ud...@apache.org on 2013/12/18 09:11:08 UTC

[1/2] git commit: Adding a abstract moniter to solve cluster moniter problem

Updated Branches:
  refs/heads/master 6d65c70a3 -> 7c2f7b6b6


Adding a abstract moniter to solve cluster moniter problem


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

Branch: refs/heads/master
Commit: 0cabd4f866d0f2757f272531dc781b28015f2879
Parents: 3ce1815
Author: Udara Liyanage <ud...@wso2.com>
Authored: Wed Dec 18 13:39:21 2013 -0500
Committer: Udara Liyanage <ud...@wso2.com>
Committed: Wed Dec 18 13:39:21 2013 -0500

----------------------------------------------------------------------
 .../src/conf/cartridge-config.properties        |  64 -----
 .../stratos/autoscaler/AutoscalerContext.java   |   8 +
 .../stratos/autoscaler/ClusterMonitor.java      | 251 -----------------
 .../stratos/autoscaler/LbClusterMonitor.java    | 226 ----------------
 .../health/HealthEventMessageDelegator.java     |  25 +-
 .../autoscaler/monitor/AbstractMonitor.java     |  44 +++
 .../autoscaler/monitor/ClusterMonitor.java      | 270 +++++++++++++++++++
 .../autoscaler/monitor/LbClusterMonitor.java    | 245 +++++++++++++++++
 .../autoscaler/policy/PolicyManager.java        |   2 +-
 .../topology/AutoscalerTopologyReceiver.java    |   2 +
 .../stratos/autoscaler/util/AutoscalerUtil.java |   3 +
 11 files changed, 590 insertions(+), 550 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0cabd4f8/components/org.apache.stratos.adc.mgt/src/conf/cartridge-config.properties
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.adc.mgt/src/conf/cartridge-config.properties b/components/org.apache.stratos.adc.mgt/src/conf/cartridge-config.properties
deleted file mode 100644
index 2f7c7f9..0000000
--- a/components/org.apache.stratos.adc.mgt/src/conf/cartridge-config.properties
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-#
-
-# Configuration properties
-
-sc.ip=stratos_ip
-autoscalerService.url=https://cc.wso2.com:9444/services/CloudControllerService/
-autoscaler.time.out=190000
-cartridge.agent.epr=https://stratos_ip:9447/services/CartridgeAgentService
-git.host.name=s2_hostname
-git.host.ip=stratos_ip
-git.repo.notification.url=https://sc.wso2.com:9445/services/RepoNotificationService/
-identity.server.url=https://sc.wso2.com:9447/services/RepoNotificationService/
-
-adc.jdbc.url=jdbc:h2:repository/database/WSO2S2_DB
-adc.jdbc.username=wso2carbon
-adc.jdbc.password=wso2carbon
-adc.jdbc.driver=org.h2.Driver
-
-mb.ip=mb.stratos.apache.org
-mb.port=5677
-cep.ip=cep.stratos.apache.org
-cep.port=7615
-
-feature.externalrepo.validation.enabled=true
-feature.internalrepo.enabled=false
-feature.multitenant.multiplesubscription.enabled=false
-
-internal.repo.username=admin
-internal.repo.password=admin
-
-append.script=SCRIPT_PATH/add_entry_zone_file.sh
-remove.script=SCRIPT_PATH/remove_entry_zone_file.sh
-bind.file.path=/etc/bind/db.STRATOS_DOMAIN
-elb.ip=stratos_ip
-
-bam.ip=stratos_ip
-bam.port=7714
-
-max.attempts=1000
-
-cartridge.key=KEYPATH
-
-repository.info.epr=https://stratos_ip:9445/services/RepositoryInformationService
-
-puppet.ip=127.0.0.1

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0cabd4f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
index f574275..fffc8c3 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
@@ -2,6 +2,8 @@ package org.apache.stratos.autoscaler;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.monitor.ClusterMonitor;
+import org.apache.stratos.autoscaler.monitor.LbClusterMonitor;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -37,6 +39,7 @@ public class AutoscalerContext {
     }
 
     public void addMonitor(ClusterMonitor monitor) {
+    	log.info("Adding moniter clusterid" + monitor.getClusterId());
         monitors.put(monitor.getClusterId(), monitor);
     }
 
@@ -44,11 +47,16 @@ public class AutoscalerContext {
         return monitors.get(clusterId);
     }
     
+    public boolean moniterExist(String clusterId) {
+        return monitors.containsKey(clusterId);
+    }
+    
     public LbClusterMonitor getLBMonitor(String clusterId) {
         return lbMonitors.get(clusterId);
     }
 
     public ClusterMonitor removeMonitor(String clusterId) {
+    	log.info("Remove moniter clusterid" + clusterId);
         return monitors.remove(clusterId);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0cabd4f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java
deleted file mode 100644
index 1d65c53..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/ClusterMonitor.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one 
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
- * KIND, either express or implied.  See the License for the 
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.stratos.autoscaler;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
-import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
-import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
-import org.drools.runtime.StatefulKnowledgeSession;
-import org.drools.runtime.rule.FactHandle;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Is responsible for monitoring a service cluster. This runs periodically
- * and perform minimum instance check and scaling check using the underlying
- * rules engine.
- *
- */
-public class ClusterMonitor implements Runnable{
-
-    private static final Log log = LogFactory.getLog(ClusterMonitor.class);
-    private String clusterId;
-
-    private String serviceId;
-
-    //key: network partition id, value: Network partition context
-    private Map<String, NetworkPartitionContext> networkPartitionCtxts;
-
-
-    private StatefulKnowledgeSession minCheckKnowledgeSession;
-    private StatefulKnowledgeSession scaleCheckKnowledgeSession;
-    private boolean isDestroyed;
-
-    private DeploymentPolicy deploymentPolicy;
-    private AutoscalePolicy autoscalePolicy;
-
-        // Key- MemberId Value- partitionId
-    private Map<String, String> memberPartitionMap;
-
-    private FactHandle minCheckFactHandle;
-    private FactHandle scaleCheckFactHandle;
-
-    private AutoscalerRuleEvaluator autoscalerRuleEvaluator;
-    
-    private String lbReferenceType;
-
-    public ClusterMonitor(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy,
-                          AutoscalePolicy autoscalePolicy) {
-        this.clusterId = clusterId;
-        this.serviceId = serviceId;
-
-        this.autoscalerRuleEvaluator = new AutoscalerRuleEvaluator();
-        this.scaleCheckKnowledgeSession = autoscalerRuleEvaluator.getScaleCheckStatefulSession();
-        this.minCheckKnowledgeSession = autoscalerRuleEvaluator.getMinCheckStatefulSession();
-
-        this.deploymentPolicy = deploymentPolicy;
-        this.autoscalePolicy = autoscalePolicy;
-        networkPartitionCtxts = new ConcurrentHashMap<String, NetworkPartitionContext>();
-    }
-
-    public String getClusterId() {
-        return clusterId;
-    }
-
-    public void setClusterId(String clusterId) {
-        this.clusterId = clusterId;
-    }
-
-    public Map<String, NetworkPartitionContext> getNetworkPartitionCtxts() {
-        return networkPartitionCtxts;
-    }
-
-    public NetworkPartitionContext getNetworkPartitionCtxt(String networkPartitionId) {
-        return networkPartitionCtxts.get(networkPartitionId);
-    }
-
-    public void setPartitionCtxt(Map<String, NetworkPartitionContext> partitionCtxt) {
-        this.networkPartitionCtxts = partitionCtxt;
-    }
-
-    public boolean partitionCtxtAvailable(String partitionId) {
-        return networkPartitionCtxts.containsKey(partitionId);
-    }
-
-    public void addNetworkPartitionCtxt(NetworkPartitionContext ctxt) {
-        this.networkPartitionCtxts.put(ctxt.getId(), ctxt);
-    }
-    
-    public NetworkPartitionContext getPartitionCtxt(String id) {
-        return this.networkPartitionCtxts.get(id);
-    }
-
-    public StatefulKnowledgeSession getMinCheckKnowledgeSession() {
-        return minCheckKnowledgeSession;
-    }
-
-    public void setMinCheckKnowledgeSession(StatefulKnowledgeSession minCheckKnowledgeSession) {
-        this.minCheckKnowledgeSession = minCheckKnowledgeSession;
-    }
-
-    public FactHandle getMinCheckFactHandle() {
-        return minCheckFactHandle;
-    }
-
-    public void setMinCheckFactHandle(FactHandle minCheckFactHandle) {
-        this.minCheckFactHandle = minCheckFactHandle;
-    }
-
-    @Override
-    public void run() {
-
-        while (!isDestroyed()) {
-            if (log.isDebugEnabled()) {
-                log.debug("Cluster monitor is running.. "+this.toString());
-            }
-            try {
-                monitor();
-            } catch (Exception e) {
-                log.error("Cluster monitor: Monitor failed."+this.toString(), e);
-            }
-            try {
-                // TODO make this configurable
-                Thread.sleep(30000);
-            } catch (InterruptedException ignore) {
-            }
-        }
-    }
-    
-    private void monitor() {
-//        if(clusterCtxt != null ) {
-            //TODO make this concurrent
-        for (NetworkPartitionContext networkPartitionContext : networkPartitionCtxts.values()) {
-
-            //minimum check per partition
-            for(PartitionContext partitionContext: networkPartitionContext.getPartitionCtxts().values()){
-
-                minCheckKnowledgeSession.setGlobal("clusterId", clusterId);
-                minCheckKnowledgeSession.setGlobal("lbRef", lbReferenceType);
-                
-                if (log.isDebugEnabled()) {
-                    log.debug(String.format("Running minimum check for partition %s ", partitionContext.getPartitionId()));
-                }
-
-                minCheckFactHandle = AutoscalerRuleEvaluator.evaluateMinCheck(minCheckKnowledgeSession
-                        , minCheckFactHandle, partitionContext);
-
-            }
-
-            if(networkPartitionContext.isRifReset()){
-                scaleCheckKnowledgeSession.setGlobal("clusterId", clusterId);
-                scaleCheckKnowledgeSession.setGlobal("deploymentPolicy", deploymentPolicy);
-                scaleCheckKnowledgeSession.setGlobal("autoscalePolicy", autoscalePolicy);
-
-                if (log.isDebugEnabled()) {
-                    log.debug(String.format("Running scale check for network partition %s ", networkPartitionContext.getId()));
-                }
-
-                scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluateScaleCheck(scaleCheckKnowledgeSession
-                        , scaleCheckFactHandle, networkPartitionContext);
-                networkPartitionContext.setRifReset(false);
-            } else if(log.isDebugEnabled()){
-                    log.debug(String.format("Scale will not run since the LB statistics have not received before this " +
-                            "cycle for network partition %s", networkPartitionContext.getId()) );
-            }
-        }
-    }
-
-    
-    public void destroy() {
-        minCheckKnowledgeSession.dispose();
-        scaleCheckKnowledgeSession.dispose();
-        setDestroyed(true);
-        if(log.isDebugEnabled()) {
-            log.debug("Cluster Monitor Drools session has been disposed. "+this.toString());
-        }
-    }
-
-    public boolean isDestroyed() {
-        return isDestroyed;
-    }
-
-    public void setDestroyed(boolean isDestroyed) {
-        this.isDestroyed = isDestroyed;
-    }
-
-    public String getServiceId() {
-        return serviceId;
-    }
-
-    public void setServiceId(String serviceId) {
-        this.serviceId = serviceId;
-    }
-
-    public DeploymentPolicy getDeploymentPolicy() {
-        return deploymentPolicy;
-    }
-
-    public void setDeploymentPolicy(DeploymentPolicy deploymentPolicy) {
-        this.deploymentPolicy = deploymentPolicy;
-    }
-
-    public AutoscalePolicy getAutoscalePolicy() {
-        return autoscalePolicy;
-    }
-
-    @Override
-    public String toString() {
-        return "ClusterMonitor [clusterId=" + clusterId + ", serviceId=" + serviceId +
-               ", deploymentPolicy=" + deploymentPolicy + ", autoscalePolicy=" + autoscalePolicy +
-               ", lbReferenceType=" + lbReferenceType + "]";
-    }
-
-    public void setAutoscalePolicy(AutoscalePolicy autoscalePolicy) {
-        this.autoscalePolicy = autoscalePolicy;
-    }
-
-    public String getPartitonOfMember(String memberId){
-   		return this.memberPartitionMap.get(memberId);
-   	}
-
-   	public boolean memberExist(String memberId){
-   		return this.memberPartitionMap.containsKey(memberId);
-   	}
-
-    public String getLbReferenceType() {
-        return lbReferenceType;
-    }
-
-    public void setLbReferenceType(String lbReferenceType) {
-        this.lbReferenceType = lbReferenceType;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0cabd4f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/LbClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/LbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/LbClusterMonitor.java
deleted file mode 100644
index 020cec3..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/LbClusterMonitor.java
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one 
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
- * KIND, either express or implied.  See the License for the 
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.stratos.autoscaler;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
-import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
-import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
-import org.drools.runtime.StatefulKnowledgeSession;
-import org.drools.runtime.rule.FactHandle;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-/**
- * Is responsible for monitoring a service cluster. This runs periodically
- * and perform minimum instance check and scaling check using the underlying
- * rules engine.
- *
- */
-public class LbClusterMonitor implements Runnable{
-
-    private static final Log log = LogFactory.getLog(LbClusterMonitor.class);
-    private String clusterId;
-    private String serviceId;
-
-    private Map<String, NetworkPartitionContext> networkPartitionCtxts;
-
-    private StatefulKnowledgeSession minCheckKnowledgeSession;
-    private StatefulKnowledgeSession scaleCheckKnowledgeSession;
-    private boolean isDestroyed;
-
-    private DeploymentPolicy deploymentPolicy;
-    private AutoscalePolicy autoscalePolicy;
-
-        // Key- MemberId Value- partitionId
-    private Map<String, String> memberPartitionMap;
-
-    private FactHandle minCheckFactHandle;
-    private FactHandle scaleCheckFactHandle;
-
-    private AutoscalerRuleEvaluator autoscalerRuleEvaluator;
-
-    public LbClusterMonitor(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy,
-                            AutoscalePolicy autoscalePolicy) {
-        this.clusterId = clusterId;
-        this.serviceId = serviceId;
-
-        this.autoscalerRuleEvaluator = new AutoscalerRuleEvaluator();
-        this.scaleCheckKnowledgeSession = autoscalerRuleEvaluator.getScaleCheckStatefulSession();
-        this.minCheckKnowledgeSession = autoscalerRuleEvaluator.getMinCheckStatefulSession();
-
-        this.deploymentPolicy = deploymentPolicy;
-        this.deploymentPolicy = deploymentPolicy;
-        networkPartitionCtxts = new ConcurrentHashMap<String, NetworkPartitionContext>();
-    }
-
-    public String getClusterId() {
-        return clusterId;
-    }
-
-    public void setClusterId(String clusterId) {
-        this.clusterId = clusterId;
-    }
-
-    public Map<String, NetworkPartitionContext> getNetworkPartitionCtxts() {
-        return networkPartitionCtxts;
-    }
-
-    public NetworkPartitionContext getNetworkPartitionCtxt(String networkPartitionId) {
-        return networkPartitionCtxts.get(networkPartitionId);
-    }
-
-    public void setPartitionCtxt(Map<String, NetworkPartitionContext> partitionCtxt) {
-        this.networkPartitionCtxts = partitionCtxt;
-    }
-
-    public boolean partitionCtxtAvailable(String partitionId) {
-        return networkPartitionCtxts.containsKey(partitionId);
-    }
-
-    public void addNetworkPartitionCtxt(NetworkPartitionContext ctxt) {
-        this.networkPartitionCtxts.put(ctxt.getId(), ctxt);
-    }
-    
-    public NetworkPartitionContext getPartitionCtxt(String id) {
-        return this.networkPartitionCtxts.get(id);
-    }
-
-    public StatefulKnowledgeSession getMinCheckKnowledgeSession() {
-        return minCheckKnowledgeSession;
-    }
-
-    public void setMinCheckKnowledgeSession(StatefulKnowledgeSession minCheckKnowledgeSession) {
-        this.minCheckKnowledgeSession = minCheckKnowledgeSession;
-    }
-
-    public FactHandle getMinCheckFactHandle() {
-        return minCheckFactHandle;
-    }
-
-    public void setMinCheckFactHandle(FactHandle minCheckFactHandle) {
-        this.minCheckFactHandle = minCheckFactHandle;
-    }
-
-    @Override
-    public void run() {
-
-        while (!isDestroyed()) {
-            if (log.isDebugEnabled()) {
-                log.debug("Cluster monitor is running.. "+this.toString());
-            }
-            try {
-                monitor();
-            } catch (Exception e) {
-                log.error("Cluster monitor: Monitor failed. "+this.toString(), e);
-            }
-            try {
-                // TODO make this configurable
-                Thread.sleep(30000);
-            } catch (InterruptedException ignore) {
-            }
-        }
-    }
-    
-    private void monitor() {
-        // TODO make this concurrent
-        for (NetworkPartitionContext networkPartitionContext : networkPartitionCtxts.values()) {
-
-            // minimum check per partition
-            for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts()
-                                                                            .values()) {
-
-                if (partitionContext != null) {
-                    minCheckKnowledgeSession.setGlobal("clusterId", clusterId);
-
-                    if (log.isDebugEnabled()) {
-                        log.debug(String.format("Running minimum check for partition %s ",
-                                                partitionContext.getPartitionId()));
-                    }
-
-                    minCheckFactHandle =
-                                         AutoscalerRuleEvaluator.evaluateMinCheck(minCheckKnowledgeSession,
-                                                                                  minCheckFactHandle,
-                                                                                  partitionContext);
-                    // start only in the first partition context
-                    break;
-                }
-
-            }
-
-        }
-    }
-
-    
-    public void destroy() {
-        minCheckKnowledgeSession.dispose();
-        scaleCheckKnowledgeSession.dispose();
-        setDestroyed(true);
-        if(log.isDebugEnabled()) {
-            log.debug("Cluster Monitor Drools session has been disposed. "+this.toString());
-        }
-    }
-
-    public boolean isDestroyed() {
-        return isDestroyed;
-    }
-
-    public void setDestroyed(boolean isDestroyed) {
-        this.isDestroyed = isDestroyed;
-    }
-
-    public String getServiceId() {
-        return serviceId;
-    }
-
-    public void setServiceId(String serviceId) {
-        this.serviceId = serviceId;
-    }
-
-    public DeploymentPolicy getDeploymentPolicy() {
-        return deploymentPolicy;
-    }
-
-    public void setDeploymentPolicy(DeploymentPolicy deploymentPolicy) {
-        this.deploymentPolicy = deploymentPolicy;
-    }
-
-    public AutoscalePolicy getAutoscalePolicy() {
-        return autoscalePolicy;
-    }
-
-    public void setAutoscalePolicy(AutoscalePolicy autoscalePolicy) {
-        this.autoscalePolicy = autoscalePolicy;
-    }
-
-    public String getPartitonOfMember(String memberId){
-   		return this.memberPartitionMap.get(memberId);
-   	}
-
-   	public boolean memberExist(String memberId){
-   		return this.memberPartitionMap.containsKey(memberId);
-   	}
-
-    @Override
-    public String toString() {
-        return "LbClusterMonitor [clusterId=" + clusterId + ", serviceId=" + serviceId + "]";
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0cabd4f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java
index 120defc..d206590 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java
@@ -23,13 +23,14 @@ import com.google.gson.stream.JsonReader;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.AutoscalerContext;
-import org.apache.stratos.autoscaler.ClusterMonitor;
 import org.apache.stratos.autoscaler.Constants;
 import org.apache.stratos.autoscaler.NetworkPartitionContext;
 import org.apache.stratos.autoscaler.PartitionContext;
 import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient;
 import org.apache.stratos.autoscaler.exception.SpawningException;
 import org.apache.stratos.autoscaler.exception.TerminationException;
+import org.apache.stratos.autoscaler.monitor.AbstractMonitor;
+import org.apache.stratos.autoscaler.monitor.ClusterMonitor;
 import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.autoscaler.policy.model.LoadAverage;
 import org.apache.stratos.autoscaler.policy.model.MemoryConsumption;
@@ -273,17 +274,19 @@ public class HealthEventMessageDelegator implements Runnable {
         }
         return null;
     }
-
+    /*
     private NetworkPartitionContext findNetworkPartition(String memberId) {
         for(Service service: TopologyManager.getTopology().getServices()){
             for(Cluster cluster: service.getClusters()){
-                return AutoscalerContext.getInstance().getMonitor(cluster.getClusterId())
+                NetworkPartitionContext netCtx = AutoscalerContext.getInstance().getMonitor(cluster.getClusterId())
                         .getNetworkPartitionCtxt(cluster.getMember(memberId).getNetworkPartitionId());
+                if(null !=netCtx)
+                	return netCtx;
             }
         }
         return null;
     }
-
+    */
 
     private String findNetworkPartitionId(String memberId) {
         for(Service service: TopologyManager.getTopology().getServices()){
@@ -315,8 +318,14 @@ public class HealthEventMessageDelegator implements Runnable {
 
     private void handleMemberFaultEvent(String clusterId, String memberId) {
         try {
-
-            ClusterMonitor monitor = AutoscalerContext.getInstance().getMonitor(clusterId);
+        	AutoscalerContext asCtx = AutoscalerContext.getInstance();
+        	AbstractMonitor monitor = null;
+        	
+        	if(asCtx.moniterExist(clusterId)){
+        		monitor = AutoscalerContext.getInstance().getMonitor(clusterId);
+        	}
+            
+            
             if (!monitor.memberExist(memberId)) {
                 // member has already terminated. So no action required
                 return;
@@ -329,7 +338,7 @@ public class HealthEventMessageDelegator implements Runnable {
             // start a new member in the same Partition
             String partitionId = monitor.getPartitonOfMember(memberId);
             Partition partition = monitor.getDeploymentPolicy().getPartitionById(partitionId);
-            NetworkPartitionContext nwPartitionCtxt = findNetworkPartition(memberId);
+            NetworkPartitionContext nwPartitionCtxt = monitor.findNetworkPartition(memberId);
             PartitionContext partitionCtxt = nwPartitionCtxt.getPartitionCtxt(partitionId);
             
             String lbClusterId = AutoscalerRuleEvaluator.getLbClusterId(partitionCtxt, nwPartitionCtxt);
@@ -337,7 +346,7 @@ public class HealthEventMessageDelegator implements Runnable {
             if (log.isInfoEnabled()) {
                 log.info(String.format("Instance spawned for fault member: [partition] %s [cluster] %s [lb cluster] %s ", 
                                        partitionId, clusterId, lbClusterId));
-            }
+            }                       
 
         } catch (TerminationException e) {
             log.error(e);

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0cabd4f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractMonitor.java
new file mode 100644
index 0000000..b0ac576
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractMonitor.java
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.autoscaler.monitor;
+
+import org.apache.stratos.autoscaler.NetworkPartitionContext;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.cloud.controller.deployment.partition.Partition;
+
+/**
+ * Is responsible for monitoring a service cluster. This runs periodically
+ * and perform minimum instance check and scaling check using the underlying
+ * rules engine.
+ *
+ */
+   abstract public class AbstractMonitor implements Runnable{
+
+	@Override
+	public void run() {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	public abstract String getPartitonOfMember(String memberId);
+	public abstract DeploymentPolicy getDeploymentPolicy();
+	public abstract boolean memberExist(String memberId);
+	public abstract NetworkPartitionContext findNetworkPartition(String memberId);
+	
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0cabd4f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitor.java
new file mode 100644
index 0000000..7afdba7
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ClusterMonitor.java
@@ -0,0 +1,270 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.autoscaler.monitor;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.AutoscalerContext;
+import org.apache.stratos.autoscaler.NetworkPartitionContext;
+import org.apache.stratos.autoscaler.PartitionContext;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
+import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
+import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.FactHandle;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Is responsible for monitoring a service cluster. This runs periodically
+ * and perform minimum instance check and scaling check using the underlying
+ * rules engine.
+ *
+ */
+public class ClusterMonitor extends AbstractMonitor{
+
+    private static final Log log = LogFactory.getLog(ClusterMonitor.class);
+    private String clusterId;
+
+    private String serviceId;
+
+    //key: network partition id, value: Network partition context
+    private Map<String, NetworkPartitionContext> networkPartitionCtxts;
+
+
+    private StatefulKnowledgeSession minCheckKnowledgeSession;
+    private StatefulKnowledgeSession scaleCheckKnowledgeSession;
+    private boolean isDestroyed;
+
+    private DeploymentPolicy deploymentPolicy;
+    private AutoscalePolicy autoscalePolicy;
+
+        // Key- MemberId Value- partitionId
+    private Map<String, String> memberPartitionMap;
+
+    private FactHandle minCheckFactHandle;
+    private FactHandle scaleCheckFactHandle;
+
+    private AutoscalerRuleEvaluator autoscalerRuleEvaluator;
+    
+    private String lbReferenceType;
+
+    public ClusterMonitor(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy,
+                          AutoscalePolicy autoscalePolicy) {
+        this.clusterId = clusterId;
+        this.serviceId = serviceId;
+
+        this.autoscalerRuleEvaluator = new AutoscalerRuleEvaluator();
+        this.scaleCheckKnowledgeSession = autoscalerRuleEvaluator.getScaleCheckStatefulSession();
+        this.minCheckKnowledgeSession = autoscalerRuleEvaluator.getMinCheckStatefulSession();
+
+        this.deploymentPolicy = deploymentPolicy;
+        this.autoscalePolicy = autoscalePolicy;
+        networkPartitionCtxts = new ConcurrentHashMap<String, NetworkPartitionContext>();
+    }
+
+    public String getClusterId() {
+        return clusterId;
+    }
+
+    public void setClusterId(String clusterId) {
+        this.clusterId = clusterId;
+    }
+
+    public Map<String, NetworkPartitionContext> getNetworkPartitionCtxts() {
+        return networkPartitionCtxts;
+    }
+
+    public NetworkPartitionContext getNetworkPartitionCtxt(String networkPartitionId) {
+        return networkPartitionCtxts.get(networkPartitionId);
+    }
+
+    public void setPartitionCtxt(Map<String, NetworkPartitionContext> partitionCtxt) {
+        this.networkPartitionCtxts = partitionCtxt;
+    }
+
+    public boolean partitionCtxtAvailable(String partitionId) {
+        return networkPartitionCtxts.containsKey(partitionId);
+    }
+
+    public void addNetworkPartitionCtxt(NetworkPartitionContext ctxt) {
+        this.networkPartitionCtxts.put(ctxt.getId(), ctxt);
+    }
+    
+    public NetworkPartitionContext getPartitionCtxt(String id) {
+        return this.networkPartitionCtxts.get(id);
+    }
+
+    public StatefulKnowledgeSession getMinCheckKnowledgeSession() {
+        return minCheckKnowledgeSession;
+    }
+
+    public void setMinCheckKnowledgeSession(StatefulKnowledgeSession minCheckKnowledgeSession) {
+        this.minCheckKnowledgeSession = minCheckKnowledgeSession;
+    }
+
+    public FactHandle getMinCheckFactHandle() {
+        return minCheckFactHandle;
+    }
+
+    public void setMinCheckFactHandle(FactHandle minCheckFactHandle) {
+        this.minCheckFactHandle = minCheckFactHandle;
+    }
+
+    @Override
+    public void run() {
+
+        while (!isDestroyed()) {
+            if (log.isDebugEnabled()) {
+                log.debug("Cluster monitor is running.. "+this.toString());
+            }
+            try {
+                monitor();
+            } catch (Exception e) {
+                log.error("Cluster monitor: Monitor failed."+this.toString(), e);
+            }
+            try {
+                // TODO make this configurable
+                Thread.sleep(30000);
+            } catch (InterruptedException ignore) {
+            }
+        }
+    }
+    
+    private void monitor() {
+//        if(clusterCtxt != null ) {
+            //TODO make this concurrent
+        for (NetworkPartitionContext networkPartitionContext : networkPartitionCtxts.values()) {
+
+            //minimum check per partition
+            for(PartitionContext partitionContext: networkPartitionContext.getPartitionCtxts().values()){
+
+                minCheckKnowledgeSession.setGlobal("clusterId", clusterId);
+                minCheckKnowledgeSession.setGlobal("lbRef", lbReferenceType);
+                
+                if (log.isDebugEnabled()) {
+                    log.debug(String.format("Running minimum check for partition %s ", partitionContext.getPartitionId()));
+                }
+
+                minCheckFactHandle = AutoscalerRuleEvaluator.evaluateMinCheck(minCheckKnowledgeSession
+                        , minCheckFactHandle, partitionContext);
+
+            }
+
+            if(networkPartitionContext.isRifReset()){
+                scaleCheckKnowledgeSession.setGlobal("clusterId", clusterId);
+                scaleCheckKnowledgeSession.setGlobal("deploymentPolicy", deploymentPolicy);
+                scaleCheckKnowledgeSession.setGlobal("autoscalePolicy", autoscalePolicy);
+
+                if (log.isDebugEnabled()) {
+                    log.debug(String.format("Running scale check for network partition %s ", networkPartitionContext.getId()));
+                }
+
+                scaleCheckFactHandle = AutoscalerRuleEvaluator.evaluateScaleCheck(scaleCheckKnowledgeSession
+                        , scaleCheckFactHandle, networkPartitionContext);
+                networkPartitionContext.setRifReset(false);
+            } else if(log.isDebugEnabled()){
+                    log.debug(String.format("Scale will not run since the LB statistics have not received before this " +
+                            "cycle for network partition %s", networkPartitionContext.getId()) );
+            }
+        }
+    }
+
+    
+    public void destroy() {
+        minCheckKnowledgeSession.dispose();
+        scaleCheckKnowledgeSession.dispose();
+        setDestroyed(true);
+        if(log.isDebugEnabled()) {
+            log.debug("Cluster Monitor Drools session has been disposed. "+this.toString());
+        }
+    }
+
+    public boolean isDestroyed() {
+        return isDestroyed;
+    }
+
+    public void setDestroyed(boolean isDestroyed) {
+        this.isDestroyed = isDestroyed;
+    }
+
+    public String getServiceId() {
+        return serviceId;
+    }
+
+    public void setServiceId(String serviceId) {
+        this.serviceId = serviceId;
+    }
+
+    public DeploymentPolicy getDeploymentPolicy() {
+        return deploymentPolicy;
+    }
+
+    public void setDeploymentPolicy(DeploymentPolicy deploymentPolicy) {
+        this.deploymentPolicy = deploymentPolicy;
+    }
+
+    public AutoscalePolicy getAutoscalePolicy() {
+        return autoscalePolicy;
+    }
+
+    @Override
+    public String toString() {
+        return "ClusterMonitor [clusterId=" + clusterId + ", serviceId=" + serviceId +
+               ", deploymentPolicy=" + deploymentPolicy + ", autoscalePolicy=" + autoscalePolicy +
+               ", lbReferenceType=" + lbReferenceType + "]";
+    }
+
+    public void setAutoscalePolicy(AutoscalePolicy autoscalePolicy) {
+        this.autoscalePolicy = autoscalePolicy;
+    }
+
+    public String getPartitonOfMember(String memberId){
+   		return this.memberPartitionMap.get(memberId);
+   	}
+
+   	public boolean memberExist(String memberId){
+   		return this.memberPartitionMap.containsKey(memberId);
+   	}
+
+    public String getLbReferenceType() {
+        return lbReferenceType;
+    }
+
+    public void setLbReferenceType(String lbReferenceType) {
+        this.lbReferenceType = lbReferenceType;
+    }
+
+	@Override
+	public NetworkPartitionContext findNetworkPartition(String memberId) {
+		 for(Service service: TopologyManager.getTopology().getServices()){
+	            for(Cluster cluster: service.getClusters()){
+	            	NetworkPartitionContext netCtx = AutoscalerContext.getInstance().getMonitor(cluster.getClusterId())
+	                        .getNetworkPartitionCtxt(cluster.getMember(memberId).getNetworkPartitionId());
+	                if(null !=netCtx)
+	                	return netCtx;
+	            }
+	      }
+	      return null;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0cabd4f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/LbClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/LbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/LbClusterMonitor.java
new file mode 100644
index 0000000..1b24a42
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/LbClusterMonitor.java
@@ -0,0 +1,245 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.autoscaler.monitor;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.AutoscalerContext;
+import org.apache.stratos.autoscaler.NetworkPartitionContext;
+import org.apache.stratos.autoscaler.PartitionContext;
+import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
+import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
+import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
+import org.drools.runtime.StatefulKnowledgeSession;
+import org.drools.runtime.rule.FactHandle;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * Is responsible for monitoring a service cluster. This runs periodically
+ * and perform minimum instance check and scaling check using the underlying
+ * rules engine.
+ *
+ */
+public class LbClusterMonitor extends AbstractMonitor{
+
+    private static final Log log = LogFactory.getLog(LbClusterMonitor.class);
+    private String clusterId;
+    private String serviceId;
+
+    private Map<String, NetworkPartitionContext> networkPartitionCtxts;
+
+    private StatefulKnowledgeSession minCheckKnowledgeSession;
+    private StatefulKnowledgeSession scaleCheckKnowledgeSession;
+    private boolean isDestroyed;
+
+    private DeploymentPolicy deploymentPolicy;
+    private AutoscalePolicy autoscalePolicy;
+
+        // Key- MemberId Value- partitionId
+    private Map<String, String> memberPartitionMap;
+
+    private FactHandle minCheckFactHandle;
+    private FactHandle scaleCheckFactHandle;
+
+    private AutoscalerRuleEvaluator autoscalerRuleEvaluator;
+
+    public LbClusterMonitor(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy,
+                            AutoscalePolicy autoscalePolicy) {
+        this.clusterId = clusterId;
+        this.serviceId = serviceId;
+
+        this.autoscalerRuleEvaluator = new AutoscalerRuleEvaluator();
+        this.scaleCheckKnowledgeSession = autoscalerRuleEvaluator.getScaleCheckStatefulSession();
+        this.minCheckKnowledgeSession = autoscalerRuleEvaluator.getMinCheckStatefulSession();
+
+        this.deploymentPolicy = deploymentPolicy;
+        this.deploymentPolicy = deploymentPolicy;
+        networkPartitionCtxts = new ConcurrentHashMap<String, NetworkPartitionContext>();
+    }
+
+    public String getClusterId() {
+        return clusterId;
+    }
+
+    public void setClusterId(String clusterId) {
+        this.clusterId = clusterId;
+    }
+
+    public Map<String, NetworkPartitionContext> getNetworkPartitionCtxts() {
+        return networkPartitionCtxts;
+    }
+
+    public NetworkPartitionContext getNetworkPartitionCtxt(String networkPartitionId) {
+        return networkPartitionCtxts.get(networkPartitionId);
+    }
+
+    public void setPartitionCtxt(Map<String, NetworkPartitionContext> partitionCtxt) {
+        this.networkPartitionCtxts = partitionCtxt;
+    }
+
+    public boolean partitionCtxtAvailable(String partitionId) {
+        return networkPartitionCtxts.containsKey(partitionId);
+    }
+
+    public void addNetworkPartitionCtxt(NetworkPartitionContext ctxt) {
+        this.networkPartitionCtxts.put(ctxt.getId(), ctxt);
+    }
+    
+    public NetworkPartitionContext getPartitionCtxt(String id) {
+        return this.networkPartitionCtxts.get(id);
+    }
+
+    public StatefulKnowledgeSession getMinCheckKnowledgeSession() {
+        return minCheckKnowledgeSession;
+    }
+
+    public void setMinCheckKnowledgeSession(StatefulKnowledgeSession minCheckKnowledgeSession) {
+        this.minCheckKnowledgeSession = minCheckKnowledgeSession;
+    }
+
+    public FactHandle getMinCheckFactHandle() {
+        return minCheckFactHandle;
+    }
+
+    public void setMinCheckFactHandle(FactHandle minCheckFactHandle) {
+        this.minCheckFactHandle = minCheckFactHandle;
+    }
+
+    @Override
+    public void run() {
+
+        while (!isDestroyed()) {
+            if (log.isDebugEnabled()) {
+                log.debug("Cluster monitor is running.. "+this.toString());
+            }
+            try {
+                monitor();
+            } catch (Exception e) {
+                log.error("Cluster monitor: Monitor failed. "+this.toString(), e);
+            }
+            try {
+                // TODO make this configurable
+                Thread.sleep(30000);
+            } catch (InterruptedException ignore) {
+            }
+        }
+    }
+    
+    private void monitor() {
+        // TODO make this concurrent
+        for (NetworkPartitionContext networkPartitionContext : networkPartitionCtxts.values()) {
+
+            // minimum check per partition
+            for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts()
+                                                                            .values()) {
+
+                if (partitionContext != null) {
+                    minCheckKnowledgeSession.setGlobal("clusterId", clusterId);
+
+                    if (log.isDebugEnabled()) {
+                        log.debug(String.format("Running minimum check for partition %s ",
+                                                partitionContext.getPartitionId()));
+                    }
+
+                    minCheckFactHandle =
+                                         AutoscalerRuleEvaluator.evaluateMinCheck(minCheckKnowledgeSession,
+                                                                                  minCheckFactHandle,
+                                                                                  partitionContext);
+                    // start only in the first partition context
+                    break;
+                }
+
+            }
+
+        }
+    }
+
+    
+    public void destroy() {
+        minCheckKnowledgeSession.dispose();
+        scaleCheckKnowledgeSession.dispose();
+        setDestroyed(true);
+        if(log.isDebugEnabled()) {
+            log.debug("Cluster Monitor Drools session has been disposed. "+this.toString());
+        }
+    }
+
+    public boolean isDestroyed() {
+        return isDestroyed;
+    }
+
+    public void setDestroyed(boolean isDestroyed) {
+        this.isDestroyed = isDestroyed;
+    }
+
+    public String getServiceId() {
+        return serviceId;
+    }
+
+    public void setServiceId(String serviceId) {
+        this.serviceId = serviceId;
+    }
+
+    public DeploymentPolicy getDeploymentPolicy() {
+        return deploymentPolicy;
+    }
+
+    public void setDeploymentPolicy(DeploymentPolicy deploymentPolicy) {
+        this.deploymentPolicy = deploymentPolicy;
+    }
+
+    public AutoscalePolicy getAutoscalePolicy() {
+        return autoscalePolicy;
+    }
+
+    public void setAutoscalePolicy(AutoscalePolicy autoscalePolicy) {
+        this.autoscalePolicy = autoscalePolicy;
+    }
+
+    public String getPartitonOfMember(String memberId){
+   		return this.memberPartitionMap.get(memberId);
+   	}
+
+   	public boolean memberExist(String memberId){
+   		return this.memberPartitionMap.containsKey(memberId);
+   	}
+
+    @Override
+    public String toString() {
+        return "LbClusterMonitor [clusterId=" + clusterId + ", serviceId=" + serviceId + "]";
+    }
+    
+    @Override
+	public NetworkPartitionContext findNetworkPartition(String memberId) {
+		 for(Service service: TopologyManager.getTopology().getServices()){
+	            for(Cluster cluster: service.getClusters()){
+	                NetworkPartitionContext netCtx = AutoscalerContext.getInstance().getLBMonitor(cluster.getClusterId())
+	                        .getNetworkPartitionCtxt(cluster.getMember(memberId).getNetworkPartitionId());
+	                if(null != netCtx)
+	                	return netCtx;
+	            }
+	      }
+	      return null;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0cabd4f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
index 49e7a2c..c939974 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/policy/PolicyManager.java
@@ -111,7 +111,7 @@ public class PolicyManager {
     }
 
     private static void fillPartition(Partition destPartition, Partition srcPartition) {
-        if(srcPartition.getProvider() == null)
+        if(srcPartition.getProvider() == null)        	
             throw new RuntimeException("Provider is not set in the deployed partition");
 
         if (log.isDebugEnabled()) {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0cabd4f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/AutoscalerTopologyReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/AutoscalerTopologyReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/AutoscalerTopologyReceiver.java
index f70e0ac..9372fe0 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/AutoscalerTopologyReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/AutoscalerTopologyReceiver.java
@@ -24,6 +24,8 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.*;
 import org.apache.stratos.autoscaler.exception.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.PolicyValidationException;
+import org.apache.stratos.autoscaler.monitor.ClusterMonitor;
+import org.apache.stratos.autoscaler.monitor.LbClusterMonitor;
 import org.apache.stratos.autoscaler.util.AutoscalerUtil;
 import org.apache.stratos.messaging.domain.topology.Cluster;
 import org.apache.stratos.messaging.domain.topology.Service;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/0cabd4f8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index ed221e0..85aa783 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -27,6 +27,8 @@ import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClie
 import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
 import org.apache.stratos.autoscaler.exception.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.PolicyValidationException;
+import org.apache.stratos.autoscaler.monitor.ClusterMonitor;
+import org.apache.stratos.autoscaler.monitor.LbClusterMonitor;
 import org.apache.stratos.autoscaler.partition.PartitionGroup;
 import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
@@ -41,6 +43,7 @@ import org.apache.stratos.messaging.domain.topology.MemberStatus;
 import org.apache.stratos.messaging.util.Constants;
 
 import javax.xml.namespace.QName;
+
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.Random;


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

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


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

Branch: refs/heads/master
Commit: 7c2f7b6b64fa7b09366ee9bb3c6be245af786b0c
Parents: 0cabd4f 6d65c70
Author: Udara Liyanage <ud...@wso2.com>
Authored: Wed Dec 18 13:40:55 2013 -0500
Committer: Udara Liyanage <ud...@wso2.com>
Committed: Wed Dec 18 13:40:55 2013 -0500

----------------------------------------------------------------------
 .../adc/mgt/client/AutoscalerServiceClient.java |   8 +-
 .../client/CloudControllerServiceClient.java    |   6 +-
 .../stratos/cli/RestCommandLineService.java     | 122 ++++++++-----------
 3 files changed, 58 insertions(+), 78 deletions(-)
----------------------------------------------------------------------