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/02 18:59:00 UTC

[1/3] stratos git commit: udpating setStatus with instance id in cluster monitor

Repository: stratos
Updated Branches:
  refs/heads/master ea721512a -> 03480a455


udpating setStatus with instance id in cluster monitor


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

Branch: refs/heads/master
Commit: 03480a4555585c971bd14fa4c78840265351cd54
Parents: 0c5d4ca
Author: reka <rt...@gmail.com>
Authored: Tue Dec 2 23:28:02 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Dec 2 23:28:17 2014 +0530

----------------------------------------------------------------------
 .../topology/AutoscalerTopologyEventReceiver.java      | 13 ++++++++-----
 .../monitor/component/ParentComponentMonitor.java      |  7 ++++++-
 2 files changed, 14 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/03480a45/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 f54654b..8e25408 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
@@ -229,6 +229,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                 log.info("[ClusterCreatedEvent] Received: " + event.getClass());
                 ClusterResetEvent clusterResetEvent = (ClusterResetEvent) event;
                 String clusterId = clusterResetEvent.getClusterId();
+                String instanceId = clusterResetEvent.getInstanceId();
                 AutoscalerContext asCtx = AutoscalerContext.getInstance();
                 AbstractClusterMonitor monitor;
                 monitor = asCtx.getClusterMonitor(clusterId);
@@ -241,7 +242,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                 }
                 //changing the status in the monitor, will notify its parent monitor
                 monitor.destroy();
-                monitor.setStatus(ClusterStatus.Created);
+                monitor.setStatus(ClusterStatus.Created, instanceId);
 
             }
         });
@@ -259,6 +260,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                 log.info("[ClusterInActivateEvent] Received: " + event.getClass());
                 ClusterInactivateEvent clusterInactivateEvent = (ClusterInactivateEvent) event;
                 String clusterId = clusterInactivateEvent.getClusterId();
+                String instanceId = clusterInactivateEvent.getInstanceId();
                 AutoscalerContext asCtx = AutoscalerContext.getInstance();
                 AbstractClusterMonitor monitor;
                 monitor = asCtx.getClusterMonitor(clusterId);
@@ -270,7 +272,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                     return;
                 }
                 //changing the status in the monitor, will notify its parent monitor
-                monitor.setStatus(ClusterStatus.Inactive);
+                monitor.setStatus(ClusterStatus.Inactive, instanceId);
             }
         });
 
@@ -297,10 +299,10 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                 //changing the status in the monitor, will notify its parent monitor
                 if (monitor.getStatus() == ClusterStatus.Active) {
                     // terminated gracefully
-                    monitor.setStatus(ClusterStatus.Terminating);
+                    monitor.setStatus(ClusterStatus.Terminating, instanceId);
                     InstanceNotificationPublisher.sendInstanceCleanupEventForCluster(clusterId);
                 } else {
-                    monitor.setStatus(ClusterStatus.Terminating);
+                    monitor.setStatus(ClusterStatus.Terminating, instanceId);
                     monitor.terminateAllMembers();
                 }
                 ServiceReferenceHolder.getInstance().getClusterStatusProcessorChain().
@@ -314,6 +316,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                 log.info("[ClusterTerminatedEvent] Received: " + event.getClass());
                 ClusterTerminatedEvent clusterTerminatedEvent = (ClusterTerminatedEvent) event;
                 String clusterId = clusterTerminatedEvent.getClusterId();
+                String instanceId = clusterTerminatedEvent.getInstanceId();
                 AutoscalerContext asCtx = AutoscalerContext.getInstance();
                 AbstractClusterMonitor monitor;
                 monitor = asCtx.getClusterMonitor(clusterId);
@@ -330,7 +333,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                     return;
                 }
                 //changing the status in the monitor, will notify its parent monitor
-                monitor.setStatus(ClusterStatus.Terminated);
+                monitor.setStatus(ClusterStatus.Terminated, instanceId);
                 //Destroying and Removing the Cluster monitor
                 monitor.destroy();
                 AutoscalerContext.getInstance().removeClusterMonitor(clusterId);

