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/11 14:54:31 UTC

[1/7] stratos git commit: fixing a build failure due to partial commit

Repository: stratos
Updated Branches:
  refs/heads/4.1.0-test fb8f23efc -> d64f31438


fixing a build failure due to partial commit


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

Branch: refs/heads/4.1.0-test
Commit: 590a4f6dbea74f8fd4074d655b1c522f83fe61a2
Parents: 359d323
Author: reka <rt...@gmail.com>
Authored: Mon Dec 8 19:20:25 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 11 19:20:13 2014 +0530

----------------------------------------------------------------------
 .../component/ParentComponentMonitor.java       | 25 ++++++++++++++++----
 1 file changed, 20 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/590a4f6d/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 f2f345a..6156015 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
@@ -104,7 +104,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             MonitorNotFoundException {
         //start the first dependency
         List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
-                getStarAbleDependencies();
+                getStartAbleDependencies();
         startDependency(applicationContexts, instanceId);
 
     }
@@ -128,7 +128,7 @@ public abstract class ParentComponentMonitor extends Monitor {
     public void startDependency(ParentComponent component) {
         //start the first dependency
         List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
-                getStarAbleDependencies();
+                getStartAbleDependencies();
         Collection<Instance> contexts = component.getInstanceIdToInstanceContextMap().values();
         //traversing through all the Instance context and start them
         List<String> instanceIds = new ArrayList<String>();
@@ -164,10 +164,13 @@ public abstract class ParentComponentMonitor extends Monitor {
      * by traversing to find the terminated dependencies.
      * it will get invoked when start a child monitor on termination of a sub tree
      */
-    public void startDependencyOnTermination() throws TopologyInConsistentException {
+
+    public void startDependencyOnTermination(String instanceId) throws TopologyInConsistentException,
+            MonitorNotFoundException, PolicyValidationException, PartitionValidationException {
+
         //start the first dependency which went to terminated
         List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
-                getStarAbleDependenciesByTermination();
+                getStarAbleDependenciesByTermination(this, instanceId);
         for(ApplicationChildContext context : applicationContexts) {
             if(context instanceof GroupChildContext) {
                 GroupMonitor groupMonitor = (GroupMonitor) this.aliasToActiveMonitorsMap.
@@ -382,7 +385,15 @@ public abstract class ParentComponentMonitor extends Monitor {
                 (parentContexts.isEmpty() || parentsTerminated || allParentsActive)) {
             //Find the non existent monitor by traversing dependency tree
             try {
-                this.startDependencyOnTermination();
+                try {
+                    this.startDependencyOnTermination(instanceId);
+                } catch (MonitorNotFoundException e) {
+                    e.printStackTrace();
+                } catch (PolicyValidationException e) {
+                    e.printStackTrace();
+                } catch (PartitionValidationException e) {
+                    e.printStackTrace();
+                }
             } catch (TopologyInConsistentException e) {
                 //TODO revert the siblings and notify parent, change a flag for reverting/un-subscription
                 log.error("Error while starting the monitor upon termination" + e);
@@ -574,6 +585,10 @@ public abstract class ParentComponentMonitor extends Monitor {
         return hasMonitor;
     }
 
+    public Monitor getMonitor(String childId) {
+        return this.aliasToActiveMonitorsMap.get(childId);
+    }
+
     public boolean hasMonitors() {
 
         return this.aliasToActiveMonitorsMap != null;


[7/7] stratos git commit: fixing undeployment by making the status calculation sync call

Posted by re...@apache.org.
fixing undeployment by making the status calculation sync call


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

Branch: refs/heads/4.1.0-test
Commit: d64f31438ac9053334b221be4bb54499fa769085
Parents: 9ccd501
Author: reka <rt...@gmail.com>
Authored: Thu Dec 11 19:19:49 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 11 19:24:11 2014 +0530

----------------------------------------------------------------------
 .../applications/topic/ApplicationBuilder.java  |  7 +++++
 .../stratos/autoscaler/monitor/Monitor.java     |  2 ++
 .../monitor/cluster/AbstractClusterMonitor.java |  2 --
 .../monitor/component/ApplicationMonitor.java   |  5 ++++
 .../monitor/component/GroupMonitor.java         |  4 +++
 .../component/ParentComponentMonitor.java       | 12 ++++++---
 .../group/GroupStatusProcessorChain.java        | 28 ++++++++------------
 .../ApplicationInstanceActivatedEvent.java      |  1 -
 8 files changed, 38 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/d64f3143/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 1194a6f..ae87ac2 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
@@ -25,6 +25,7 @@ import org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext
 import org.apache.stratos.autoscaler.client.CloudControllerClient;
 import org.apache.stratos.autoscaler.context.AutoscalerContext;
 import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
+import org.apache.stratos.autoscaler.monitor.Monitor;
 import org.apache.stratos.autoscaler.monitor.component.ApplicationMonitor;
 import org.apache.stratos.autoscaler.monitor.component.GroupMonitor;
 import org.apache.stratos.autoscaler.pojo.policy.PolicyManager;
@@ -345,6 +346,12 @@ public class ApplicationBuilder {
                 //removing the group instance and context
                 GroupMonitor monitor = getGroupMonitor(appId, groupId);
                 if(monitor != null) {
+                    if(monitor.hasMonitors()) {
+                       for(Monitor monitor1 : monitor.getAliasToActiveMonitorsMap().values()) {
+                           //destroying the drools
+                           monitor1.destroy();
+                       }
+                    }
                     monitor.getNetworkPartitionContext(context.getNetworkPartitionId()).
                             removeClusterGroupContext(instanceId);
                     monitor.removeInstance(instanceId);

http://git-wip-us.apache.org/repos/asf/stratos/blob/d64f3143/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 5656b19..88159c1 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
@@ -43,6 +43,8 @@ public abstract class Monitor implements EventHandler {
     //monitors map, key=InstanceId and value=ClusterInstance/GroupInstance/ApplicationInstance
     protected Map<String, Instance> instanceIdToInstanceMap;
 
+    public abstract void destroy();
+
     public Monitor() {
         this.instanceIdToInstanceMap = new HashMap<String, Instance>();
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/d64f3143/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 1248224..d39b805 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
@@ -94,8 +94,6 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable
 
     protected abstract void monitor();
 
-    public abstract void destroy();
-
     //handle health events
     public abstract void handleAverageLoadAverageEvent(
             AverageLoadAverageEvent averageLoadAverageEvent);

http://git-wip-us.apache.org/repos/asf/stratos/blob/d64f3143/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 9d0a943..aecfbf8 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
@@ -359,4 +359,9 @@ public class ApplicationMonitor extends ParentComponentMonitor {
     public void setTerminating(boolean isTerminating) {
         this.isTerminating = isTerminating;
     }
+
+    @Override
+    public void destroy() {
+        //TODO to wipe out the drools
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/d64f3143/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 15aa733..e13cef4 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
@@ -680,4 +680,8 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
     }
 
 
+    @Override
+    public void destroy() {
+        //TODO to stop all the drools
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/d64f3143/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 2b6ce96..46e69ee 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
@@ -287,14 +287,20 @@ public abstract class ParentComponentMonitor extends Monitor {
     /**
      * @param childId
      */
-    protected void onChildInactiveEvent(String childId, String instanceId) {
+    protected void onChildInactiveEvent(String childId, final String instanceId) {
         List<ApplicationChildContext> terminationList;
         Monitor monitor;
         terminationList = this.startupDependencyTree.getTerminationDependencies(childId);
         //Need to notify the parent about the status  change from Active-->InActive
         // TODO to make app also inaction if (this.parent != null) {
-            ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().
-                    process(this.id, this.appId, instanceId);
+        Runnable monitoringRunnable = new Runnable() {
+            @Override
+            public void run() {
+                ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().
+                        process(id, appId, instanceId);
+            }
+        };
+        monitoringRunnable.run();
         //}
         //TODO checking whether terminating them in reverse order,
         // TODO if so can handle it in the parent event.

http://git-wip-us.apache.org/repos/asf/stratos/blob/d64f3143/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 9b0631e..92c0951 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
@@ -50,24 +50,18 @@ public class GroupStatusProcessorChain extends StatusProcessorChain {
     }
 
     public void process(final String idOfComponent, final String appId,
-                           final String instanceId) {
+                        final String instanceId) {
 
-        Runnable monitoringRunnable = new Runnable() {
-            @Override
-            public void run() {
-                GroupStatusProcessor root = (GroupStatusProcessor) list.getFirst();
-                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 + " ]");
-                }
 
-                root.process(idOfComponent, appId, instanceId);
-            }
-        };
-        monitoringRunnable.run();
-    }
+        GroupStatusProcessor root = (GroupStatusProcessor) list.getFirst();
+        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 + " ]");
+        }
 
+        root.process(idOfComponent, appId, instanceId);
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/d64f3143/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceActivatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceActivatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceActivatedEvent.java
index 855f07e..7de8ca8 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceActivatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceActivatedEvent.java
@@ -26,7 +26,6 @@ import java.io.Serializable;
  * This event will be fired upon the application activated is detected.
  */
 public class ApplicationInstanceActivatedEvent extends Event implements Serializable {
-    private static final long serialVersionUID = 2625412714611885089L;
 
     private String appId;
     private String instanceId;


[4/7] stratos git commit: adding a map to keep track of inactive and terminating instances

Posted by re...@apache.org.
adding a map to keep track of inactive and terminating instances


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

Branch: refs/heads/4.1.0-test
Commit: dc5ae90d86e48fd0e96247b1977bcd79d515a841
Parents: 590a4f6
Author: reka <rt...@gmail.com>
Authored: Wed Dec 10 20:27:48 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 11 19:23:20 2014 +0530

----------------------------------------------------------------------
 .../monitor/component/ApplicationMonitor.java   |  2 +-
 .../monitor/component/GroupMonitor.java         | 73 ++++++++------------
 .../component/ParentComponentMonitor.java       |  6 +-
 3 files changed, 34 insertions(+), 47 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/dc5ae90d/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 ae8ba9a..f8f2e82 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
@@ -141,7 +141,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
             onChildInactiveEvent(childId, instanceId);
 
         } else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) {
-            //mark the child monitor as inactive in the map
+            //mark the child monitor as inActive in the map
             markInstanceAsTerminating(childId, instanceId);
 
         } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/dc5ae90d/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 00ac964..10bcec1 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
@@ -173,54 +173,41 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
 
     @Override
     public void onChildStatusEvent(MonitorStatusEvent statusEvent) {
-        final String childId = statusEvent.getId();
-        final String instanceId = statusEvent.getInstanceId();
-        final LifeCycleState status1 = statusEvent.getStatus();
-        final String id = this.id;
-        //TODO get lock when executing this
-        Runnable monitoringRunnable = new Runnable() {
-            @Override
-            public void run() {
-                //Events coming from parent are In_Active(in faulty detection), Scaling events, termination
+        String childId = statusEvent.getId();
+        String instanceId = statusEvent.getInstanceId();
+        LifeCycleState status1 = statusEvent.getStatus();
+        //Events coming from parent are In_Active(in faulty detection), Scaling events, termination
 
-                if (status1 == ClusterStatus.Active || status1 == GroupStatus.Active) {
-                    onChildActivatedEvent(childId, instanceId);
+        if (status1 == ClusterStatus.Active || status1 == GroupStatus.Active) {
+            onChildActivatedEvent(childId, instanceId);
 
-                } else if (status1 == ClusterStatus.Inactive || status1 == GroupStatus.Inactive) {
-                    //handling restart of stratos
-                    if (!aliasToActiveMonitorsMap.get(childId).hasStartupDependents()) {
-                        onChildActivatedEvent(childId, instanceId);
-                    } else {
-                        markInstanceAsInactive(childId, instanceId);
-                        onChildInactiveEvent(childId, instanceId);
-                    }
+        } else if (status1 == ClusterStatus.Inactive || status1 == GroupStatus.Inactive) {
+            //handling restart of stratos
+            if (!this.aliasToActiveMonitorsMap.get(childId).hasStartupDependents()) {
+                onChildActivatedEvent(childId, instanceId);
+            } else {
+                this.markInstanceAsInactive(childId, instanceId);
+                onChildInactiveEvent(childId, instanceId);
+            }
 
-                } else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) {
-                    //mark the child monitor as inactive in the map
-                    markInstanceAsTerminating(childId, instanceId);
-
-                } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) {
-                    //Check whether all dependent goes Terminated and then start them in parallel.
-                    removeInstanceFromFromInactiveMap(childId, instanceId);
-                    removeInstanceFromFromTerminatingMap(childId, instanceId);
-
-                    GroupInstance instance = (GroupInstance) instanceIdToInstanceMap.get(instanceId);
-                    if (instance != null) {
-                        if (instance.getStatus() == GroupStatus.Terminating || instance.getStatus() == GroupStatus.Terminated) {
-                            ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(id,
-                                    appId, instanceId);
-                        } else {
-                            onChildTerminatedEvent(childId, instanceId);
-                        }
-                    } else {
-                        log.warn("The required instance cannot be found in the the [GroupMonitor] " +
-                                id);
-                    }
+        } else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) {
+            //mark the child monitor as inActive in the map
+            markInstanceAsTerminating(childId, instanceId);
+
+        } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) {
+            //Check whether all dependent goes Terminated and then start them in parallel.
+            removeInstanceFromFromInactiveMap(childId, instanceId);
+            removeInstanceFromFromTerminatingMap(childId, instanceId);
+            GroupInstance instance = (GroupInstance) this.instanceIdToInstanceMap.get(instanceId);
+            if (instance != null) {
+                if (instance.getStatus() == GroupStatus.Terminating || instance.getStatus() == GroupStatus.Terminated) {
+                    ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
+                            appId, instanceId);
+                } else {
+                    onChildTerminatedEvent(childId, instanceId);
                 }
             }
-        };
-        monitoringRunnable.run();
-
+        }
 
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/dc5ae90d/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 6156015..2b6ce96 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
@@ -45,6 +45,7 @@ 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.ClusterInstance;
+import org.apache.stratos.messaging.domain.instance.Instance;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 
@@ -497,8 +498,7 @@ public abstract class ParentComponentMonitor extends Monitor {
 
     // move to inactive monitors list to use in the Terminated event
     protected synchronized void markInstanceAsInactive(String childId, String instanceId) {
-
-        if (this.inactiveInstancesMap.containsKey(childId)) {
+        if (!this.inactiveInstancesMap.containsKey(childId)) {
             this.inactiveInstancesMap.get(childId).add(instanceId);
         } else {
             List<String> instanceIds = new ArrayList<String>();
@@ -531,7 +531,7 @@ public abstract class ParentComponentMonitor extends Monitor {
 
     // move to inactive monitors list to use in the Terminated event
     protected synchronized void markInstanceAsTerminating(String childId, String instanceId) {
-        if (this.terminatingInstancesMap.containsKey(childId)) {
+        if (!this.terminatingInstancesMap.containsKey(childId)) {
             if (this.inactiveInstancesMap.containsKey(childId) &&
                     this.inactiveInstancesMap.get(childId).contains(instanceId)) {
                 this.inactiveInstancesMap.get(childId).remove(instanceId);


[6/7] stratos git commit: fixing terminated processors to notify listeners if instance already removed

Posted by re...@apache.org.
fixing terminated processors to notify listeners if instance already removed


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

Branch: refs/heads/4.1.0-test
Commit: 9ccd50175184c6c7c3e100034bd0bacea659dbc8
Parents: 196336c
Author: reka <rt...@gmail.com>
Authored: Thu Dec 11 14:48:58 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 11 19:24:11 2014 +0530

----------------------------------------------------------------------
 ...ationInstanceTerminatedMessageProcessor.java | 10 ++++++---
 .../GroupInstanceTerminatedProcessor.java       | 21 +++++++++---------
 .../ClusterInstanceCreatedMessageProcessor.java |  4 +++-
 .../ClusterInstanceTerminatedProcessor.java     | 23 ++++++++++----------
 4 files changed, 32 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/9ccd5017/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java
index ebba54b..5479050 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java
@@ -93,10 +93,14 @@ public class ApplicationInstanceTerminatedMessageProcessor extends MessageProces
             ApplicationInstance instance = applications.getApplication(appId).
                                                 getInstanceContexts(instanceId);
             if(instance == null) {
-                log.info("Application [Instance] " + instanceId + " has already been removed");
+                if(log.isDebugEnabled()) {
+                    log.debug("Application [Instance] " + instanceId + " has already been removed");
+                }
+            } else {
+                instance.setStatus(ApplicationStatus.Terminated);
+                applications.getApplication(appId).removeInstance(instanceId);
             }
-            instance.setStatus(ApplicationStatus.Terminated);
-            applications.getApplication(appId).removeInstance(instanceId);
+
         }
 
         notifyEventListeners(event);

http://git-wip-us.apache.org/repos/asf/stratos/blob/9ccd5017/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInstanceTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInstanceTerminatedProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInstanceTerminatedProcessor.java
index 9fe8919..4b29f3f 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInstanceTerminatedProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/GroupInstanceTerminatedProcessor.java
@@ -96,22 +96,21 @@ public class GroupInstanceTerminatedProcessor extends MessageProcessor {
         } else {
             GroupInstance context = group.getInstanceContexts(event.getInstanceId());
             if(context == null) {
-                if (log.isWarnEnabled()) {
-                    log.warn(String.format("Group Instance not exists in Group: [AppId] %s [groupId] %s " +
+                if (log.isDebugEnabled()) {
+                    log.debug(String.format("Group Instance alread removed in Group: [AppId] %s [groupId] %s " +
                                     "[instanceId] %s", event.getAppId(), event.getGroupId(),
                             event.getInstanceId()));
+                }
+            } else {
+                // Apply changes to the topology
+                GroupStatus status = GroupStatus.Terminated;
+                if (!context.isStateTransitionValid(status)) {
+                    log.error("Invalid State Transition from " + context.getStatus() + " to " +
+                            status);
                     return false;
                 }
+                context.setStatus(status);
             }
-            // Apply changes to the topology
-            GroupStatus status = GroupStatus.Terminated;
-            if (!context.isStateTransitionValid(status)) {
-                log.error("Invalid State Transition from " + context.getStatus() + " to " +
-                        status);
-                return false;
-            }
-            context.setStatus(status);
-
         }
 
         // Notify event listeners

http://git-wip-us.apache.org/repos/asf/stratos/blob/9ccd5017/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceCreatedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceCreatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceCreatedMessageProcessor.java
index bb52d42..5e1fbcb 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceCreatedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceCreatedMessageProcessor.java
@@ -113,6 +113,7 @@ public class ClusterInstanceCreatedMessageProcessor extends MessageProcessor {
                 log.debug(String.format("Cluster not exists in service: [service] %s [cluster] %s", event.getServiceName(),
                         event.getClusterId()));
             }
+            return false;
         } else {
             // Apply changes to the topology
             ClusterInstance clusterInstance = event.getClusterInstance();
@@ -122,8 +123,9 @@ public class ClusterInstanceCreatedMessageProcessor extends MessageProcessor {
                                     "[service] %s [cluster] %s [Instance] %s", event.getServiceName(),
                             event.getClusterId(), clusterInstance.getInstanceId()));
                 }
+            } else {
+                cluster.addInstanceContext(clusterInstance.getInstanceId(), clusterInstance);
             }
-            cluster.addInstanceContext(clusterInstance.getInstanceId(), clusterInstance);
         }
         // Notify event listeners
         notifyEventListeners(event);

http://git-wip-us.apache.org/repos/asf/stratos/blob/9ccd5017/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java
index 4e43f35..629f32a 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java
@@ -122,18 +122,19 @@ public class ClusterInstanceTerminatedProcessor extends MessageProcessor {
             // Apply changes to the topology
             ClusterInstance context = cluster.getInstanceContexts(event.getInstanceId());
             if(context == null) {
-                log.warn("Cluster Instance Context is not found for [cluster] " +
-                        event.getClusterId() + " [instance-id] " +
-                        event.getInstanceId());
-                return false;
-            }
-            ClusterStatus status = ClusterStatus.Terminated;
-            if (!context.isStateTransitionValid(status)) {
-                log.error("Invalid State Transition from " + context.getStatus() + " to " + status);
+                if(log.isDebugEnabled()) {
+                    log.warn("Cluster Instance Context is already removed for [cluster] " +
+                            event.getClusterId() + " [instance-id] " +
+                            event.getInstanceId());
+                }
+            } else {
+                ClusterStatus status = ClusterStatus.Terminated;
+                if (!context.isStateTransitionValid(status)) {
+                    log.error("Invalid State Transition from " + context.getStatus() + " to " + status);
+                }
+                context.setStatus(status);
+                cluster.removeInstanceContext(event.getInstanceId());
             }
-            context.setStatus(status);
-            cluster.removeInstanceContext(event.getInstanceId());
-
         }
 
         // Notify event listeners


[5/7] stratos git commit: fixing undeployment issue by removing the instances

Posted by re...@apache.org.
fixing undeployment issue by removing the instances


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

Branch: refs/heads/4.1.0-test
Commit: 196336cbee7254f65b2c6ae1a1b0f900f4f18b17
Parents: dc5ae90
Author: reka <rt...@gmail.com>
Authored: Thu Dec 11 14:19:04 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 11 19:24:11 2014 +0530

----------------------------------------------------------------------
 .../applications/topic/ApplicationBuilder.java  |  2 +-
 .../topic/ApplicationsEventPublisher.java       |  4 +-
 .../partition/ClusterLevelPartitionContext.java |  9 +++++
 .../AutoscalerTopologyEventReceiver.java        |  1 +
 .../monitor/cluster/VMClusterMonitor.java       | 20 ++++++----
 .../monitor/component/ApplicationMonitor.java   |  2 +-
 .../monitor/component/GroupMonitor.java         | 27 ++++++++-----
 .../group/GroupStatusActiveProcessor.java       | 36 ++++++++----------
 .../group/GroupStatusTerminatedProcessor.java   | 33 ++++++++--------
 .../group/GroupStatusTerminatingProcessor.java  | 40 +++++++++-----------
 .../ApplicationInstanceTerminatedEvent.java     | 11 +++---
 ...licationInstanceCreatedMessageProcessor.java |  3 +-
 ...ationInstanceTerminatedMessageProcessor.java | 11 +++++-
 .../ClusterInstanceTerminatedProcessor.java     |  3 ++
 14 files changed, 113 insertions(+), 89 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/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 d46a232..1194a6f 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
@@ -304,7 +304,7 @@ public class ApplicationBuilder {
                     //ApplicationHolder.removeApplication(appId);
                     log.info("Application run time is removed: [application-id] " + appId);
                 }
-                ApplicationsEventPublisher.sendApplicationInstanceTerminatedEvent(appId, clusterData);
+                ApplicationsEventPublisher.sendApplicationInstanceTerminatedEvent(appId, instanceId);
             } else {
                 log.warn(String.format("Application state transition is not valid: [application-id] %s " +
                                 " [current-status] %s [status-requested] %s", appId,

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationsEventPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationsEventPublisher.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationsEventPublisher.java
index 52e8c55..c03a92b 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationsEventPublisher.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/topic/ApplicationsEventPublisher.java
@@ -119,12 +119,12 @@ public class ApplicationsEventPublisher {
         publishEvent(applicationTerminatingEvent);
     }
 
-    public static void sendApplicationInstanceTerminatedEvent(String appId, Set<ClusterDataHolder> clusterData) {
+    public static void sendApplicationInstanceTerminatedEvent(String appId, String instanceId) {
         if (log.isInfoEnabled()) {
             log.info("Publishing Application terminated event for [application]: " + appId);
         }
         ApplicationInstanceTerminatedEvent applicationTerminatedEvent =
-                new ApplicationInstanceTerminatedEvent(appId, clusterData);
+                new ApplicationInstanceTerminatedEvent(appId, instanceId);
         publishEvent(applicationTerminatedEvent);
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
index 663f301..f3f5046 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
@@ -539,6 +539,15 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
         return null;
     }
 
+    public MemberContext getObsoleteMember(String memberId) {
+        for (MemberContext memberContext : obsoletedMembers.values()) {
+            if (memberId.equals(memberContext.getMemberId())) {
+                return memberContext;
+            }
+        }
+        return null;
+    }
+
     public long getTerminationPendingMemberExpiryTime() {
         return terminationPendingMemberExpiryTime;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/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 53d60b7..865cfb7 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
@@ -321,6 +321,7 @@ public class AutoscalerTopologyEventReceiver {
             @Override
             protected void onEvent(Event event) {
                 try {
+                    log.info("[MemberReadyToShutdownEvent] Received: " + event.getClass());
                     MemberReadyToShutdownEvent memberReadyToShutdownEvent = (MemberReadyToShutdownEvent) event;
                     String clusterId = memberReadyToShutdownEvent.getClusterId();
                     AutoscalerContext asCtx = AutoscalerContext.getInstance();

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
index cf1e090..f208edc 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
@@ -919,15 +919,19 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
             //move member to pending termination list
             if (partitionCtxt.getPendingTerminationMember(memberId) != null) {
                 partitionCtxt.movePendingTerminationMemberToObsoleteMembers(memberId);
-            } else if (partitionCtxt.getPendingTerminationMember(memberId) != null) {
-                // add member to obsolete list since the member is shutdown ready member
-                partitionCtxt.movePendingTerminationMemberToObsoleteMembers(memberId);
-            }
+                if (log.isInfoEnabled()) {
+                    log.info(String.format("Member is removed from the pending termination members " +
+                            "and moved to obsolete list: [member] %s " +
+                            "[partition] %s [cluster] %s ", memberId, partitionId, clusterId));
+                }
+            } else if(partitionCtxt.getObsoleteMember(memberId) != null) {
+                if (log.isInfoEnabled()) {
+                    log.info(String.format("Member is  in obsolete list: [member] %s " +
+                            "[partition] %s [cluster] %s ", memberId, partitionId, clusterId));
+                }
+            } //TODO else part
+
 
-            if (log.isInfoEnabled()) {
-                log.info(String.format("Member is terminated and removed from the active members list: [member] %s " +
-                        "[partition] %s [cluster] %s ", memberId, partitionId, clusterId));
-            }
         } catch (Exception e) {
             String msg = "Error processing event " + e.getLocalizedMessage();
             log.error(msg, e);

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/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 f8f2e82..9d0a943 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
@@ -151,7 +151,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
 
             ApplicationInstance instance = (ApplicationInstance) instanceIdToInstanceMap.get(instanceId);
             if (instance != null) {
-                if (instance.getStatus() == ApplicationStatus.Terminating) {
+                if (this.isTerminating()) {
                     ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
                             appId, instanceId);
                 } else {

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/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 10bcec1..15aa733 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
@@ -173,9 +173,12 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
 
     @Override
     public void onChildStatusEvent(MonitorStatusEvent statusEvent) {
-        String childId = statusEvent.getId();
-        String instanceId = statusEvent.getInstanceId();
-        LifeCycleState status1 = statusEvent.getStatus();
+
+         String childId = statusEvent.getId();
+         String instanceId = statusEvent.getInstanceId();
+         LifeCycleState status1 = statusEvent.getStatus();
+         String id = this.id;
+
         //Events coming from parent are In_Active(in faulty detection), Scaling events, termination
 
         if (status1 == ClusterStatus.Active || status1 == GroupStatus.Active) {
@@ -183,34 +186,40 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
 
         } else if (status1 == ClusterStatus.Inactive || status1 == GroupStatus.Inactive) {
             //handling restart of stratos
-            if (!this.aliasToActiveMonitorsMap.get(childId).hasStartupDependents()) {
+            if (!aliasToActiveMonitorsMap.get(childId).hasStartupDependents()) {
                 onChildActivatedEvent(childId, instanceId);
             } else {
-                this.markInstanceAsInactive(childId, instanceId);
+                markInstanceAsInactive(childId, instanceId);
                 onChildInactiveEvent(childId, instanceId);
             }
 
         } else if (status1 == ClusterStatus.Terminating || status1 == GroupStatus.Terminating) {
-            //mark the child monitor as inActive in the map
+            //mark the child monitor as inactive in the map
             markInstanceAsTerminating(childId, instanceId);
 
         } else if (status1 == ClusterStatus.Terminated || status1 == GroupStatus.Terminated) {
             //Check whether all dependent goes Terminated and then start them in parallel.
             removeInstanceFromFromInactiveMap(childId, instanceId);
             removeInstanceFromFromTerminatingMap(childId, instanceId);
-            GroupInstance instance = (GroupInstance) this.instanceIdToInstanceMap.get(instanceId);
+
+            GroupInstance instance = (GroupInstance) instanceIdToInstanceMap.get(instanceId);
             if (instance != null) {
                 if (instance.getStatus() == GroupStatus.Terminating || instance.getStatus() == GroupStatus.Terminated) {
-                    ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(this.id,
+                    ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().process(id,
                             appId, instanceId);
                 } else {
                     onChildTerminatedEvent(childId, instanceId);
                 }
+            } else {
+                log.warn("The required instance cannot be found in the the [GroupMonitor] " +
+                        id);
             }
         }
-
     }
 
+
+
+
     @Override
     public void onParentStatusEvent(MonitorStatusEvent statusEvent)
             throws MonitorNotFoundException {

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/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 da2562a..69a6bfa 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
@@ -81,27 +81,23 @@ public class GroupStatusActiveProcessor extends GroupStatusProcessor {
             groups = component.getAliasToGroupMap();
             clusterData = component.getClusterDataMap();
 
-            if (component.isGroupScalingEnabled()) {
-
-            } else {
-                if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Active, instanceId) ||
-                        clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Active, instanceId) ||
-                        getAllClusterInSameState(clusterData, ClusterStatus.Active, instanceId) &&
-                                getAllGroupInSameState(groups, GroupStatus.Active, instanceId)) {
-                    //send activation event
-                    if (component instanceof Application) {
-                        //send application activated event
-                        log.info("sending app activate: " + appId);
-                        ApplicationBuilder.handleApplicationInstanceActivatedEvent(appId, instanceId);
-                        return true;
-                    } else if (component instanceof Group) {
-                        //send activation to the parent
-                        log.info("sending group activate: " + component.getUniqueIdentifier());
-                        ApplicationBuilder.handleGroupInstanceActivatedEvent(appId, component.getUniqueIdentifier(), instanceId);
-                        return true;
-                    }
-
+            if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Active, instanceId) ||
+                    clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Active, instanceId) ||
+                    getAllClusterInSameState(clusterData, ClusterStatus.Active, instanceId) &&
+                            getAllGroupInSameState(groups, GroupStatus.Active, instanceId)) {
+                //send activation event
+                if (component instanceof Application) {
+                    //send application activated event
+                    log.info("sending app activate: " + appId);
+                    ApplicationBuilder.handleApplicationInstanceActivatedEvent(appId, instanceId);
+                    return true;
+                } else if (component instanceof Group) {
+                    //send activation to the parent
+                    log.info("sending group activate: " + component.getUniqueIdentifier());
+                    ApplicationBuilder.handleGroupInstanceActivatedEvent(appId, component.getUniqueIdentifier(), instanceId);
+                    return true;
                 }
+
             }
         } finally {
             ApplicationHolder.releaseWriteLock();

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/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 b365d71..578037d 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
@@ -39,6 +39,7 @@ public class GroupStatusTerminatedProcessor extends GroupStatusProcessor {
     public void setNext(StatusProcessor nextProcessor) {
         this.nextProcessor = (GroupStatusProcessor) nextProcessor;
     }
+
     @Override
     public boolean process(String idOfComponent, String appId,
                            String instanceId) {
@@ -84,24 +85,20 @@ public class GroupStatusTerminatedProcessor extends GroupStatusProcessor {
             groups = component.getAliasToGroupMap();
             clusterData = component.getClusterDataMap();
 
-            if (component.isGroupScalingEnabled()) {
-
-            } else {
-                if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Terminated, instanceId) ||
-                        clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Terminated, instanceId) ||
-                        getAllClusterInSameState(clusterData, ClusterStatus.Terminated, instanceId) &&
-                                getAllGroupInSameState(groups, GroupStatus.Terminated, instanceId)) {
-                    //send the terminated event
-                    if (component instanceof Application) {
-                        log.info("sending app terminated: " + appId);
-                        ApplicationBuilder.handleApplicationInstanceTerminatedEvent(appId, instanceId);
-                        return true;
-                    } else if (component instanceof Group) {
-                            log.info("sending group terminated : " + component.getUniqueIdentifier());
-                            ApplicationBuilder.handleGroupInstanceTerminatedEvent(appId,
-                                    component.getUniqueIdentifier(), instanceId);
-                            return true;
-                    }
+            if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Terminated, instanceId) ||
+                    clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Terminated, instanceId) ||
+                    getAllClusterInSameState(clusterData, ClusterStatus.Terminated, instanceId) &&
+                            getAllGroupInSameState(groups, GroupStatus.Terminated, instanceId)) {
+                //send the terminated event
+                if (component instanceof Application) {
+                    log.info("sending app terminated: " + appId);
+                    ApplicationBuilder.handleApplicationInstanceTerminatedEvent(appId, instanceId);
+                    return true;
+                } else if (component instanceof Group) {
+                    log.info("sending group terminated : " + component.getUniqueIdentifier());
+                    ApplicationBuilder.handleGroupInstanceTerminatedEvent(appId,
+                            component.getUniqueIdentifier(), instanceId);
+                    return true;
                 }
             }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/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 2fe0cd4..c536146 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
@@ -85,28 +85,24 @@ public class GroupStatusTerminatingProcessor extends GroupStatusProcessor {
             groups = component.getAliasToGroupMap();
             clusterData = component.getClusterDataMap();
 
-            if (component.isGroupScalingEnabled()) {
-
-            } else {
-                if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Terminating, instanceId) ||
-                        clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Terminating, instanceId) ||
-                        getAllClusterInSameState(clusterData, ClusterStatus.Terminating, instanceId) &&
-                                getAllGroupInSameState(groups, GroupStatus.Terminating, instanceId)) {
-                    //send the terminated event
-                    if (component instanceof Application) {
-                        log.info("sending app terminating for [application] " + appId + " and for " +
-                                " [instance] " + instanceId);
-                        ApplicationBuilder.handleApplicationInstanceTerminatedEvent(appId, instanceId);
-                        return true;
-                    } else if (component instanceof Group) {
-                        //send activation to the parent
-                            log.info("sending group terminating for [group] " +
-                                    component.getUniqueIdentifier() + " and for [instance] "
-                                    + instanceId);
-                            ApplicationBuilder.handleGroupTerminatingEvent(appId,
-                                    component.getUniqueIdentifier(), instanceId);
-                            return true;
-                    }
+            if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Terminating, instanceId) ||
+                    clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Terminating, instanceId) ||
+                    getAllClusterInSameState(clusterData, ClusterStatus.Terminating, instanceId) &&
+                            getAllGroupInSameState(groups, GroupStatus.Terminating, instanceId)) {
+                //send the terminated event
+                if (component instanceof Application) {
+                    log.info("sending app terminating for [application] " + appId + " and for " +
+                            " [instance] " + instanceId);
+                    ApplicationBuilder.handleApplicationInstanceTerminatedEvent(appId, instanceId);
+                    return true;
+                } else if (component instanceof Group) {
+                    //send activation to the parent
+                    log.info("sending group terminating for [group] " +
+                            component.getUniqueIdentifier() + " and for [instance] "
+                            + instanceId);
+                    ApplicationBuilder.handleGroupTerminatingEvent(appId,
+                            component.getUniqueIdentifier(), instanceId);
+                    return true;
                 }
             }
         } finally {

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceTerminatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceTerminatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceTerminatedEvent.java
index 1d05ba3..25def05 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceTerminatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/applications/ApplicationInstanceTerminatedEvent.java
@@ -31,18 +31,17 @@ public class ApplicationInstanceTerminatedEvent extends Event implements Seriali
     private static final long serialVersionUID = 2625412714611885089L;
 
     private String appId;
-    private Set<ClusterDataHolder> clusterData;
-
-    public ApplicationInstanceTerminatedEvent(String appId, Set<ClusterDataHolder> clusterData) {
+    private String instanceId;
+    public ApplicationInstanceTerminatedEvent(String appId, String instanceId) {
         this.appId = appId;
-        this.clusterData = clusterData;
+        this.instanceId = instanceId;
     }
 
     public String getAppId() {
         return appId;
     }
 
-    public Set<ClusterDataHolder> getClusterData() {
-        return clusterData;
+    public String getInstanceId() {
+        return instanceId;
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceCreatedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceCreatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceCreatedMessageProcessor.java
index e92d581..fe6a3f9 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceCreatedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceCreatedMessageProcessor.java
@@ -95,7 +95,8 @@ public class ApplicationInstanceCreatedMessageProcessor extends MessageProcessor
         }
 
         // check if an Application instance with same name exists in applications instance
-        if (null != applications.getApplication(event.getApplicationId()).getInstanceByNetworkPartitionId(applicationInstance.getNetworkPartitionId())) {
+        if (null != applications.getApplication(event.getApplicationId()).
+                    getInstanceByNetworkPartitionId(applicationInstance.getNetworkPartitionId())) {
 
             log.warn("Application instance with id [ " + applicationInstance.getInstanceId() + " ] already exists");
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java
index c7a39b5..ebba54b 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/applications/ApplicationInstanceTerminatedMessageProcessor.java
@@ -20,7 +20,9 @@ package org.apache.stratos.messaging.message.processor.applications;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.messaging.domain.applications.ApplicationStatus;
 import org.apache.stratos.messaging.domain.applications.Applications;
+import org.apache.stratos.messaging.domain.instance.ApplicationInstance;
 import org.apache.stratos.messaging.event.applications.ApplicationInstanceTerminatedEvent;
 import org.apache.stratos.messaging.message.processor.MessageProcessor;
 import org.apache.stratos.messaging.message.processor.applications.updater.ApplicationsUpdater;
@@ -85,9 +87,16 @@ public class ApplicationInstanceTerminatedMessageProcessor extends MessageProces
 
         // check if an Application with same name exists in applications
         String appId = event.getAppId();
+        String instanceId = event.getInstanceId();
         if (applications.applicationExists(appId)) {
             log.warn("Application with id [ " + appId + " ] still exists in Applications, removing it");
-            applications.removeApplication(appId);
+            ApplicationInstance instance = applications.getApplication(appId).
+                                                getInstanceContexts(instanceId);
+            if(instance == null) {
+                log.info("Application [Instance] " + instanceId + " has already been removed");
+            }
+            instance.setStatus(ApplicationStatus.Terminated);
+            applications.getApplication(appId).removeInstance(instanceId);
         }
 
         notifyEventListeners(event);

http://git-wip-us.apache.org/repos/asf/stratos/blob/196336cb/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java
index 6f6d335..4e43f35 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInstanceTerminatedProcessor.java
@@ -116,6 +116,7 @@ public class ClusterInstanceTerminatedProcessor extends MessageProcessor {
             if (log.isDebugEnabled()) {
                 log.debug(String.format("Cluster not exists in service: [service] %s [cluster] %s", event.getServiceName(),
                         event.getClusterId()));
+                return false;
             }
         } else {
             // Apply changes to the topology
@@ -124,12 +125,14 @@ public class ClusterInstanceTerminatedProcessor extends MessageProcessor {
                 log.warn("Cluster Instance Context is not found for [cluster] " +
                         event.getClusterId() + " [instance-id] " +
                         event.getInstanceId());
+                return false;
             }
             ClusterStatus status = ClusterStatus.Terminated;
             if (!context.isStateTransitionValid(status)) {
                 log.error("Invalid State Transition from " + context.getStatus() + " to " + status);
             }
             context.setStatus(status);
+            cluster.removeInstanceContext(event.getInstanceId());
 
         }
 


[2/7] stratos git commit: fixing group termination issue

Posted by re...@apache.org.
fixing group termination issue


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

Branch: refs/heads/4.1.0-test
Commit: 359d323b98ff5d897eac64cae516ad8075b239f5
Parents: 681f597
Author: reka <rt...@gmail.com>
Authored: Tue Dec 9 11:29:28 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 11 19:20:13 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/monitor/component/ParentComponentMonitor.java       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/359d323b/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 91c3724..f2f345a 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
@@ -303,7 +303,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             //handling the killall scenario
             if (this.parent != null) {
                 //send terminating to the parent. So that it will push terminating to its children
-                ApplicationBuilder.handleGroupTerminatingEvent(this.appId, childId, instanceId);
+                ApplicationBuilder.handleGroupTerminatingEvent(this.appId, this.id, instanceId);
             } else {
                 //if it is an application, send terminating event individually for children
                 sendTerminatingEventOnNotification(terminationList, childId, true, instanceId);


[3/7] stratos git commit: fixing startup of VM upon termination

Posted by re...@apache.org.
fixing startup of VM upon termination


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

Branch: refs/heads/4.1.0-test
Commit: 681f5979988d375eec79c9d34375bf29d3deba27
Parents: fb8f23e
Author: reka <rt...@gmail.com>
Authored: Mon Dec 8 23:47:06 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Dec 11 19:20:13 2014 +0530

----------------------------------------------------------------------
 .../component/ParentComponentMonitor.java       | 57 +++++++++++---------
 1 file changed, 32 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/681f5979/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 9f6ca75..91c3724 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
@@ -40,7 +40,6 @@ import org.apache.stratos.autoscaler.exception.policy.PolicyValidationException;
 import org.apache.stratos.autoscaler.monitor.Monitor;
 import org.apache.stratos.autoscaler.monitor.MonitorFactory;
 import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor;
-import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.events.builder.MonitorStatusEventBuilder;
 import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 import org.apache.stratos.messaging.domain.applications.GroupStatus;
@@ -105,7 +104,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             MonitorNotFoundException {
         //start the first dependency
         List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
-                getStartAbleDependencies();
+                getStarAbleDependencies();
         startDependency(applicationContexts, instanceId);
 
     }
@@ -123,6 +122,23 @@ 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 void startDependency(ParentComponent component) {
+        //start the first dependency
+        List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
+                getStarAbleDependencies();
+        Collection<Instance> contexts = component.getInstanceIdToInstanceContextMap().values();
+        //traversing through all the Instance context and start them
+        List<String> instanceIds = new ArrayList<String>();
+        for (Instance context : contexts) {
+            instanceIds.add(context.getInstanceId());
+        }
+        startDependency(applicationContexts, instanceIds);
+    }
+
+    /**
      * This will get invoked based on the activation event of its one of the child
      *
      * @param id alias/clusterId of which receive the activated event
@@ -136,27 +152,28 @@ public abstract class ParentComponentMonitor extends Monitor {
         return startup;
     }
 
+    public boolean startAllChildrenDependency(ParentComponent component, String instanceId)
+            throws TopologyInConsistentException {
+        /*List<ApplicationChildContext> applicationContexts = this.startupDependencyTree
+                .findAllChildrenOfAppContext(id);*/
+        return false;//startDependency(applicationContexts, instanceId);
+    }
+
     /**
      * This will start the parallel dependencies at once from the top level
      * by traversing to find the terminated dependencies.
      * it will get invoked when start a child monitor on termination of a sub tree
      */
-
-    public void startDependencyOnTermination(String instanceId) throws TopologyInConsistentException,
-            MonitorNotFoundException, PolicyValidationException, PartitionValidationException {
-
+    public void startDependencyOnTermination() throws TopologyInConsistentException {
         //start the first dependency which went to terminated
         List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
-                getStarAbleDependenciesByTermination(this, instanceId);
+                getStarAbleDependenciesByTermination();
         for(ApplicationChildContext context : applicationContexts) {
             if(context instanceof GroupChildContext) {
                 GroupMonitor groupMonitor = (GroupMonitor) this.aliasToActiveMonitorsMap.
                                                         get(context.getId());
-                groupMonitor.createInstanceAndStartDependencyOnScaleup(instanceId);
             } else if(context instanceof ClusterChildContext) {
-                VMClusterMonitor clusterMonitor = (VMClusterMonitor) this.
-                                                    aliasToActiveMonitorsMap.get(context.getId());
-                clusterMonitor.createClusterInstanceOnScaleUp(instanceId);
+
             }
         }
 
@@ -185,7 +202,9 @@ public abstract class ParentComponentMonitor extends Monitor {
                 startMonitor(this, context, instanceIds);
             }
         }
+
         return true;
+
     }
 
     /**
@@ -284,7 +303,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             //handling the killall scenario
             if (this.parent != null) {
                 //send terminating to the parent. So that it will push terminating to its children
-                ApplicationBuilder.handleGroupTerminatingEvent(this.appId, this.id, instanceId);
+                ApplicationBuilder.handleGroupTerminatingEvent(this.appId, childId, instanceId);
             } else {
                 //if it is an application, send terminating event individually for children
                 sendTerminatingEventOnNotification(terminationList, childId, true, instanceId);
@@ -363,18 +382,10 @@ public abstract class ParentComponentMonitor extends Monitor {
                 (parentContexts.isEmpty() || parentsTerminated || allParentsActive)) {
             //Find the non existent monitor by traversing dependency tree
             try {
-                this.startDependencyOnTermination(instanceId);
+                this.startDependencyOnTermination();
             } catch (TopologyInConsistentException e) {
                 //TODO revert the siblings and notify parent, change a flag for reverting/un-subscription
                 log.error("Error while starting the monitor upon termination" + e);
-            } catch (MonitorNotFoundException e) {
-                //TODO revert the siblings and notify parent, change a flag for reverting/un-subscription
-                log.error("Error while starting the monitor by relevant monitor not found" + e);
-            } catch (PartitionValidationException e) {
-                log.error("Error while starting the monitor upon termination by partition validation failed" + e);
-            } catch (PolicyValidationException e) {
-                log.error("Error while starting the monitor upon termination by policy validation failed" + e);
-
             }
         } else {
             ServiceReferenceHolder.getInstance().getGroupStatusProcessorChain().
@@ -551,10 +562,6 @@ public abstract class ParentComponentMonitor extends Monitor {
         return aliasToActiveMonitorsMap;
     }
 
-    public Monitor getMonitor(String monitorId) {
-        return this.aliasToActiveMonitorsMap.get(monitorId);
-    }
-
     public void setAliasToActiveMonitorsMap(Map<String, Monitor> aliasToActiveMonitorsMap) {
         this.aliasToActiveMonitorsMap = aliasToActiveMonitorsMap;
     }