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 2015/05/05 13:13:25 UTC

stratos git commit: code refactoring according to code review and adding descriptive logs

Repository: stratos
Updated Branches:
  refs/heads/master 6b7061d10 -> 5c87d5de2


code refactoring according to code review and adding descriptive logs


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

Branch: refs/heads/master
Commit: 5c87d5de2ad15788f47907d89641c52dd3d21d53
Parents: 6b7061d
Author: reka <rt...@gmail.com>
Authored: Tue May 5 16:42:57 2015 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue May 5 16:43:13 2015 +0530

----------------------------------------------------------------------
 .../applications/topic/ApplicationBuilder.java  |  4 +-
 .../AutoscalerTopologyEventReceiver.java        | 10 +++-
 .../stratos/autoscaler/monitor/Monitor.java     | 13 ++--
 .../monitor/cluster/ClusterMonitor.java         | 10 ++--
 .../monitor/component/ApplicationMonitor.java   |  6 +-
 .../monitor/component/GroupMonitor.java         |  2 +-
 .../component/ParentComponentMonitor.java       | 63 +++++++++-----------
 .../builder/MonitorStatusEventBuilder.java      |  4 +-
 .../rule/AutoscalerRuleEvaluator.java           | 18 ++++--
 9 files changed, 72 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/5c87d5de/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 08d8841..40c198d 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