http://git-wip-us.apache.org/repos/asf/stratos/blob/03480a45/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 01c1787..0ea9462 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
@@ -64,6 +64,8 @@ public abstract class ParentComponentMonitor extends Monitor {
     protected DependencyTree scalingDependencyTree;
     //monitors map, key=GroupAlias/clusterId and value=GroupMonitor/AbstractClusterMonitor
     protected Map<String, Monitor> aliasToActiveMonitorsMap;
+    //Pending monitors list
+    protected List<String> pendingMonitorsList;
     //instanceIds map, stopped monitors
     protected List<String> inactiveMonitorsList;
     //terminating instances list
@@ -73,6 +75,7 @@ public abstract class ParentComponentMonitor extends Monitor {
         aliasToActiveMonitorsMap = new HashMap<String, Monitor>();
         inactiveMonitorsList = new ArrayList<String>();
         terminatingMonitorsList = new ArrayList<String>();
+        pendingMonitorsList = new ArrayList<String>();
         //clusterIdToClusterMonitorsMap = new HashMap<String, AbstractClusterMonitor>();
         this.id = component.getUniqueIdentifier();
         //Building the startup dependencies for this monitor within the immediate children
@@ -258,7 +261,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             }
 
             boolean startDep;
-            if(!aliasToActiveMonitorsMap.containsKey(eventId)) {
+            if(!aliasToActiveMonitorsMap.containsKey(eventId) || !pendingMonitorsList.contains(eventId)) {
                startDep = startDependency(eventId, instanceId);
             } else {
                 startDep = startDependencyByInstanceCreation(eventId, instanceId);
@@ -498,6 +501,7 @@ public abstract class ParentComponentMonitor extends Monitor {
                                              ApplicationChildContext context, List<String> instanceId) {
         Thread th = null;
         if (!this.aliasToActiveMonitorsMap.containsKey(context.getId())) {
+            pendingMonitorsList.add(context.getId());
             th = new Thread(
                     new MonitorAdder(parent, context, this.appId, instanceId));
             if (log.isDebugEnabled()) {
@@ -643,6 +647,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             }
 
             aliasToActiveMonitorsMap.put(context.getId(), monitor);
+            pendingMonitorsList.remove(context.getId());
             // ApplicationBuilder.
             if (log.isInfoEnabled()) {
                 log.info(String.format("Monitor has been added successfully for: %s",


[3/3] stratos git commit: fixing onactive action based on instances

Posted by re...@apache.org.
fixing onactive action based on instances


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

Branch: refs/heads/master
Commit: a8ed191f91b198319cd2baa90f3e8919ce52607c
Parents: ea72151
Author: reka <rt...@gmail.com>
Authored: Tue Dec 2 22:01:39 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Dec 2 23:28:17 2014 +0530

----------------------------------------------------------------------
 .../context/cluster/AbstractClusterContext.java | 22 +++++++
 .../context/cluster/VMClusterContext.java       |  1 +
 .../monitor/cluster/AbstractClusterMonitor.java |  7 ++-
 .../monitor/component/ApplicationMonitor.java   | 38 +++++++++++--
 .../monitor/component/GroupMonitor.java         | 60 ++++++++++++++------
 .../component/ParentComponentMonitor.java       | 41 +++++++++----
 6 files changed, 135 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/a8ed191f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/AbstractClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/AbstractClusterContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/AbstractClusterContext.java
index a2e0472..69f87a2 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/AbstractClusterContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/cluster/AbstractClusterContext.java
@@ -23,8 +23,11 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.stub.domain.MemberContext;
 import org.apache.stratos.common.constants.StratosConstants;
+import org.apache.stratos.messaging.domain.instance.ClusterInstance;
 
 import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
 
 /*
  * It holds the runtime data of a service cluster
@@ -37,13 +40,32 @@ public class AbstractClusterContext implements Serializable {
     // cluster id
     protected String clusterId;
     private String serviceId;
+    protected Map<String, ClusterInstance> clusterInstanceMap;
+
 
     public AbstractClusterContext(String clusterId, String serviceId){
         this.clusterId = clusterId;
         this.serviceId = serviceId;
+        clusterInstanceMap = new HashMap<String, ClusterInstance>();
     }
 
     public String getServiceId() {
         return serviceId;
     }
+
+    public Map<String, ClusterInstance> getClusterInstanceMap() {
+        return clusterInstanceMap;
+    }
+
+    public void setClusterInstanceMap(Map<String, ClusterInstance> clusterInstanceMap) {
+        this.clusterInstanceMap = clusterInstanceMap;
+    }
+
+    public void addClusterInstance(ClusterInstance instance) {
+        this.clusterInstanceMap.put(instance.getInstanceId(), instance);
+    }
+
+    public ClusterInstance getClusterInstance(String instanceId) {
+        return this.clusterInstanceMap.get(instanceId);
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a8ed191f/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 3de6306..065902e 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
@@ -54,6 +54,7 @@ public class VMClusterContext extends AbstractClusterContext {
 
     // Map<NetworkpartitionId, Network Partition Context>
     protected Map<String, ClusterLevelNetworkPartitionContext> networkPartitionCtxts;
+
     protected DeploymentPolicy deploymentPolicy;
     protected AutoscalePolicy autoscalePolicy;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/a8ed191f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
index 756079e..3afda6f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
@@ -34,6 +34,7 @@ import org.apache.stratos.messaging.domain.applications.Application;
 import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
 import org.apache.stratos.messaging.domain.applications.Group;
 import org.apache.stratos.messaging.domain.applications.GroupStatus;
+import org.apache.stratos.messaging.domain.instance.ClusterInstance;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.event.health.stat.*;
 import org.apache.stratos.messaging.event.topology.*;
@@ -212,7 +213,9 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable
         return status;
     }
 
-    public void setStatus(ClusterStatus status) {
+    public void setStatus(ClusterStatus status, String instanceId) {
+
+        this.clusterContext.getClusterInstance(instanceId).setStatus(status);
         /**
          * notifying the parent monitor about the state change
          * If the cluster in_active and if it is a in_dependent cluster,
@@ -415,4 +418,6 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable
     public void setClusterContext(AbstractClusterContext clusterContext) {
         this.clusterContext = clusterContext;
     }
+
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a8ed191f/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 0e5f751..990d482 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
@@ -39,6 +39,7 @@ import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.Ap
 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.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
 
@@ -52,6 +53,9 @@ public class ApplicationMonitor extends ParentComponentMonitor {
 
     //network partition contexts
     private Map<String, ApplicationLevelNetworkPartitionContext> networkPartitionCtxts;
+    //application instance id map
+    private Map<String, ApplicationInstance> applicationInstanceIdMap;
+
 
     public ApplicationMonitor(Application application) throws DependencyBuilderException,
             TopologyInConsistentException {
@@ -59,10 +63,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
         //setting the appId for the application
         this.appId = application.getUniqueIdentifier();
         networkPartitionCtxts = new HashMap<String, ApplicationLevelNetworkPartitionContext>();
-
-        //starting the first set of dependencies from its children
-        //TODO startMinimumDependencies(application);
-
+        setApplicationInstanceIdMap(new HashMap<String, ApplicationInstance>());
     }
 
     /**
@@ -72,7 +73,6 @@ public class ApplicationMonitor extends ParentComponentMonitor {
      * @return the found GroupMonitor
      */
     public Monitor findGroupMonitorWithId(String groupId) {
-        Monitor monitor;
         //searching within active monitors
         return findGroupMonitor(groupId, aliasToActiveMonitorsMap.values());
     }
@@ -107,6 +107,8 @@ public class ApplicationMonitor extends ParentComponentMonitor {
      * @param status the status
      */
     public void setStatus(ApplicationStatus status, String instanceId) {
+        this.applicationInstanceIdMap.get(instanceId).setStatus(status);
+
         //notify the children about the state change
         try {
             MonitorStatusEventBuilder.notifyChildren(this, new ApplicationStatusEvent(status, appId, instanceId));
@@ -216,6 +218,10 @@ public class ApplicationMonitor extends ParentComponentMonitor {
                     ApplicationInstanceContext instanceContext = new ApplicationInstanceContext(instanceId);
                     context.addInstanceContext(instanceContext);
 
+                    ApplicationInstance instance = new ApplicationInstance(appId, instanceId);
+                    instance.setStatus(ApplicationStatus.Created);
+                    this.applicationInstanceIdMap.put(instanceId, instance);
+
                     this.networkPartitionCtxts.put(context.getId(), context);
 
                     instanceIds.add(instanceId);
@@ -257,6 +263,11 @@ public class ApplicationMonitor extends ParentComponentMonitor {
                         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.applicationInstanceIdMap.put(instanceId, instance);
+
                         burstNPFound = true;
                     }
                 }
@@ -306,4 +317,21 @@ public class ApplicationMonitor extends ParentComponentMonitor {
     public void addApplicationLevelNetworkPartitionContext(ApplicationLevelNetworkPartitionContext applicationLevelNetworkPartitionContext) {
         this.networkPartitionCtxts.put(applicationLevelNetworkPartitionContext.getId(), applicationLevelNetworkPartitionContext);
     }
+
+    public Map<String, ApplicationInstance> getApplicationInstanceIdMap() {
+        return applicationInstanceIdMap;
+    }
+
+    public void setApplicationInstanceIdMap(Map<String, ApplicationInstance> applicationInstanceIdMap) {
+        this.applicationInstanceIdMap = applicationInstanceIdMap;
+    }
+
+    public void addApplicationInstance(ApplicationInstance instance) {
+        this.applicationInstanceIdMap.put(instance.getInstanceId(), instance);
+
+    }
+
+    public ApplicationInstance getApplicationInstance(String instanceId) {
+        return this.applicationInstanceIdMap.get(instanceId);
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a8ed191f/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 9ec04d7..b2b6697 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
@@ -40,10 +40,12 @@ import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.ChildPolicy;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.DeploymentPolicy;
 import org.apache.stratos.autoscaler.pojo.policy.deployment.partition.network.ChildLevelNetworkPartition;
+import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 import org.apache.stratos.messaging.domain.applications.Application;
 import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
 import org.apache.stratos.messaging.domain.applications.Group;
 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.instance.Instance;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
@@ -71,6 +73,8 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
     //network partition contexts
     private Map<String, GroupLevelNetworkPartitionContext> networkPartitionCtxts;
 
+    private Map<String, GroupInstance> groupInstanceIdMap;
+
     private boolean isDestroyed;
 
     /**
@@ -85,9 +89,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
         super(group);
         this.appId = appId;
         networkPartitionCtxts = new HashMap<String, GroupLevelNetworkPartitionContext>();
-
-        //starting the minimum start able dependencies
-        //startMinimumDependencies(group, parentInstanceId);
+        setGroupInstanceIdMap(new HashMap<String, GroupInstance>());
     }
 
     @Override
@@ -131,6 +133,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
      * @param status status of the group
      */
     public void setStatus(GroupStatus status, String instanceId) {
+        this.groupInstanceIdMap.get(instanceId).setStatus(status);
 
         if (status == GroupStatus.Inactive && !this.hasStartupDependents) {
             log.info("[Group] " + this.id + "is not notifying the parent, " +
@@ -192,14 +195,6 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
                     AutoscalerContext.getInstance().removeClusterMonitor(id);
                 }
             }
-            //If cluster monitor, need to terminate the existing one
-            //TODO block
-            /*if (this.status == GroupStatus.Terminating) {
-                StatusChecker.getInstance().onChildStatusChange(id, this.id, this.appId);
-            } else {
-                onChildTerminatedEvent(id);
-            }*/
-
         } else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) {
             //mark the child monitor as inActive in the map
             this.markMonitorAsTerminating(id);
@@ -212,11 +207,24 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
             } else {
                 log.warn("[monitor] " + id + " cannot be found in the inActive monitors list");
             }
-            //TODO block
-            /*if (this.status == GroupStatus.Terminating || this.status == GroupStatus.Terminated) {
-                StatusChecker.getInstance().onChildStatusChange(id, this.id, this.appId);
-                log.info("Executing the un-subscription request for the [monitor] " + id);
-            }*/
+            //If cluster monitor, need to terminate the existing one
+            ApplicationHolder.releaseReadLock();
+            GroupStatus instanceStatus;
+            try {
+                Group group = ApplicationHolder.getApplications().
+                        getApplication(appId).getGroupRecursively(this.id);
+                instanceStatus = group.getInstanceContexts(instanceId).getStatus();
+
+            } finally {
+                ApplicationHolder.releaseReadLock();
+            }
+
+            if (instanceStatus == GroupStatus.Terminating) {
+                ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
+                        appId, instanceId);
+            } else {
+                onChildTerminatedEvent(id, instanceId);
+            }
         }
     }
 
@@ -258,7 +266,8 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
 
         //Notifying children, if this group has scaling dependencies
         if (currentChildContextInScalingTree.isGroupScalingEnabled()) {
-            for (ApplicationChildContext applicationChildContext : currentChildContextInScalingTree.getApplicationChildContextList()) {
+            for (ApplicationChildContext applicationChildContext :
+                    currentChildContextInScalingTree.getApplicationChildContextList()) {
 
                 //Get group monitor so that it can notify it's children
                 Monitor monitor = aliasToActiveMonitorsMap.get(applicationChildContext.getId());
@@ -480,4 +489,21 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
     public void setDestroyed(boolean isDestroyed) {
         this.isDestroyed = isDestroyed;
     }
+
+    public Map<String, GroupInstance> getGroupInstanceIdMap() {
+        return groupInstanceIdMap;
+    }
+
+    public void setGroupInstanceIdMap(Map<String, GroupInstance> groupInstanceIdMap) {
+        this.groupInstanceIdMap = groupInstanceIdMap;
+    }
+
+    public void addGroupInstance(GroupInstance instance) {
+        this.groupInstanceIdMap.put(instance.getInstanceId(), instance);
+
+    }
+
+    public GroupInstance getGroupInstance(String instanceId) {
+        return this.groupInstanceIdMap.get(instanceId);
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/a8ed191f/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 56e2a63..f48461f 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,9 +63,9 @@ public abstract class ParentComponentMonitor extends Monitor {
     protected DependencyTree scalingDependencyTree;
     //monitors map, key=GroupAlias/clusterId and value=GroupMonitor/AbstractClusterMonitor
     protected Map<String, Monitor> aliasToActiveMonitorsMap;
-    //monitors map, stopped monitors
+    //instanceIds map, stopped monitors
     protected List<String> inactiveMonitorsList;
-    //terminating monitors list
+    //terminating instances list
     protected List<String> terminatingMonitorsList;
 
     public ParentComponentMonitor(ParentComponent component) throws DependencyBuilderException {
@@ -109,6 +109,18 @@ public abstract class ParentComponentMonitor extends Monitor {
      * This will start the parallel dependencies at once from the top level.
      * it will get invoked when the monitor starts up only.
      */
+    public boolean startDependencyByInstanceCreation(String childId, String instanceId) throws
+            ParentMonitorNotFoundException {
+        //start the first dependency
+        List<ApplicationChildContext> applicationContexts =
+                this.startupDependencyTree.getStarAbleDependencies(childId);
+        return startDependency(applicationContexts, instanceId);
+    }
+
+    /**
+     * This will start the parallel dependencies at once from the top level.
+     * it will get invoked when the monitor starts up only.
+     */
     public void startDependency(ParentComponent component) {
         //start the first dependency
         List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
@@ -132,7 +144,8 @@ public abstract class ParentComponentMonitor extends Monitor {
                 .getStarAbleDependencies(id);
         List<String> instanceIds = new ArrayList<String>();
         instanceIds.add(instanceId);
-        return startDependency(applicationContexts, instanceIds);
+        boolean startup = startDependency(applicationContexts, instanceIds);
+        return startup;
     }
 
     public boolean startAllChildrenDependency(ParentComponent component, String instanceId)
@@ -242,8 +255,13 @@ public abstract class ParentComponentMonitor extends Monitor {
             if (this.terminatingMonitorsList.contains(eventId)) {
                 this.terminatingMonitorsList.remove(eventId);
             }
+            boolean startDep;
+            if(!aliasToActiveMonitorsMap.containsKey(eventId)) {
+               startDep = startDependency(eventId, instanceId);
+            } else {
+                startDep = startDependencyByInstanceCreation(eventId, instanceId);
+            }
 
-            boolean startDep = startDependency(eventId, instanceId);
             if (log.isDebugEnabled()) {
                 log.debug("started a child: " + startDep + " by the group/cluster: " + eventId);
 
@@ -351,8 +369,8 @@ public abstract class ParentComponentMonitor extends Monitor {
         boolean allParentsActive = false;
         //make sure all the parent contexts got terminated or whether all of them are active
         if (parentContexts != null) {
-            parentsTerminated = allParentTerminated(parentContexts);
-            allParentsActive = allParentActive(parentContexts);
+            parentsTerminated = allParentTerminated(parentContexts, instanceId);
+            allParentsActive = allParentActive(parentContexts, instanceId);
         }
 
         if ((terminationList.isEmpty() || allDependentTerminated) &&
@@ -391,7 +409,8 @@ public abstract class ParentComponentMonitor extends Monitor {
     }
 
 
-    private boolean allParentTerminated(List<ApplicationChildContext> parentContexts) {
+    private boolean allParentTerminated(List<ApplicationChildContext> parentContexts,
+                                        String instanceId) {
         boolean parentsTerminated = false;
         for (ApplicationChildContext context1 : parentContexts) {
             if (this.inactiveMonitorsList.contains(context1.getId())) {
@@ -413,11 +432,11 @@ public abstract class ParentComponentMonitor extends Monitor {
         return parentsTerminated;
     }
 
-    private boolean allParentActive(List<ApplicationChildContext> parentContexts) {
+    private boolean allParentActive(List<ApplicationChildContext> parentContexts, String instanceId) {
         boolean parentsActive = false;
         for (ApplicationChildContext context1 : parentContexts) {
-            if (this.inactiveMonitorsList.contains(context1.getId()) ||
-                    this.terminatingMonitorsList.contains(context1.getId())) {
+            if (this.inactiveMonitorsList.contains(instanceId) ||
+                    this.terminatingMonitorsList.contains(instanceId)) {
                 parentsActive = false;
                 log.info("Dependent [Monitor] " + context1.getId()
                         + " is not yet active");
@@ -632,4 +651,4 @@ public abstract class ParentComponentMonitor extends Monitor {
     }
 
 
-}
\ No newline at end of file
+}


[2/3] stratos git commit: fixing processor issue while calulating status of group

Posted by re...@apache.org.
fixing processor issue while calulating status of group


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

Branch: refs/heads/master
Commit: 0c5d4caa11d7ca9c9a498a32d369b563a395fa41
Parents: a8ed191
Author: reka <rt...@gmail.com>
Authored: Tue Dec 2 22:38:54 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Dec 2 23:28:17 2014 +0530

----------------------------------------------------------------------
 .../application/MonitorNotFoundException.java   | 56 ++++++++++++++++++++
 .../ParentMonitorNotFoundException.java         | 56 --------------------
 .../autoscaler/monitor/EventHandler.java        |  5 +-
 .../monitor/component/ApplicationMonitor.java   |  6 +--
 .../monitor/component/GroupMonitor.java         | 21 ++++----
 .../component/ParentComponentMonitor.java       | 25 ++++-----
 .../builder/MonitorStatusEventBuilder.java      | 11 ++--
 .../group/GroupStatusActiveProcessor.java       | 12 ++---
 .../group/GroupStatusInActiveProcessor.java     |  4 +-
 .../group/GroupStatusProcessorChain.java        |  9 ++++
 .../group/GroupStatusTerminatedProcessor.java   |  7 ++-
 .../group/GroupStatusTerminatingProcessor.java  | 11 ++--
 12 files changed, 113 insertions(+), 110 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/MonitorNotFoundException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/MonitorNotFoundException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/MonitorNotFoundException.java
new file mode 100644
index 0000000..325b825
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/MonitorNotFoundException.java
@@ -0,0 +1,56 @@
+/*
+ * 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.exception.application;
+
+/**
+ * This will throw when required monitor not found
+ */
+public class MonitorNotFoundException extends Exception{
+    private static final long serialVersionUID = -9163807860189126883L;
+    private String message;
+
+    public MonitorNotFoundException(final String message, final Exception exception) {
+
+        super(message, exception);
+        this.setMessage(message);
+
+    }
+
+    public MonitorNotFoundException(final Exception exception) {
+
+        super(exception);
+
+    }
+
+    public MonitorNotFoundException(final String msg) {
+
+        super(msg);
+        this.setMessage(msg);
+
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/ParentMonitorNotFoundException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/ParentMonitorNotFoundException.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/ParentMonitorNotFoundException.java
deleted file mode 100644
index e5e00cd..0000000
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/exception/application/ParentMonitorNotFoundException.java
+++ /dev/null
@@ -1,56 +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.exception.application;
-
-/**
- * This will throw when required monitor not found
- */
-public class ParentMonitorNotFoundException extends Exception{
-    private static final long serialVersionUID = -9163807860189126883L;
-    private String message;
-
-    public ParentMonitorNotFoundException(final String message, final Exception exception) {
-
-        super(message, exception);
-        this.setMessage(message);
-
-    }
-
-    public ParentMonitorNotFoundException(final Exception exception) {
-
-        super(exception);
-
-    }
-
-    public ParentMonitorNotFoundException(final String msg) {
-
-        super(msg);
-        this.setMessage(msg);
-
-    }
-
-    public String getMessage() {
-        return message;
-    }
-
-    public void setMessage(String message) {
-        this.message = message;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
index bf65eb4..ca105de 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
@@ -18,8 +18,7 @@
  */
 package org.apache.stratos.autoscaler.monitor;
 
-import org.apache.stratos.autoscaler.exception.application.ParentMonitorNotFoundException;
-import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
+import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
 import org.apache.stratos.autoscaler.monitor.events.MonitorScalingEvent;
 import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
 
@@ -40,7 +39,7 @@ public interface EventHandler {
      * @param statusEvent
      */
     public abstract void onParentStatusEvent(MonitorStatusEvent statusEvent) throws
-                                        ParentMonitorNotFoundException;
+            MonitorNotFoundException;
 
     /**
      * Triggered when a scaling event is received from a child.

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/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 990d482..c4d73e8 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
@@ -25,7 +25,7 @@ import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
 import org.apache.stratos.autoscaler.context.application.ApplicationInstanceContext;
 import org.apache.stratos.autoscaler.context.partition.network.ApplicationLevelNetworkPartitionContext;
 import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
-import org.apache.stratos.autoscaler.exception.application.ParentMonitorNotFoundException;
+import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
 import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
 import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
 import org.apache.stratos.autoscaler.monitor.Monitor;
@@ -112,7 +112,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
         //notify the children about the state change
         try {
             MonitorStatusEventBuilder.notifyChildren(this, new ApplicationStatusEvent(status, appId, instanceId));
-        } catch (ParentMonitorNotFoundException e) {
+        } catch (MonitorNotFoundException e) {
             log.error("Error while notifying the children from [application] " + appId, e);
             //TODO revert siblings
         }
@@ -236,7 +236,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
 
     public void createInstanceOnBurstingForApplication() throws TopologyInConsistentException,
             PolicyValidationException,
-            ParentMonitorNotFoundException {
+            MonitorNotFoundException {
         Application application = ApplicationHolder.getApplications().getApplication(appId);
         if (application == null) {
             String msg = "Application cannot be found in the Topology.";

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/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 b2b6697..96a1112 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
@@ -29,7 +29,7 @@ import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.context.group.GroupInstanceContext;
 import org.apache.stratos.autoscaler.context.partition.network.GroupLevelNetworkPartitionContext;
 import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
-import org.apache.stratos.autoscaler.exception.application.ParentMonitorNotFoundException;
+import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
 import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
 import org.apache.stratos.autoscaler.monitor.Monitor;
 import org.apache.stratos.autoscaler.monitor.events.GroupStatusEvent;
@@ -45,7 +45,6 @@ import org.apache.stratos.messaging.domain.applications.Application;
 import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
 import org.apache.stratos.messaging.domain.applications.Group;
 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.instance.Instance;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
@@ -168,7 +167,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
         //notify the children about the state change
         try {
             MonitorStatusEventBuilder.notifyChildren(this, new GroupStatusEvent(status, this.id, instanceId));
-        } catch (ParentMonitorNotFoundException e) {
+        } catch (MonitorNotFoundException e) {
             log.error("Error while notifying the children from the [group] " + this.id, e);
             //TODO revert siblings
         }
@@ -184,20 +183,20 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
             onChildActivatedEvent(id, instanceId);
 
         } else if (status1 == ClusterStatus.Inactive || status1 == GroupStatus.Inactive) {
-            this.markMonitorAsInactive(id);
+            this.markMonitorAsInactive(instanceId);
             onChildInactiveEvent(id, instanceId);
 
         } else if (status1 == ClusterStatus.Created || status1 == GroupStatus.Created) {
-            if (this.terminatingMonitorsList.contains(id)) {
-                this.terminatingMonitorsList.remove(id);
-                this.aliasToActiveMonitorsMap.remove(id);
+            if (this.terminatingMonitorsList.contains(instanceId)) {
+                this.terminatingMonitorsList.remove(instanceId);
+                this.aliasToActiveMonitorsMap.remove(instanceId);
                 if (AutoscalerContext.getInstance().getClusterMonitors().containsKey(id)) {
                     AutoscalerContext.getInstance().removeClusterMonitor(id);
                 }
             }
         } else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) {
             //mark the child monitor as inActive in the map
-            this.markMonitorAsTerminating(id);
+            this.markMonitorAsTerminating(instanceId);
 
         } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) {
             //Check whether all dependent goes Terminated and then start them in parallel.
@@ -230,7 +229,7 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
 
     @Override
     public void onParentStatusEvent(MonitorStatusEvent statusEvent)
-            throws ParentMonitorNotFoundException {
+            throws MonitorNotFoundException {
         String instanceId = statusEvent.getInstanceId();
         // send the ClusterTerminating event
         if (statusEvent.getStatus() == GroupStatus.Terminating ||
@@ -400,10 +399,10 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
      *
      * @param group
      * @param parentInstanceId
-     * @throws ParentMonitorNotFoundException
+     * @throws org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException
      */
     public void createInstanceAndStartDependency(Group group, String parentInstanceId)
-            throws ParentMonitorNotFoundException {
+            throws MonitorNotFoundException {
         String deploymentPolicyName = group.getDeploymentPolicy();
 
         String instanceId;

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/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 f48461f..01c1787 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
@@ -33,7 +33,7 @@ import org.apache.stratos.autoscaler.applications.dependency.context.GroupChildC
 import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
 import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
 import org.apache.stratos.autoscaler.exception.application.DependencyBuilderException;
-import org.apache.stratos.autoscaler.exception.application.ParentMonitorNotFoundException;
+import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
 import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
 import org.apache.stratos.autoscaler.exception.partition.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
@@ -42,6 +42,7 @@ import org.apache.stratos.autoscaler.monitor.MonitorFactory;
 import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
 import org.apache.stratos.autoscaler.status.processor.StatusChecker;
+import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 import org.apache.stratos.messaging.domain.applications.GroupStatus;
 import org.apache.stratos.messaging.domain.applications.ParentComponent;
 import org.apache.stratos.messaging.domain.instance.Instance;
@@ -97,7 +98,7 @@ public abstract class ParentComponentMonitor extends Monitor {
      * it will get invoked when the monitor starts up only.
      */
     public void startDependency(ParentComponent component, String instanceId) throws
-                                                                    ParentMonitorNotFoundException {
+            MonitorNotFoundException {
         //start the first dependency
         List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
                 getStarAbleDependencies();
@@ -110,7 +111,7 @@ public abstract class ParentComponentMonitor extends Monitor {
      * it will get invoked when the monitor starts up only.
      */
     public boolean startDependencyByInstanceCreation(String childId, String instanceId) throws
-            ParentMonitorNotFoundException {
+            MonitorNotFoundException {
         //start the first dependency
         List<ApplicationChildContext> applicationContexts =
                 this.startupDependencyTree.getStarAbleDependencies(childId);
@@ -139,7 +140,7 @@ public abstract class ParentComponentMonitor extends Monitor {
      *
      * @param id alias/clusterId of which receive the activated event
      */
-    public boolean startDependency(String id, String instanceId) throws ParentMonitorNotFoundException {
+    public boolean startDependency(String id, String instanceId) throws MonitorNotFoundException {
         List<ApplicationChildContext> applicationContexts = this.startupDependencyTree
                 .getStarAbleDependencies(id);
         List<String> instanceIds = new ArrayList<String>();
@@ -203,7 +204,7 @@ public abstract class ParentComponentMonitor extends Monitor {
      * @param applicationContexts the found applicationContexts to be started
      */
     private boolean startDependency(List<ApplicationChildContext> applicationContexts, String instanceId)
-            throws ParentMonitorNotFoundException {
+            throws MonitorNotFoundException {
         if (applicationContexts != null && applicationContexts.isEmpty()) {
             //all the groups/clusters have been started and waiting for activation
             log.info("There is no child found for the [group]: " + this.id);
@@ -217,7 +218,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             //FIXME whether to start new monitor or throw exception
             if (!this.aliasToActiveMonitorsMap.containsKey(context.getId())) {
                 String msg = "Required Monitor cannot be fount in the hierarchy";
-                throw new ParentMonitorNotFoundException(msg);
+                throw new MonitorNotFoundException(msg);
             } else {
                 //starting a new instance of the child
                 Monitor monitor = aliasToActiveMonitorsMap.get(context.getId());
@@ -255,6 +256,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             if (this.terminatingMonitorsList.contains(eventId)) {
                 this.terminatingMonitorsList.remove(eventId);
             }
+
             boolean startDep;
             if(!aliasToActiveMonitorsMap.containsKey(eventId)) {
                startDep = startDependency(eventId, instanceId);
@@ -262,14 +264,13 @@ public abstract class ParentComponentMonitor extends Monitor {
                 startDep = startDependencyByInstanceCreation(eventId, instanceId);
             }
 
-            if (log.isDebugEnabled()) {
-                log.debug("started a child: " + startDep + " by the group/cluster: " + eventId);
-
-            }
             if (!startDep) {
-                StatusChecker.getInstance().onChildStatusChange(eventId, this.id, this.appId, instanceId);
+                ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().
+                        process(this.id, this.appId, instanceId);
+            } else {
+                log.info("started a child: " + startDep + " by the group/cluster: " + eventId);
             }
-        } catch (ParentMonitorNotFoundException e) {
+        } catch (MonitorNotFoundException e) {
             //TODO revert the siblings and notify parent, change a flag for reverting/un-subscription
             log.error(e);
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/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 78fd308..c2491a0 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
@@ -20,8 +20,7 @@ package org.apache.stratos.autoscaler.monitor.events.builder;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.exception.application.ParentMonitorNotFoundException;
-import org.apache.stratos.autoscaler.exception.application.TopologyInConsistentException;
+import org.apache.stratos.autoscaler.exception.application.MonitorNotFoundException;
 import org.apache.stratos.autoscaler.monitor.Monitor;
 import org.apache.stratos.autoscaler.monitor.component.ParentComponentMonitor;
 import org.apache.stratos.autoscaler.monitor.events.*;
@@ -29,8 +28,6 @@ import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.applications.GroupStatus;
 
-import java.util.List;
-
 /**
  * This will build the necessary monitor status events to be sent to the parent/child  monitor
  */
@@ -67,14 +64,14 @@ public class MonitorStatusEventBuilder {
     }
 
     public static void notifyChildren (ParentComponentMonitor componentMonitor, MonitorStatusEvent statusEvent)
-                                                            throws ParentMonitorNotFoundException {
+                                                            throws MonitorNotFoundException {
         for (Monitor activeChildMonitor : componentMonitor.getAliasToActiveMonitorsMap().values()) {
             activeChildMonitor.onParentStatusEvent(statusEvent);
         }
     }
 
     public static void notifyChildGroup(Monitor child, GroupStatus state, String instanceId)
-                                                            throws ParentMonitorNotFoundException {
+                                                            throws MonitorNotFoundException {
         MonitorStatusEvent statusEvent = new GroupStatusEvent(state, child.getId(), instanceId);
         child.onParentStatusEvent(statusEvent);
     }
@@ -91,7 +88,7 @@ public class MonitorStatusEventBuilder {
     }*/
 
     public static void notifyChildCluster(Monitor child, ClusterStatus state, String instanceId)
-            throws ParentMonitorNotFoundException {
+            throws MonitorNotFoundException {
         MonitorStatusEvent statusEvent = new ClusterStatusEvent(state, child.getId(), instanceId);
         child.onParentStatusEvent(statusEvent);
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusActiveProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusActiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusActiveProcessor.java
index fa2ffa8..9e60357 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusActiveProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusActiveProcessor.java
@@ -65,10 +65,6 @@ public class GroupStatusActiveProcessor extends GroupStatusProcessor {
         Map<String, Group> groups;
         Map<String, ClusterDataHolder> clusterData;
 
-        if (log.isInfoEnabled()) {
-            log.info("StatusChecker calculating the status for the group [ " + idOfComponent + " ]");
-        }
-
         try {
             ApplicationHolder.acquireWriteLock();
             if (idOfComponent.equals(appId)) {
@@ -96,23 +92,21 @@ public class GroupStatusActiveProcessor extends GroupStatusProcessor {
                         //send application activated event
                         log.info("sending app activate: " + appId);
                         ApplicationBuilder.handleApplicationActivatedEvent(appId, instanceId);
+                        return true;
                     } else if (component instanceof Group) {
                         //send activation to the parent
                         log.info("sending group activate: " + component.getUniqueIdentifier());
                         ApplicationBuilder.handleGroupActivatedEvent(appId, component.getUniqueIdentifier(), instanceId);
+                        return true;
                     }
 
                 }
             }
-
-
         } finally {
             ApplicationHolder.releaseWriteLock();
 
         }
-
-
-        return true;
+        return false;
     }
 
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java
index 84fcf8f..90b608c 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusInActiveProcessor.java
@@ -96,12 +96,14 @@ public class GroupStatusInActiveProcessor extends GroupStatusProcessor {
                 if (component instanceof Application) {
                     //send application activated event
                     log.warn("Application can't be in in-active : " + appId);
+                    return true;
                     //ApplicationBuilder.handleApp(appId);
                 } else if (component instanceof Group) {
                     //send activation to the parent
                     if (((Group) component).getStatus(null) != GroupStatus.Inactive) {
                         log.info("sending group in-active: " + component.getUniqueIdentifier());
                         ApplicationBuilder.handleGroupInActivateEvent(appId, component.getUniqueIdentifier(), instanceId);
+                        return true;
                     }
                 }
             }
@@ -113,7 +115,7 @@ public class GroupStatusInActiveProcessor extends GroupStatusProcessor {
         }
 
 
-        return true;
+        return false;
     }
 
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
index 0e8c7cc..5724669 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusProcessorChain.java
@@ -18,12 +18,16 @@
  */
 package org.apache.stratos.autoscaler.status.processor.group;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.status.processor.StatusProcessorChain;
 
 /**
  * Cluster status tracking processor chain
  */
 public class GroupStatusProcessorChain extends StatusProcessorChain {
+    private static final Log log = LogFactory.getLog(GroupStatusActiveProcessor.class);
+
     private GroupStatusActiveProcessor groupStatusActiveProcessor;
     private GroupStatusTerminatedProcessor groupStatusTerminatedProcessor;
     private GroupStatusTerminatingProcessor groupStatusTerminatingProcessor;
@@ -51,6 +55,11 @@ public class GroupStatusProcessorChain extends StatusProcessorChain {
         if (root == null) {
             throw new RuntimeException("Message processor chain is not initialized");
         }
+        if (log.isInfoEnabled()) {
+            log.info("GroupProcessor chain calculating the status for the group " +
+                    "[ " + idOfComponent + " ]");
+        }
+
         return root.process(idOfComponent, appId, instanceId);
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java
index 329a901..3ea460d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatedProcessor.java
@@ -94,11 +94,14 @@ public class GroupStatusTerminatedProcessor extends GroupStatusProcessor {
                     if (component instanceof Application) {
                         log.info("sending app terminated: " + appId);
                         ApplicationBuilder.handleApplicationTerminatedEvent(appId);
+                        return true;
                     } else if (component instanceof Group) {
                         //send activation to the parent
                         if (((Group) component).getStatus(null) != GroupStatus.Terminated) {
                             log.info("sending group terminated : " + component.getUniqueIdentifier());
-                            ApplicationBuilder.handleGroupTerminatedEvent(appId, component.getUniqueIdentifier(), instanceId);
+                            ApplicationBuilder.handleGroupTerminatedEvent(appId,
+                                    component.getUniqueIdentifier(), instanceId);
+                            return true;
                         }
                     }
                 }
@@ -111,7 +114,7 @@ public class GroupStatusTerminatedProcessor extends GroupStatusProcessor {
         }
 
 
-        return true;
+        return false;
     }
 
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/0c5d4caa/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java
index 97bedb3..5d51f23 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/processor/group/GroupStatusTerminatingProcessor.java
@@ -95,24 +95,23 @@ public class GroupStatusTerminatingProcessor extends GroupStatusProcessor {
                     if (component instanceof Application) {
                         log.info("sending app terminated: " + appId);
                         ApplicationBuilder.handleApplicationTerminatedEvent(appId);
+                        return true;
                     } else if (component instanceof Group) {
                         //send activation to the parent
                         if (((Group) component).getStatus(null) != GroupStatus.Terminated) {
                             log.info("sending group terminated : " + component.getUniqueIdentifier());
-                            ApplicationBuilder.handleGroupTerminatedEvent(appId, component.getUniqueIdentifier(), instanceId);
+                            ApplicationBuilder.handleGroupTerminatedEvent(appId,
+                                    component.getUniqueIdentifier(), instanceId);
+                            return true;
                         }
                     }
                 }
             }
-
-
         } finally {
             ApplicationHolder.releaseWriteLock();
 
         }
-
-
-        return true;
+        return false;
     }