@@ -289,7 +289,7 @@ public class ApplicationBuilder {
                         applicationMonitor.isTerminating()) {
                     //Stopping the child threads
                     if (applicationMonitor.hasMonitors() && applicationMonitor.isTerminating()) {
-                        for (Monitor monitor1 : applicationMonitor.getAliasToActiveMonitorsMap().values()) {
+                        for (Monitor monitor1 : applicationMonitor.getAliasToActiveChildMonitorsMap().values()) {
                             //destroying the drools
                             monitor1.destroy();
                         }
@@ -405,7 +405,7 @@ public class ApplicationBuilder {
 
                 if (monitor != null) {
                     if (monitor.hasMonitors() && applicationMonitor.isTerminating()) {
-                        for (Monitor monitor1 : monitor.getAliasToActiveMonitorsMap().values()) {
+                        for (Monitor monitor1 : monitor.getAliasToActiveChildMonitorsMap().values()) {
                             //destroying the drools
                             monitor1.destroy();
                         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/5c87d5de/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 4f325bd..d7ec1b4 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
@@ -134,9 +134,13 @@ public class AutoscalerTopologyEventReceiver {
                             //acquire read lock
                             ApplicationHolder.acquireReadLock();
                             //start the application monitor
-                            ApplicationContext applicationContext = AutoscalerContext.getInstance().getApplicationContext(appId);
-                            if (applicationContext != null && applicationContext.getStatus().equals(ApplicationContext.STATUS_DEPLOYED)) {
-                                if (!AutoscalerContext.getInstance().containsApplicationPendingMonitor(appId)) {
+                            ApplicationContext applicationContext = AutoscalerContext.getInstance().
+                                    getApplicationContext(appId);
+                            if (applicationContext != null &&
+                                    applicationContext.getStatus().
+                                            equals(ApplicationContext.STATUS_DEPLOYED)) {
+                                if (!AutoscalerContext.getInstance().
+                                        containsApplicationPendingMonitor(appId)) {
                                     appMonitorCreationTriggered = true;
                                     AutoscalerUtil.getInstance().startApplicationMonitor(appId);
                                     break;

http://git-wip-us.apache.org/repos/asf/stratos/blob/5c87d5de/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
index b5f5997..bc43a4d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
@@ -29,7 +29,7 @@ import java.util.Map;
 /**
  * Abstract class for the monitoring functionality in Autoscaler.
  */
-public abstract class Monitor implements EventHandler {
+public abstract class Monitor implements EventHandler, Runnable {
     //Monitor types
     public enum MonitorType {
         Application, Group, Cluster
@@ -56,6 +56,11 @@ public abstract class Monitor implements EventHandler {
     public abstract void destroy();
 
     /**
+     * This will monitor the network partition context with child notifications
+     */
+    public abstract void monitor();
+
+    /**
      * This will create Instance on demand as requested by monitors
      *
      * @param instanceId instance Id of the instance to be created
@@ -67,7 +72,7 @@ public abstract class Monitor implements EventHandler {
     /**
      * Return the id of the monitor
      *
-     * @return id
+     * @return id identifier of the monitor
      */
     public String getId() {
         return id;
@@ -92,7 +97,7 @@ public abstract class Monitor implements EventHandler {
     /**
      * To get the appId of the monitor
      *
-     * @return app id
+     * @return application id of the monitor
      */
     public String getAppId() {
         return appId;
@@ -129,7 +134,7 @@ public abstract class Monitor implements EventHandler {
     /**
      * Return whether this monitor has startup dependencies
      *
-     * @return hasStartupDependents
+     * @return whether the monitor has startup dependents
      */
     public boolean hasStartupDependents() {
         return hasStartupDependents;

http://git-wip-us.apache.org/repos/asf/stratos/blob/5c87d5de/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
index 88f0829..d000f07 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
@@ -82,7 +82,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
  * and perform minimum instance check and scaling check using the underlying
  * rules engine.
  */
-public class ClusterMonitor extends Monitor implements Runnable {
+public class ClusterMonitor extends Monitor {
 
     private final ScheduledExecutorService scheduler;
     private final ExecutorService executorService;
@@ -123,9 +123,10 @@ public class ClusterMonitor extends Monitor implements Runnable {
         int threadPoolSize = Integer.getInteger(AutoscalerConstants.CLUSTER_MONITOR_THREAD_POOL_SIZE, 50);
         executorService = StratosThreadPool.getExecutorService(
                 AutoscalerConstants.CLUSTER_MONITOR_THREAD_POOL_ID, threadPoolSize);
+        this.clusterId = cluster.getClusterId();
 
         readConfigurations();
-        autoscalerRuleEvaluator = new AutoscalerRuleEvaluator();
+        autoscalerRuleEvaluator = new AutoscalerRuleEvaluator(cluster.getClusterId());
         autoscalerRuleEvaluator.parseAndBuildKnowledgeBaseForDroolsFile(StratosConstants.OBSOLETE_CHECK_DROOL_FILE);
         autoscalerRuleEvaluator.parseAndBuildKnowledgeBaseForDroolsFile(StratosConstants.SCALE_CHECK_DROOL_FILE);
         autoscalerRuleEvaluator.parseAndBuildKnowledgeBaseForDroolsFile(StratosConstants.MIN_CHECK_DROOL_FILE);
@@ -146,7 +147,6 @@ public class ClusterMonitor extends Monitor implements Runnable {
         this.groupScalingEnabledSubtree = groupScalingEnabledSubtree;
         this.setCluster(new Cluster(cluster));
         this.serviceType = cluster.getServiceName();
-        this.clusterId = cluster.getClusterId();
         this.monitoringStarted = new AtomicBoolean(false);
         this.hasScalingDependents = hasScalingDependents;
         this.deploymentPolicyId = deploymentPolicyId;
@@ -619,7 +619,9 @@ public class ClusterMonitor extends Monitor implements Runnable {
         int monitorInterval = conf.getInt(AutoscalerConstants.Cluster_MONITOR_INTERVAL, 90000);
         setMonitorIntervalMilliseconds(monitorInterval);
         if (log.isDebugEnabled()) {
-            log.debug("ClusterMonitor task interval set to : " + getMonitorIntervalMilliseconds());
+            log.debug("ClusterMonitor task interval set to : [application-id] " + appId +
+                    " [cluster] " + clusterId + " [monitor-interval] " +
+                    getMonitorIntervalMilliseconds());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/5c87d5de/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 2a99203..8568b0d 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
@@ -172,7 +172,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
                                             NetworkPartitionContext nwPartitionContext) {
         //Traverse through all the children to see whether all have sent the scale down
         boolean allChildrenScaleDown = false;
-        for (Monitor monitor : this.aliasToActiveMonitorsMap.values()) {
+        for (Monitor monitor : this.aliasToActiveChildMonitorsMap.values()) {
             if (instanceContext.getScalingDownBeyondMinEvent(monitor.getId()) == null) {
                 allChildrenScaleDown = false;
                 break;
@@ -203,7 +203,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
      */
     public Monitor findGroupMonitorWithId(String groupId) {
         //searching within active monitors
-        return findGroupMonitor(groupId, aliasToActiveMonitorsMap);
+        return findGroupMonitor(groupId, aliasToActiveChildMonitorsMap);
     }
 
 
@@ -222,7 +222,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
         for (Monitor monitor : monitors.values()) {
             if (monitor instanceof ParentComponentMonitor) {
                 Monitor groupMonitor = findGroupMonitor(id, ((ParentComponentMonitor) monitor).
-                        getAliasToActiveMonitorsMap());
+                        getAliasToActiveChildMonitorsMap());
                 if (groupMonitor != null) {
                     return groupMonitor;
                 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/5c87d5de/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index ce5dc1e..5892bb6 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -212,7 +212,7 @@ public class GroupMonitor extends ParentComponentMonitor {
                                             boolean forceScaleDown) {
         //Traverse through all the children to see whether all have sent the scale down
         boolean allChildrenScaleDown = false;
-        for (Monitor monitor : this.aliasToActiveMonitorsMap.values()) {
+        for (Monitor monitor : this.aliasToActiveChildMonitorsMap.values()) {
             if (instanceContext.getScalingDownBeyondMinEvent(monitor.getId()) == null) {
                 allChildrenScaleDown = false;
                 break;

http://git-wip-us.apache.org/repos/asf/stratos/blob/5c87d5de/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
index ce3159f..fe3812b 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/ParentComponentMonitor.java
@@ -63,7 +63,7 @@ import java.util.concurrent.*;
  * Monitor is to monitor it's child monitors and
  * control them according to the dependencies respectively.
  */
-public abstract class ParentComponentMonitor extends Monitor implements Runnable {
+public abstract class ParentComponentMonitor extends Monitor {
 
     private static final Log log = LogFactory.getLog(ParentComponentMonitor.class);
 
@@ -77,9 +77,9 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
     //The monitors dependency tree with all the scaling dependencies
     protected Set<ScalingDependentList> scalingDependencies;
     //monitors map, key=GroupAlias/clusterId and value=GroupMonitor/AbstractClusterMonitor
-    protected Map<String, Monitor> aliasToActiveMonitorsMap;
+    protected Map<String, Monitor> aliasToActiveChildMonitorsMap;
     //Pending monitors list
-    protected List<String> pendingMonitorsList;
+    protected List<String> pendingChildMonitorsList;
     //instanceIds map, key=alias, value instanceIds stopped monitors
     protected Map<String, List<String>> inactiveInstancesMap;
     //terminating map, key=alias, value instanceIds
@@ -92,10 +92,10 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
     private int monitoringIntervalMilliseconds = 60000;     //TODO get this from config file
 
     public ParentComponentMonitor(ParentComponent component) throws DependencyBuilderException {
-        aliasToActiveMonitorsMap = new ConcurrentHashMap<String, Monitor>();
+        aliasToActiveChildMonitorsMap = new ConcurrentHashMap<String, Monitor>();
         inactiveInstancesMap = new ConcurrentHashMap<String, List<String>>();
         terminatingInstancesMap = new ConcurrentHashMap<String, List<String>>();
-        pendingMonitorsList = new ArrayList<String>();
+        pendingChildMonitorsList = new ArrayList<String>();
         id = component.getUniqueIdentifier();
 
         // Building the startup dependencies for this monitor within the immediate children
@@ -116,11 +116,6 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
         networkPartitionCtxts = new HashMap<String, NetworkPartitionContext>();
     }
 
-    /**
-     * This will monitor the network partition context with child notifications
-     */
-    public abstract void monitor();
-
     public void startScheduler() {
         schedulerFuture = scheduler.scheduleAtFixedRate(this, 0, monitoringIntervalMilliseconds, TimeUnit.MILLISECONDS);
     }
@@ -183,7 +178,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
             if (log.isDebugEnabled()) {
                 log.debug("Dependency check for the Group " + context.getId() + " started");
             }
-            if (!this.aliasToActiveMonitorsMap.containsKey(context.getId())) {
+            if (!this.aliasToActiveChildMonitorsMap.containsKey(context.getId())) {
                 log.info(String.format("Starting dependent monitor on termination: [application] %s [component] %s",
                         getAppId(), context.getId()));
                 List<String> parentInstanceIds = new ArrayList<String>();
@@ -191,7 +186,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
                 startMonitor(this, context, parentInstanceIds);
             } else {
                 //starting a new instance of the child
-                Monitor monitor = aliasToActiveMonitorsMap.get(context.getId());
+                Monitor monitor = aliasToActiveChildMonitorsMap.get(context.getId());
                 //Creating the new instance
                 monitor.createInstanceOnDemand(instanceId);
             }
@@ -212,7 +207,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
 
         }
         for (ApplicationChildContext context : applicationContexts) {
-            if (!this.aliasToActiveMonitorsMap.containsKey(context.getId())) {
+            if (!this.aliasToActiveChildMonitorsMap.containsKey(context.getId())) {
                 log.info(String.format("Starting dependent monitor: [application] %s [component] %s",
                         getAppId(), context.getId()));
                 startMonitor(this, context, parentInstanceIds);
@@ -220,7 +215,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
                 log.info(String.format("Dependent monitor already created, creating instance: " +
                         "[application] %s [component] %s", getAppId(), context.getId()));
 
-                Monitor monitor = aliasToActiveMonitorsMap.get(context.getId());
+                Monitor monitor = aliasToActiveChildMonitorsMap.get(context.getId());
                 // Creating new instance
                 for (String instanceId : parentInstanceIds) {
                     monitor.createInstanceOnDemand(instanceId);
@@ -313,7 +308,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
             removeInstanceFromFromTerminatingMap(childId, instanceId);
 
             boolean startDep = false;
-            if (!aliasToActiveMonitorsMap.containsKey(childId) || !pendingMonitorsList.contains(childId)) {
+            if (!aliasToActiveChildMonitorsMap.containsKey(childId) || !pendingChildMonitorsList.contains(childId)) {
                 startDep = startDependency(childId, instanceId);
             }
 
@@ -348,7 +343,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
         // has to put the children down to terminating
         if (this.startupDependencyTree.getTerminationBehavior() ==
                 DependencyTree.TerminationBehavior.TERMINATE_ALL &&
-                terminationList.size() == this.aliasToActiveMonitorsMap.size()) {
+                terminationList.size() == this.aliasToActiveChildMonitorsMap.size()) {
             //handling the killall scenario
             if (this.parent != null) {
                 //send terminating to the parent. So that it will push terminating to its children
@@ -370,7 +365,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
         //Checking the termination dependents status
         for (ApplicationChildContext terminationContext : terminationList) {
             //Check whether dependent is in_active, then start to kill it
-            monitor = this.aliasToActiveMonitorsMap.
+            monitor = this.aliasToActiveChildMonitorsMap.
                     get(terminationContext.getId());
             //start to kill it
             if (monitor != null) {
@@ -469,7 +464,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
                         instanceId + "to be terminated...");
                 allDependentTerminated = false;
                 return allDependentTerminated;
-            } else if (this.aliasToActiveMonitorsMap.get(context1.getId()).getInstance(instanceId) != null) {
+            } else if (this.aliasToActiveChildMonitorsMap.get(context1.getId()).getInstance(instanceId) != null) {
                 log.info("[Dependent] " + context1.getId() + "[Instance] " + instanceId +
                         "has not been started to terminate yet. Hence waiting....");
             } else {
@@ -492,7 +487,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
                         + " to be terminated");
                 parentsTerminated = false;
                 return parentsTerminated;
-            } else if (this.aliasToActiveMonitorsMap.get(context1.getId()).getInstance(instanceId) != null) {
+            } else if (this.aliasToActiveChildMonitorsMap.get(context1.getId()).getInstance(instanceId) != null) {
                 log.info("[Dependent Parent] " + context1.getId() + "[Instance] " + instanceId +
                         "has not been started to terminate yet. Hence waiting....");
             } else {
@@ -515,8 +510,8 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
                 log.info("Dependent [Monitor] " + context1.getId()
                         + " is not yet active");
                 return parentsActive;
-            } else if (this.aliasToActiveMonitorsMap.containsKey(context1.getId())) {
-                Monitor monitor = this.aliasToActiveMonitorsMap.get(context1.getId());
+            } else if (this.aliasToActiveChildMonitorsMap.containsKey(context1.getId())) {
+                Monitor monitor = this.aliasToActiveChildMonitorsMap.get(context1.getId());
 
                 if (monitor instanceof GroupMonitor) {
                     try {
@@ -641,7 +636,7 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
                             contains(highestScalingEventOfChild.getId())) {
                         for (String scalingDependentListComponent : scalingDependentList
                                 .getScalingDependentListComponents()) {
-                            Monitor monitor = aliasToActiveMonitorsMap.get(
+                            Monitor monitor = aliasToActiveChildMonitorsMap.get(
                                     scalingDependentListComponent);
                             if (monitor instanceof GroupMonitor ||
                                     monitor instanceof ClusterMonitor) {
@@ -715,8 +710,8 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
 
     protected synchronized void startMonitor(ParentComponentMonitor parent,
                                              ApplicationChildContext context, List<String> parentInstanceIds) {
-        if (!this.aliasToActiveMonitorsMap.containsKey(context.getId())) {
-            pendingMonitorsList.add(context.getId());
+        if (!this.aliasToActiveChildMonitorsMap.containsKey(context.getId())) {
+            pendingChildMonitorsList.add(context.getId());
             executorService.submit(new MonitorAdder(parent, context, this.appId, parentInstanceIds));
 
             String monitorTypeStr = AutoscalerUtil.findMonitorType(context).toString().toLowerCase();
@@ -725,34 +720,34 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
         }
     }
 
-    public Map<String, Monitor> getAliasToActiveMonitorsMap() {
-        return aliasToActiveMonitorsMap;
+    public Map<String, Monitor> getAliasToActiveChildMonitorsMap() {
+        return aliasToActiveChildMonitorsMap;
     }
 
-    public void setAliasToActiveMonitorsMap(Map<String, Monitor> aliasToActiveMonitorsMap) {
-        this.aliasToActiveMonitorsMap = aliasToActiveMonitorsMap;
+    public void setAliasToActiveChildMonitorsMap(Map<String, Monitor> aliasToActiveChildMonitorsMap) {
+        this.aliasToActiveChildMonitorsMap = aliasToActiveChildMonitorsMap;
     }
 
     public boolean hasActiveMonitors() {
         boolean hasMonitor = false;
-        if ((this.aliasToActiveMonitorsMap != null && !this.aliasToActiveMonitorsMap.isEmpty())) {
+        if ((this.aliasToActiveChildMonitorsMap != null && !this.aliasToActiveChildMonitorsMap.isEmpty())) {
             hasMonitor = true;
         }
         return hasMonitor;
     }
 
     public Monitor getMonitor(String childId) {
-        return this.aliasToActiveMonitorsMap.get(childId);
+        return this.aliasToActiveChildMonitorsMap.get(childId);
     }
 
     public boolean hasMonitors() {
 
-        return this.aliasToActiveMonitorsMap != null;
+        return this.aliasToActiveChildMonitorsMap != null;
     }
 
     public boolean hasIndependentChild() {
         boolean hasInDepChild = false;
-        for (Monitor monitor : this.aliasToActiveMonitorsMap.values()) {
+        for (Monitor monitor : this.aliasToActiveChildMonitorsMap.values()) {
             if (!monitor.hasStartupDependents()) {
                 hasInDepChild = true;
                 break;
@@ -875,8 +870,8 @@ public abstract class ParentComponentMonitor extends Monitor implements Runnable
                     throw new RuntimeException(msg);
                 }
 
-                aliasToActiveMonitorsMap.put(context.getId(), monitor);
-                pendingMonitorsList.remove(context.getId());
+                aliasToActiveChildMonitorsMap.put(context.getId(), monitor);
+                pendingChildMonitorsList.remove(context.getId());
 
                 if (log.isInfoEnabled()) {
                     long startupTime = (endTime - startTime) / 1000;

http://git-wip-us.apache.org/repos/asf/stratos/blob/5c87d5de/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java
index 19d6840..abe1c57 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/builder/MonitorStatusEventBuilder.java
@@ -88,7 +88,7 @@ public class MonitorStatusEventBuilder {
 
     public static void notifyChildren(ParentComponentMonitor componentMonitor, MonitorStatusEvent statusEvent)
             throws MonitorNotFoundException {
-        for (Monitor activeChildMonitor : componentMonitor.getAliasToActiveMonitorsMap().values()) {
+        for (Monitor activeChildMonitor : componentMonitor.getAliasToActiveChildMonitorsMap().values()) {
             activeChildMonitor.onParentStatusEvent(statusEvent);
         }
     }
@@ -129,7 +129,7 @@ public class MonitorStatusEventBuilder {
     }
 
     public static void notifyChildren(ParentComponentMonitor componentMonitor, ScalingEvent scalingEvent) {
-        for (Monitor activeChildMonitor : componentMonitor.getAliasToActiveMonitorsMap().values()) {
+        for (Monitor activeChildMonitor : componentMonitor.getAliasToActiveChildMonitorsMap().values()) {
             activeChildMonitor.onParentScalingEvent(scalingEvent);
         }
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/5c87d5de/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
index 2ba6ee9..c51e2ea 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/AutoscalerRuleEvaluator.java
@@ -44,16 +44,24 @@ public class AutoscalerRuleEvaluator {
     private static final Log log = LogFactory.getLog(AutoscalerRuleEvaluator.class);
 
     private static Map<String, KnowledgeBase> knowledgeBases;
+    private String clusterId;
 
-    public AutoscalerRuleEvaluator() {
+    public AutoscalerRuleEvaluator(String clusterId) {
         knowledgeBases = new HashMap<String, KnowledgeBase>();
+        this.clusterId = clusterId;
     }
 
     public void parseAndBuildKnowledgeBaseForDroolsFile(String drlFileName) {
-        knowledgeBases.put(drlFileName, readKnowledgeBase(drlFileName));
-
-        if (log.isDebugEnabled()) {
-            log.debug("Drools file is parsed successfully: " + drlFileName);
+        KnowledgeBase knowledgeBase = readKnowledgeBase(drlFileName);
+        if(knowledgeBase == null) {
+            log.error("Knowledge base couldn't be read for [cluster] " + clusterId +
+                    " [drool-file] " + drlFileName);
+        } else {
+            knowledgeBases.put(drlFileName, knowledgeBase);
+            if (log.isDebugEnabled()) {
+                log.debug("Drools file is parsed successfully: [cluster] " + clusterId +
+                        " [ file-name] " + drlFileName);
+            }
         }
     }