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/10/21 14:24:54 UTC

[2/2] git commit: removing the common Status for Topology and using the correct status for the application, Group and cluster

removing the common Status for Topology and using the correct status for the application, Group and cluster


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

Branch: refs/heads/4.0.0-grouping
Commit: 77676a680ce3a270f267af367e4652db0a259416
Parents: 4a3a942
Author: reka <rt...@gmail.com>
Authored: Tue Oct 21 17:54:38 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Oct 21 17:54:38 2014 +0530

----------------------------------------------------------------------
 .../grouping/dependency/DependencyTree.java     |  22 +-
 .../AutoscalerTopologyEventReceiver.java        |  35 --
 .../monitor/MonitorStatusEventBuilder.java      |   3 +-
 .../monitor/cluster/ClusterMonitor.java         |   1 -
 .../monitor/cluster/LbClusterMonitor.java       |   9 +-
 .../monitor/events/ClusterStatusEvent.java      |   1 -
 .../termination-change.patch                    | 596 +++++++++++++++++++
 .../impl/CloudControllerServiceImpl.java        |   4 +-
 .../controller/topology/TopologyBuilder.java    |  15 +-
 .../topology/TopologyEventPublisher.java        |  18 +-
 .../messaging/domain/topology/Cluster.java      |  57 +-
 .../domain/topology/ParentComponent.java        |  10 -
 .../messaging/domain/topology/Status.java       |  40 --
 .../topology/ClusterMaintenanceModeEvent.java   |  58 --
 .../ClusterMaintenanceModeEventListener.java    |  25 -
 .../ApplicationActivatedMessageProcessor.java   |   6 +-
 .../topology/ClusterActivatedProcessor.java     |  11 +-
 .../topology/ClusterInActivateProcessor.java    |  19 +-
 .../ClusterMaintenanceModeMessageProcessor.java | 129 ----
 .../topology/GroupActivatedProcessor.java       |   4 +-
 .../topology/GroupInActivateProcessor.java      |   5 +-
 .../topology/TopologyMessageProcessorChain.java |   6 -
 22 files changed, 665 insertions(+), 409 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java
index 6dbbce3..61648b3 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java
@@ -21,7 +21,6 @@ package org.apache.stratos.autoscaler.grouping.dependency;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.grouping.dependency.context.ApplicationContext;
-import org.apache.stratos.messaging.domain.topology.Status;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -34,8 +33,6 @@ public class DependencyTree {
 
     private List<ApplicationContext> applicationContextList;
 
-    private Status status;
-
     private boolean started;
 
     private boolean terminated;
@@ -115,11 +112,11 @@ public class DependencyTree {
 
     private List<ApplicationContext> findAllParent(List<ApplicationContext> parentContexts, String id) {
         ApplicationContext context = findParentContextWithId(null, id, this.applicationContextList);
-        if(context != null) {
+        if (context != null) {
             parentContexts.add(context);
             findAllParent(parentContexts, context.getId());
         }
-        return  parentContexts;
+        return parentContexts;
     }
 
 
@@ -137,6 +134,7 @@ public class DependencyTree {
         }
         return null;
     }
+
     /**
      * Getting the next start able dependencies upon the activate event
      * received for a group/cluster which is part of this tree.
@@ -175,9 +173,9 @@ public class DependencyTree {
         if (this.killDependent) {
             //finding the ApplicationContext of the given id
             //finding all the children of the found application context
-                findAllChildrenOfAppContext(applicationContext.getApplicationContextList(),
-                        allChildrenOfAppContext);
-                return allChildrenOfAppContext;
+            findAllChildrenOfAppContext(applicationContext.getApplicationContextList(),
+                    allChildrenOfAppContext);
+            return allChildrenOfAppContext;
         } else if (this.killAll) {
             //killall will be killed by the monitor from it's list.
             findAllChildrenOfAppContext(this.applicationContextList,
@@ -236,14 +234,6 @@ public class DependencyTree {
         this.terminated = terminated;
     }
 
-    public Status getStatus() {
-        return status;
-    }
-
-    public void setStatus(Status status) {
-        this.status = status;
-    }
-
     public boolean isKillDependent() {
         return killDependent;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
index c5095e3..c650a3d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -344,41 +344,6 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
 
         });
 
-
-        topologyEventReceiver.addEventListener(new ClusterMaintenanceModeEventListener() {
-            @Override
-            protected void onEvent(Event event) {
-
-                ClusterMaintenanceModeEvent clusterMaitenanceEvent = null;
-
-                try {
-                    log.info("Event received: " + event);
-                    clusterMaitenanceEvent = (ClusterMaintenanceModeEvent) event;
-                    //TopologyManager.acquireReadLock();
-                    TopologyManager.acquireReadLockForCluster(clusterMaitenanceEvent.getServiceName(),
-                            clusterMaitenanceEvent.getClusterId());
-
-                    Service service = TopologyManager.getTopology().getService(clusterMaitenanceEvent.getServiceName());
-                    Cluster cluster = service.getCluster(clusterMaitenanceEvent.getClusterId());
-                    AbstractClusterMonitor monitor;
-                    if (AutoscalerContext.getInstance().monitorExist((cluster.getClusterId()))) {
-                        monitor = (AbstractClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterMaitenanceEvent.getClusterId());
-                        monitor.setStatus(ClusterStatus.Inactive);
-                    } else {
-                        log.error("cluster monitor not exists for the cluster: " + cluster.toString());
-                    }
-                } catch (Exception e) {
-                    log.error("Error processing event", e);
-                } finally {
-                    //TopologyManager.releaseReadLock();
-                    TopologyManager.releaseReadLockForCluster(clusterMaitenanceEvent.getServiceName(),
-                            clusterMaitenanceEvent.getClusterId());
-                }
-            }
-
-        });
-
-
         topologyEventReceiver.addEventListener(new ClusterRemovedEventListener() {
             @Override
             protected void onEvent(Event event) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorStatusEventBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorStatusEventBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorStatusEventBuilder.java
index a27e056..fcb0f06 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorStatusEventBuilder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorStatusEventBuilder.java
@@ -27,7 +27,6 @@ import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
 import org.apache.stratos.messaging.domain.topology.ApplicationStatus;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.GroupStatus;
-import org.apache.stratos.messaging.domain.topology.Status;
 
 /**
  * This will build the necessary monitor status events to be sent to the parent/child  monitor
@@ -51,7 +50,7 @@ public class MonitorStatusEventBuilder {
     }
 
     private static void notifyParent(ParentComponentMonitor parent, MonitorStatusEvent statusEvent) {
-       parent.onEvent(statusEvent);
+        parent.onEvent(statusEvent);
     }
 
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
index a129d18..5fabab4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
@@ -31,7 +31,6 @@ import org.apache.stratos.cloud.controller.stub.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.stub.pojo.Properties;
 import org.apache.stratos.cloud.controller.stub.pojo.Property;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
-import org.apache.stratos.messaging.domain.topology.Status;
 
 import java.util.ArrayList;
 import java.util.List;

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/LbClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/LbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/LbClusterMonitor.java
index d3a2371..895f018 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/LbClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/LbClusterMonitor.java
@@ -27,7 +27,6 @@ import org.apache.stratos.autoscaler.monitor.AbstractClusterMonitor;
 import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy;
 import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
-import org.apache.stratos.messaging.domain.topology.Status;
 
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -39,7 +38,6 @@ import java.util.concurrent.ConcurrentHashMap;
 public class LbClusterMonitor extends AbstractClusterMonitor {
 
     private static final Log log = LogFactory.getLog(LbClusterMonitor.class);
-    private Status status;
 
     public LbClusterMonitor(String clusterId, String serviceId, DeploymentPolicy deploymentPolicy,
                             AutoscalePolicy autoscalePolicy) {
@@ -63,12 +61,12 @@ public class LbClusterMonitor extends AbstractClusterMonitor {
                 log.debug("Cluster monitor is running.. " + this.toString());
             }
             try {
-                if( !ClusterStatus.Inactive.equals(status)) {
+                if (!ClusterStatus.Inactive.equals(status)) {
                     monitor();
                 } else {
                     if (log.isDebugEnabled()) {
                         log.debug("LB Cluster monitor is suspended as the cluster is in " +
-                                    ClusterStatus.Inactive + " mode......");
+                                ClusterStatus.Inactive + " mode......");
                     }
                 }
             } catch (Exception e) {
@@ -92,7 +90,7 @@ public class LbClusterMonitor extends AbstractClusterMonitor {
                 if (partitionContext != null) {
                     minCheckKnowledgeSession.setGlobal("clusterId", clusterId);
                     minCheckKnowledgeSession.setGlobal("isPrimary", false);
-                    
+
                     if (log.isDebugEnabled()) {
                         log.debug(String.format("Running minimum check for partition %s ",
                                 partitionContext.getPartitionId()));
@@ -117,5 +115,4 @@ public class LbClusterMonitor extends AbstractClusterMonitor {
     }
 
 
-
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java
index de8f0d5..58c59ba 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java
@@ -19,7 +19,6 @@
 package org.apache.stratos.autoscaler.monitor.events;
 
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
-import org.apache.stratos.messaging.domain.topology.Status;
 
 /**
  * This will use to notify observers upon a cluster activation events received in Topology.

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.autoscaler/termination-change.patch
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/termination-change.patch b/components/org.apache.stratos.autoscaler/termination-change.patch
new file mode 100644
index 0000000..8573805
--- /dev/null
+++ b/components/org.apache.stratos.autoscaler/termination-change.patch
@@ -0,0 +1,596 @@
+diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java
+index d3dded3..156f3a5 100644
+--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java
++++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java
+@@ -46,6 +46,10 @@ public class DependencyTree {
+ 
+     private boolean killDependent;
+ 
++    private boolean startupOder;
++
++    private boolean reverseStartupOrder;
++
+     private String id;
+ 
+     public DependencyTree(String id) {
+@@ -88,7 +92,7 @@ public class DependencyTree {
+      */
+     private ApplicationContext findApplicationContextWithId(String id, List<ApplicationContext> contexts) {
+         for (ApplicationContext context : contexts) {
+-            if (context.getId().equals(id)) {
++            if (context.getId().equals(id) && context.getCurrentStatus() == null) {
+                 return context;
+             }
+         }
+@@ -130,23 +134,23 @@ public class DependencyTree {
+      * @param id the alias/id of group/cluster in which terminated event received
+      * @return all the kill able children dependencies
+      */
+-    public List<ApplicationContext> getKillDependencies(String id) {
++    public List<ApplicationContext> getTerminationDependencies(String id) {
+         List<ApplicationContext> allChildrenOfAppContext = new ArrayList<ApplicationContext>();
++        ApplicationContext applicationContext = findApplicationContextWithId(id);
+ 
+-        if (killDependent) {
++        if (this.killDependent) {
+             //finding the ApplicationContext of the given id
+-            ApplicationContext applicationContext = findApplicationContextWithId(id);
+             //finding all the children of the found application context
+-            findAllChildrenOfAppContext(applicationContext.getApplicationContextList(),
+-                    allChildrenOfAppContext);
+-            return allChildrenOfAppContext;
+-        } else if (killAll) {
++                findAllChildrenOfAppContext(applicationContext.getApplicationContextList(),
++                        allChildrenOfAppContext);
++                return allChildrenOfAppContext;
++        } else if (this.killAll) {
+             //killall will be killed by the monitor from it's list.
+             findAllChildrenOfAppContext(this.applicationContextList,
+                     allChildrenOfAppContext);
+ 
+         }
+-        //return empty for the kill-none case
++        //return empty for the kill-none case, what ever returns here will be killed in
+         return allChildrenOfAppContext;
+     }
+ 
+@@ -221,4 +225,20 @@ public class DependencyTree {
+     public void setId(String id) {
+         this.id = id;
+     }
++
++    public boolean isStartupOder() {
++        return startupOder;
++    }
++
++    public void setStartupOder(boolean startupOder) {
++        this.startupOder = startupOder;
++    }
++
++    public boolean isReverseStartupOrder() {
++        return reverseStartupOrder;
++    }
++
++    public void setReverseStartupOrder(boolean reverseStartupOrder) {
++        this.reverseStartupOrder = reverseStartupOrder;
++    }
+ }
+diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/context/ApplicationContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/context/ApplicationContext.java
+index f923bb0..5b98264 100644
+--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/context/ApplicationContext.java
++++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/context/ApplicationContext.java
+@@ -22,6 +22,7 @@ import org.apache.stratos.messaging.domain.topology.Status;
+ 
+ import java.util.ArrayList;
+ import java.util.List;
++import java.util.Stack;
+ 
+ /**
+  * This is to keep track of the
+@@ -35,13 +36,13 @@ public abstract class ApplicationContext {
+ 
+     private Status status;
+ 
+-    private List<Status> statusLifeCycle;
++    private Stack<Status> statusLifeCycle;
+ 
+     protected boolean killDependent;
+ 
+     public ApplicationContext(String id, boolean killDependent) {
+         applicationContextList = new ArrayList<ApplicationContext>();
+-        statusLifeCycle = new ArrayList<Status>();
++        statusLifeCycle = new Stack<Status>();
+         this.killDependent = killDependent;
+         this.id = id;
+     }
+@@ -60,7 +61,7 @@ public abstract class ApplicationContext {
+     }
+ 
+     public void addStatusToLIfeCycle(Status status) {
+-       this.statusLifeCycle.add(status);
++       this.statusLifeCycle.push(status);
+     }
+ 
+     public String getId() {
+@@ -71,11 +72,11 @@ public abstract class ApplicationContext {
+         this.id = id;
+     }
+ 
+-    public Status getStatus() {
++    public Status getCurrentStatus() {
+         return status;
+     }
+ 
+-    public void setStatus(Status status) {
++    public void setCurrentStatus(Status status) {
+         this.status = status;
+     }
+ 
+@@ -83,7 +84,15 @@ public abstract class ApplicationContext {
+         return statusLifeCycle;
+     }
+ 
+-    public void setStatusLifeCycle(List<Status> statusLifeCycle) {
+-        this.statusLifeCycle = statusLifeCycle;
++    public boolean hasChild() {
++        boolean hasChild;
++        if(this.applicationContextList.isEmpty()) {
++            hasChild = false;
++        } else {
++            hasChild = true;
++        }
++        return hasChild;
+     }
++
++
+ }
+diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
+index 801af0e..c19c2a0 100644
+--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
++++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
+@@ -430,6 +430,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
+                     String memberId = memberTerminatedEvent.getMemberId();
+                     partitionContext.removeMemberStatsContext(memberId);
+ 
++
+                     if (partitionContext.removeTerminationPendingMember(memberId)) {
+                         if (log.isDebugEnabled()) {
+                             log.debug(String.format("Member is removed from termination pending " +
+@@ -452,6 +453,9 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
+                         log.info(String.format("Member stat context has been removed " +
+                                 "               successfully: [member] %s", memberId));
+                     }
++                    //Checking whether the cluster state can be changed either from in_active to created/terminating to terminated
++                    StatusChecker.getInstance().onMemberTermination(clusterId);
++
+ //                partitionContext.decrementCurrentActiveMemberCount(1);
+ 
+ 
+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 4f501d2..aeb0e28 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
+@@ -120,6 +120,7 @@ public abstract class Monitor implements EventHandler {
+             }
+             if (context instanceof GroupContext) {
+                 startGroupMonitor(this, context.getId());
++                //context.setCurrentStatus(Status.Created);
+             } else if (context instanceof ClusterContext) {
+                 String clusterId = context.getId();
+                 String serviceName = null;
+@@ -144,6 +145,7 @@ public abstract class Monitor implements EventHandler {
+                                 log.debug("Dependency check starting the [cluster]" + clusterId);
+                             }
+                             startClusterMonitor(this, cluster);
++                            //context.setCurrentStatus(Status.Created);
+                         } else {
+                             String msg = "[Cluster] " + clusterId + " cannot be found in the " +
+                                     "Topology for [service] " + serviceName;
+@@ -372,9 +374,10 @@ public abstract class Monitor implements EventHandler {
+                 try {
+                     if (log.isDebugEnabled()) {
+                         log.debug("Group monitor is going to be started for [group] "
+-                                + groupId);
++                                + groupId );
+                     }
+                     monitor = AutoscalerUtil.getGroupMonitor(groupId, appId);
++                    //setting the parent monitor
+                     monitor.setParent(parent);
+                     //setting the status of cluster monitor w.r.t Topology cluster
+                     //if(group.getStatus() != Status.Created &&
+diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
+index 5b6598a..5eab977 100644
+--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
++++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
+@@ -29,7 +29,6 @@ import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
+ import org.apache.stratos.autoscaler.monitor.group.GroupMonitor;
+ import org.apache.stratos.autoscaler.status.checker.StatusChecker;
+ import org.apache.stratos.messaging.domain.topology.Application;
+-import org.apache.stratos.messaging.domain.topology.ParentComponent;
+ import org.apache.stratos.messaging.domain.topology.Status;
+ 
+ import java.util.ArrayList;
+@@ -63,7 +62,7 @@ public class ApplicationMonitor extends Monitor {
+         for (AbstractClusterMonitor monitor : this.clusterIdToClusterMonitorsMap.values()) {
+             clusters.add(monitor.getClusterId());
+         }
+-        //TODO rest
++        //TODO restart
+         return clusters;
+ 
+     }
+@@ -261,7 +260,7 @@ public class ApplicationMonitor extends Monitor {
+ 
+                 }
+                 //updating the life cycle and current status
+-                context.setStatus(statusEvent.getStatus());
++                context.setCurrentStatus(statusEvent.getStatus());
+                 context.addStatusToLIfeCycle(statusEvent.getStatus());
+                 if(!startDep) {
+                     //Checking in the children whether all are active,
+diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
+index 0bdad16..0aa89fa 100644
+--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
++++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
+@@ -23,16 +23,21 @@ import org.apache.commons.logging.LogFactory;
+ import org.apache.stratos.autoscaler.exception.DependencyBuilderException;
+ import org.apache.stratos.autoscaler.exception.TopologyInConsistentException;
+ import org.apache.stratos.autoscaler.grouping.dependency.context.ApplicationContext;
++import org.apache.stratos.autoscaler.grouping.dependency.context.ClusterContext;
++import org.apache.stratos.autoscaler.grouping.dependency.context.GroupContext;
++import org.apache.stratos.autoscaler.grouping.topic.StatusEventPublisher;
++import org.apache.stratos.autoscaler.monitor.AbstractClusterMonitor;
+ import org.apache.stratos.autoscaler.monitor.EventHandler;
+ import org.apache.stratos.autoscaler.monitor.Monitor;
+ import org.apache.stratos.autoscaler.monitor.MonitorStatusEventBuilder;
+-import org.apache.stratos.autoscaler.monitor.events.ClusterStatusEvent;
+-import org.apache.stratos.autoscaler.monitor.events.GroupStatusEvent;
+ import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
+ import org.apache.stratos.autoscaler.status.checker.StatusChecker;
++import org.apache.stratos.messaging.domain.topology.Application;
+ import org.apache.stratos.messaging.domain.topology.Group;
+ import org.apache.stratos.messaging.domain.topology.Status;
+-import org.apache.stratos.messaging.event.application.status.StatusEvent;
++
++import java.util.ArrayList;
++import java.util.List;
+ 
+ /**
+  * This is GroupMonitor to monitor the group which consists of
+@@ -43,9 +48,6 @@ public class GroupMonitor extends Monitor implements EventHandler {
+ 
+     //Parent monitor of this monitor
+     private Monitor parent;
+-    //Application id of this particular monitor
+-    protected String appId;
+-
+ 
+     /**
+      * Constructor of GroupMonitor
+@@ -53,7 +55,7 @@ public class GroupMonitor extends Monitor implements EventHandler {
+      * @throws DependencyBuilderException throws when couldn't build the Topology
+      * @throws TopologyInConsistentException throws when topology is inconsistent
+      */
+-    public GroupMonitor(Group group) throws DependencyBuilderException,
++    public GroupMonitor(Group group, String appId) throws DependencyBuilderException,
+                                             TopologyInConsistentException {
+         super(group);
+         startDependency();
+@@ -79,32 +81,86 @@ public class GroupMonitor extends Monitor implements EventHandler {
+     @Override
+     protected void monitor(MonitorStatusEvent statusEvent) {
+         String id = statusEvent.getId();
+-        ApplicationContext context = this.dependencyTree.
+-                findApplicationContextWithId(id);
+-        if(context.getStatusLifeCycle().isEmpty()) {
+-            try {
+-                //if life cycle is empty, need to start the monitor
+-                boolean startDep = startDependency(statusEvent.getId());
+-                if(log.isDebugEnabled()) {
+-                    log.debug("started a child: " + startDep + " by the group/cluster: " + id);
++        Status status1 = statusEvent.getStatus();
++        ApplicationContext context = this.dependencyTree.findApplicationContextWithId(id);
++        //Events coming from parent are In_Active(in faulty detection), Scaling events, termination
++        //TODO if statusEvent is for active, then start the next one if any available
++        if(!isParent(id)) {
++            if(status1 == Status.Activated) {
++                try {
++                    //if life cycle is empty, need to start the monitor
++                    boolean startDep = startDependency(statusEvent.getId());
++                    if (log.isDebugEnabled()) {
++                        log.debug("started a child: " + startDep + " by the group/cluster: " + id);
+ 
++                    }
++                    //updating the life cycle and current status
++                    if (startDep) {
++                        context.setCurrentStatus(Status.Created);
++                        context.addStatusToLIfeCycle(Status.Created);
++                    } else {
++                        StatusChecker.getInstance().onChildStatusChange(id, this.id, this.appId);
++                    }
++
++                } catch (TopologyInConsistentException e) {
++                    //TODO revert the siblings and notify parent, change a flag for reverting/un-subscription
++                    log.error(e);
+                 }
+-                //updating the life cycle and current status
+-                context.setStatus(statusEvent.getStatus());
+-                context.addStatusToLIfeCycle(statusEvent.getStatus());
+-                if(!startDep) {
+-                    //Checking in the children whether all are active,
+-                    // since no dependency found to be started.
+-                    StatusChecker.getInstance().onChildStatusChange(id, this.id, this.appId);
++            } else if(status1 == Status.In_Active) {
++                //TODO if C1 depends on C2, then if C2 is in_active, then by getting killdepend as C1 and
++                //TODO need to send in_active for c1. When C1 in_active receives, get dependent and
++                //TODO check whether dependent in_active. Then kill c1.
++                //evaluate termination behavior and take action based on that.
++
++                List<ApplicationContext> terminationList = new ArrayList<ApplicationContext>();
++                terminationList = this.dependencyTree.getTerminationDependencies(id);
++
++                //check whether all the children are in_active state
++                for(ApplicationContext terminationContext : terminationList) {
++                   terminationContext
++                }
++
++                /*if(terminationList != null && !terminationList.isEmpty()) {
++                    for(ApplicationContext context1 : terminationList) {
++                        if(context1 instanceof ClusterContext) {
++                            AbstractClusterMonitor monitor = this.clusterIdToClusterMonitorsMap.
++                                    get(context1.getId());
++                            //Whether life cycle change to Created
++                            if(monitor.getStatus() == Status.Created) {
++                                canTerminate = true;
++                            } else {
++                                //TODO sending group in_active event to dependent cluster/group
++                                StatusEventPublisher.sendGroupActivatedEvent(this.appId, this.id);
++                                //not all dependent clusters are in created state.
++                                canTerminate = false;
++                            }
++                        }
++                    }
++                    if(canTerminate) {
++                       //
++                    }*/
++                } else {
++                    //TODO get dependents
++                    List<ApplicationContext> dependents = this.dependencyTree.getTerminationDependencies(id);
+                 }
+-            } catch (TopologyInConsistentException e) {
+-                //TODO revert the siblings and notify parent, change a flag for reverting/un-subscription
+-                log.error(e);
++
++
++
++
++
++            } else if(status1 == Status.Created) {
++                //the dependent goes to be created state, so terminate the dependents
+             }
+         } else {
+-            //TODO act based on life cycle events
++            //If it is coming from parent, then can be unsubscribe/scaling/terminate
++            // request upon other siblings's status changes
++
++
++
+         }
+ 
++
++
+     }
+ 
+     public Monitor getParent() {
+@@ -123,4 +179,16 @@ public class GroupMonitor extends Monitor implements EventHandler {
+         this.appId = appId;
+     }
+ 
++    private boolean isParent(String id) {
++        if(this.parent.getId().equals(id)) {
++            return true;
++        } else {
++            return false;
++        }
++    }
++
++
++
++
++
+ }
+diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
+index ee04fff..e298df3 100644
+--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
++++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
+@@ -64,6 +64,13 @@ public class StatusChecker {
+         }
+     }
+ 
++    public void onMemberTermination(String clusterId) {
++        ClusterMonitor monitor = AutoscalerContext.getInstance().getMonitor(clusterId);
++        //TODO get Topology status
++        // if cluster not having any members and if the cluster was in_active then send created Events
++        // if cluster was in terminating, then send terminated event.
++    }
++
+     private boolean clusterActive(AbstractClusterMonitor monitor) {
+         boolean clusterActive = false;
+         for (NetworkPartitionContext networkPartitionContext : monitor.getNetworkPartitionCtxts().values()) {
+@@ -84,6 +91,42 @@ public class StatusChecker {
+     }
+ 
+     /**
++     * @param clusterId
++     * @param appId
++     * @param partitionContext is to decide in which partition has less members while others have active members
++     */
++    public void onMemberFaultEvent(final String clusterId, final String appId, final PartitionContext partitionContext) {
++        ClusterMonitor monitor = AutoscalerContext.getInstance().getMonitor(clusterId);
++        boolean clusterInActive = getClusterInActive(monitor, partitionContext);
++        if (clusterInActive) {
++            //TODO evaluate life cycle
++            //send cluster In-Active event to cluster status topic
++
++        } else {
++            boolean clusterActive = clusterActive(monitor);
++            if(clusterActive) {
++                //TODO evaluate life cycle
++                //send clusterActive event to cluster status topic
++            }
++        }
++    }
++
++    private boolean getClusterInActive(AbstractClusterMonitor monitor, PartitionContext partitionContext) {
++        boolean clusterInActive = false;
++        for (NetworkPartitionContext networkPartitionContext : monitor.getNetworkPartitionCtxts().values()) {
++            for (PartitionContext partition : networkPartitionContext.getPartitionCtxts().values()) {
++                if (partitionContext.getPartitionId().equals(partition.getPartitionId()) &&
++                        partition.getActiveMemberCount() < partition.getMinimumMemberCount()) {
++                    clusterInActive = true;
++                    return clusterInActive;
++                }
++            }
++
++        }
++        return clusterInActive;
++    }
++
++    /**
+      *
+      * @param idOfChild
+      * @param groupId
+@@ -149,47 +192,7 @@ public class StatusChecker {
+     }
+ 
+ 
+-    /**
+-     * @param clusterId
+-     * @param appId
+-     * @param partitionContext is to decide in which partition has less members while others have active members
+-     */
+-    public void onMemberFaultEvent(final String clusterId, final String appId, final PartitionContext partitionContext) {
+-        Runnable memberFault = new Runnable() {
+-            public void run() {
+-                ClusterMonitor monitor = AutoscalerContext.getInstance().getMonitor(clusterId);
+-                boolean clusterActive = false;
+-                boolean clusterInMaintenance = false;
+-                for (NetworkPartitionContext networkPartitionContext : monitor.getNetworkPartitionCtxts().values()) {
+-                    for (PartitionContext partition : networkPartitionContext.getPartitionCtxts().values()) {
+-                        if (partitionContext.getPartitionId().equals(partition.getPartitionId()) &&
+-                                partition.getActiveMemberCount() < partition.getMinimumMemberCount()) {
+-                            clusterInMaintenance = true;
+-                        } else {
+-                            log.info(String.format("Hence the [partition] %s, in [networkpartition], " +
+-                                            "%s has exceeded the [minimum], %d with current active " +
+-                                            "[members], %d the [cluster], %s is still in active mode."
+-                                    , partition.getPartitionId(), partition.getNetworkPartitionId(),
+-                                    partition.getMinimumMemberCount(), partition.getActiveMemberCount(), clusterId));
+-                        }
+-                        if (partitionContext.getMinimumMemberCount() >= partitionContext.getActiveMemberCount()) {
+-                            clusterActive = true;
+-                        }
+-                        clusterActive = false;
+-                    }
+-
+-                }
+-                // if in maintenance then notify upper layer
+-                if (clusterActive && clusterInMaintenance) {
+-                    //send clusterInmaintenance event to cluster status topic
+-
+-                }
+ 
+-            }
+-        };
+-        Thread faultHandlingThread = new Thread(memberFault);
+-        faultHandlingThread.start();
+-    }
+ 
+     /**
+      * This will use to calculate whether  all children of a particular component is active by travesing Top
+diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+index cb03158..77af14c 100644
+--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
++++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+@@ -163,7 +163,7 @@ public class AutoscalerUtil {
+             }
+ 
+             clusterMonitor.addNetworkPartitionCtxt(networkPartitionContext);
+-            //clusterMonitor.setStatus(Status.Created);
++            //clusterMonitor.setCurrentStatus(Status.Created);
+             if(log.isInfoEnabled()){
+                 log.info(String.format("Network partition context has been added: [network partition] %s",
+                             networkPartitionContext.getId()));
+diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java
+index 7ba27fc..2bd0945 100644
+--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java
++++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java
+@@ -24,8 +24,9 @@ public enum Status {
+     Created(1),
+     Running(2),
+     Activated(3),
+-    In_Maintenance(4),
+-    Removed(5);
++    In_Active(4),
++    Terminating(4),
++    Terminated(5);
+ 
+     private int code;
+ 
+diff --git a/tools/automation-sripts/grouping-automation-script/samples/ec2/group2.json b/tools/automation-sripts/grouping-automation-script/samples/ec2/group2.json
+index 942ef8b..0043e2e 100755
+--- a/tools/automation-sripts/grouping-automation-script/samples/ec2/group2.json
++++ b/tools/automation-sripts/grouping-automation-script/samples/ec2/group2.json
+@@ -4,12 +4,15 @@
+         "group1"
+     ],
+     "cartridges": [
+-        "tomcat"
++        "tomcat","tomcat1"
+     ],
+     "dependencies": {
+         "startupOrders": [
+              "group.group1,cartridge.tomcat"
+ 	],
+-        "killBehaviour": "kill-dependents"
+-    }
++        "termination": {
++		"terminationBehaviour": "kill-dependents",
++                "terminationOrder" : "startupOrder/reverseStartupOrder"
++ 	   }
++	}
+ }
+diff --git a/tools/automation-sripts/grouping-automation-script/samples/ec2/m2_single_subsciption_app.json b/tools/automation-sripts/grouping-automation-script/samples/ec2/m2_single_subsciption_app.json
+index b234c49..95c61b4 100644
+--- a/tools/automation-sripts/grouping-automation-script/samples/ec2/m2_single_subsciption_app.json
++++ b/tools/automation-sripts/grouping-automation-script/samples/ec2/m2_single_subsciption_app.json
+@@ -13,7 +13,12 @@
+                         "type": "tomcat",
+                         "alias": "mygroup2tomcat"
+ 
+-                    }
++                    },
++		    {
++                        "type": "tomcat1",
++                        "alias": "mygroup2tomcat1"
++		    }
++                    
+                 ],
+                 "subGroups": [
+                     {
+@@ -88,6 +93,15 @@
+             "alias": "mygroup1tomcat1",
+             "deploymentPolicy": "deployment_policy_1",
+             "autoscalingPolicy": "autoscale_policy_1"
++        },
++        {
++            "alias": "mygroup2tomcat1",
++            "deploymentPolicy": "deployment_policy_1",
++            "autoscalingPolicy": "autoscale_policy_1",
++            "repoURL": "www.mygit.com/php.git",
++            "privateRepo": "true",
++            "repoUsername": "admin",
++            "repoPassword": "xxxx"
+         }
+ 
+             ]

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index 68ccc5e..ce09d15 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -1212,7 +1212,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
     @Override
     public void unregisterService(String clusterId) throws UnregisteredClusterException {
         final String clusterId_ = clusterId;
-        TopologyBuilder.handleClusterMaintenanceMode(dataHolder.getClusterContext(clusterId_));
+        /*TopologyBuilder.handleClusterMaintenanceMode(dataHolder.getClusterContext(clusterId_));
 
         Runnable terminateInTimeout = new Runnable() {
             @Override
@@ -1309,7 +1309,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             }
         };
         new Thread(terminateInTimeout).start();
-        new Thread(unregister).start();
+        new Thread(unregister).start();*/
 
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
index b54b203..81c228c 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyBuilder.java
@@ -114,7 +114,7 @@ public class TopologyBuilder {
     }
 
     public static void handleClusterCreated(Registrant registrant, boolean isLb) {
-        Topology topology = TopologyManager.getTopology();
+        /*Topology topology = TopologyManager.getTopology();
         Service service;
         try {
             TopologyManager.acquireWriteLock();
@@ -156,7 +156,7 @@ public class TopologyBuilder {
 
         } finally {
             TopologyManager.releaseWriteLock();
-        }
+        }*/
     }
 
     public static void handleClusterRemoved(ClusterContext ctxt) {
@@ -187,7 +187,7 @@ public class TopologyBuilder {
         TopologyEventPublisher.sendClusterRemovedEvent(ctxt, deploymentPolicy);
     }
 
-    public static void handleClusterMaintenanceMode(ClusterContext ctxt) {
+    /*public static void handleClusterMaintenanceMode(ClusterContext ctxt) {
 
         Topology topology = TopologyManager.getTopology();
         Service service = topology.getService(ctxt.getCartridgeType());
@@ -211,15 +211,12 @@ public class TopologyBuilder {
                 log.error("Invalid State Transition from " + cluster.getStatus() + " to " + ClusterStatus.Inactive);
             }
             cluster.setStatus(ClusterStatus.Inactive);
-            // temporary; should be removed
-            cluster.setTempStatus(Status.In_Active);
-            //cluster.setStatus(Status.In_Maintenance);
             TopologyManager.updateTopology(topology);
         } finally {
             TopologyManager.releaseWriteLock();
         }
         TopologyEventPublisher.sendClusterMaintenanceModeEvent(ctxt);
-    }
+    }*/
 
 
     public static void handleMemberSpawned(String serviceName,
@@ -774,8 +771,6 @@ public class TopologyBuilder {
             TopologyManager.acquireWriteLock();
             //cluster.setStatus(Status.Activated);
             cluster.setStatus(ClusterStatus.Active);
-            // temporary; should be removed
-            cluster.setTempStatus(Status.Activated);
 
             log.info("Cluster activated adding status started");
 
@@ -810,7 +805,7 @@ public class TopologyBuilder {
                         groupActivatedEvent.getGroupId());
         try {
             TopologyManager.acquireWriteLock();
-            group.setTempStatus(Status.Activated);
+            group.setStatus(GroupStatus.Active);
             log.info("Group activated adding status started");
 
             TopologyManager.updateTopology(topology);

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
index b3f60b9..2786605 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topology/TopologyEventPublisher.java
@@ -81,11 +81,11 @@ public class TopologyEventPublisher {
         }
     }
 
-    public static void sendClusterCreatedEvent(String serviceName, String clusterId, Cluster cluster) {
-        ClusterCreatedEvent clusterCreatedEvent = new ClusterCreatedEvent(serviceName, clusterId, cluster);
+    public static void sendClusterCreatedEvent(String appId, String serviceName, String clusterId) {
+        ClusterCreatedEvent clusterCreatedEvent = new ClusterCreatedEvent(appId,serviceName, clusterId);
 
         if(log.isInfoEnabled()) {
-            log.info("Publishing cluster created event: " +cluster.toString());
+            log.info("Publishing cluster created event: " +clusterId);
         }
         publishEvent(clusterCreatedEvent);
 
@@ -121,18 +121,6 @@ public class TopologyEventPublisher {
 
     }
 
-    public static void sendClusterMaintenanceModeEvent(ClusterContext ctxt) {
-
-        ClusterMaintenanceModeEvent clusterMaintenanceModeEvent = new ClusterMaintenanceModeEvent(ctxt.getCartridgeType(), ctxt.getClusterId());
-        clusterMaintenanceModeEvent.setStatus(Status.In_Active);
-        if(log.isInfoEnabled()) {
-            log.info(String.format("Publishing cluster maintenance mode event: [service] %s [cluster] %s",
-                    clusterMaintenanceModeEvent.getServiceName(), clusterMaintenanceModeEvent.getClusterId()));
-        }
-        publishEvent(clusterMaintenanceModeEvent);
-
-    }
-
     public static void sendInstanceSpawnedEvent(String serviceName, String clusterId, String networkPartitionId, String partitionId, String memberId,
                                                 String lbClusterId, String publicIp, String privateIp, MemberContext context) {
         InstanceSpawnedEvent instanceSpawnedEvent = new InstanceSpawnedEvent(serviceName, clusterId, networkPartitionId, partitionId, memberId);

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
index 3325561..06d408c 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
@@ -36,9 +36,9 @@ import java.util.*;
 @XmlRootElement
 public class Cluster implements Serializable, LifeCycleStateTransitionBehavior<ClusterStatus> {
 
-	private static final long serialVersionUID = -361960242360176077L;
-	
-	private final String serviceName;
+    private static final long serialVersionUID = -361960242360176077L;
+
+    private final String serviceName;
     private final String clusterId;
     private final String autoscalePolicyName;
     private final String deploymentPolicyName;
@@ -50,7 +50,7 @@ public class Cluster implements Serializable, LifeCycleStateTransitionBehavior<C
     @XmlJavaTypeAdapter(MapAdapter.class)
     private Map<String, Member> memberMap;
 
-    private Status tempStatus;
+    private ClusterStatus status;
 
     private String appId;
 
@@ -70,7 +70,7 @@ public class Cluster implements Serializable, LifeCycleStateTransitionBehavior<C
         this.appId = appId;
         this.clusterStateManager = new LifeCycleStateManager<ClusterStatus>(ClusterStatus.Created);
         // temporary; should be removed
-        this.tempStatus = Status.Created;
+        this.status = ClusterStatus.Created;
     }
 
     public String getServiceName() {
@@ -103,11 +103,10 @@ public class Cluster implements Serializable, LifeCycleStateTransitionBehavior<C
     }
 
     public boolean hasMembers() {
-        return  memberMap.isEmpty();
+        return memberMap.isEmpty();
     }
 
 
-
     public void addMember(Member member) {
         memberMap.put(member.getMemberId(), member);
     }
@@ -136,9 +135,9 @@ public class Cluster implements Serializable, LifeCycleStateTransitionBehavior<C
         return autoscalePolicyName;
     }
 
-	public String getDeploymentPolicyName() {
-		return deploymentPolicyName;
-	}
+    public String getDeploymentPolicyName() {
+        return deploymentPolicyName;
+    }
 
     public String getLoadBalanceAlgorithmName() {
         return loadBalanceAlgorithmName;
@@ -155,7 +154,7 @@ public class Cluster implements Serializable, LifeCycleStateTransitionBehavior<C
     public void setLbCluster(boolean isLbCluster) {
         this.isLbCluster = isLbCluster;
     }
-    
+
     @Override
     public String toString() {
         return "Cluster [serviceName=" + serviceName + ", clusterId=" + clusterId +
@@ -171,24 +170,22 @@ public class Cluster implements Serializable, LifeCycleStateTransitionBehavior<C
      * @return
      */
     public boolean tenantIdInRange(int tenantId) {
-        if(StringUtils.isBlank(getTenantRange())) {
+        if (StringUtils.isBlank(getTenantRange())) {
             return false;
         }
 
-        if("*".equals(getTenantRange())) {
+        if ("*".equals(getTenantRange())) {
             return true;
-        }
-        else {
+        } else {
             String[] array = getTenantRange().split("-");
             int tenantStart = Integer.parseInt(array[0]);
-            if(tenantStart <= tenantId) {
+            if (tenantStart <= tenantId) {
                 String tenantEndStr = array[1];
-                if("*".equals(tenantEndStr)) {
+                if ("*".equals(tenantEndStr)) {
                     return true;
-                }
-                else {
+                } else {
                     int tenantEnd = Integer.parseInt(tenantEndStr);
-                    if(tenantId <= tenantEnd) {
+                    if (tenantId <= tenantEnd) {
                         return true;
                     }
                 }
@@ -204,8 +201,8 @@ public class Cluster implements Serializable, LifeCycleStateTransitionBehavior<C
      */
     public Collection<String> findPartitionIds() {
         Map<String, Boolean> partitionIds = new HashMap<String, Boolean>();
-        for(Member member : getMembers()) {
-            if((StringUtils.isNotBlank(member.getPartitionId())) && (!partitionIds.containsKey(member.getPartitionId()))) {
+        for (Member member : getMembers()) {
+            if ((StringUtils.isNotBlank(member.getPartitionId())) && (!partitionIds.containsKey(member.getPartitionId()))) {
                 partitionIds.put(member.getPartitionId(), true);
             }
         }
@@ -233,19 +230,19 @@ public class Cluster implements Serializable, LifeCycleStateTransitionBehavior<C
     }
 
     public boolean equals(Object other) {
-        if(other == null || !(other instanceof Cluster)) {
+        if (other == null || !(other instanceof Cluster)) {
             return false;
         }
 
-        if(this == other) {
+        if (this == other) {
             return true;
         }
 
-        Cluster that = (Cluster)other;
+        Cluster that = (Cluster) other;
         return this.clusterId.equals(that.clusterId);
     }
 
-    public int hashCode () {
+    public int hashCode() {
         return clusterId.hashCode();
     }
 
@@ -253,12 +250,12 @@ public class Cluster implements Serializable, LifeCycleStateTransitionBehavior<C
         return appId;
     }
 
-    public Status getTempStatus () {
-        return tempStatus;
+    public ClusterStatus getTempStatus() {
+        return status;
     }
 
-    public void setTempStatus (Status tempStatus)  {
-        this.tempStatus = tempStatus;
+    public void setTempStatus(ClusterStatus status) {
+        this.status = status;
     }
 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ParentComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ParentComponent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ParentComponent.java
index dc5dd20..86000e9 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ParentComponent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ParentComponent.java
@@ -36,10 +36,8 @@ public abstract class ParentComponent implements Serializable {
     // Cluster Id map, key = subscription alias for the cartridge type
     private Map<String, ClusterDataHolder> aliasToClusterDataMap;
     // Application status
-    private Status tempStatus;
 
     public ParentComponent () {
-        this.tempStatus = Status.Created;
         aliasToGroupMap = new HashMap<String, Group>();
         aliasToClusterDataMap = new HashMap<String, ClusterDataHolder>();
     }
@@ -211,12 +209,4 @@ public abstract class ParentComponent implements Serializable {
             }
         }
     }
-
-    public Status getTempStatus() {
-        return tempStatus;
-    }
-
-    public void setTempStatus(Status status) {
-        this.tempStatus = status;
-    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java
deleted file mode 100644
index 2bd0945..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java
+++ /dev/null
@@ -1,40 +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.messaging.domain.topology;
-
-public enum Status {
-
-    Created(1),
-    Running(2),
-    Activated(3),
-    In_Active(4),
-    Terminating(4),
-    Terminated(5);
-
-    private int code;
-
-    private Status(int code) {
-        this.code = code;
-    }
-
-    public int getCode() {
-        return code;
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterMaintenanceModeEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterMaintenanceModeEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterMaintenanceModeEvent.java
deleted file mode 100644
index 9b31a13..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ClusterMaintenanceModeEvent.java
+++ /dev/null
@@ -1,58 +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.messaging.event.topology;
-
-import org.apache.stratos.messaging.domain.topology.Status;
-
-import java.io.Serializable;
-
-public class ClusterMaintenanceModeEvent extends TopologyEvent implements Serializable {
-
-	private final String serviceName;
-	private final String clusterId;
-    private Status status;
-
-    public ClusterMaintenanceModeEvent(String serviceName, String clusterId) {
-        this.serviceName = serviceName;
-        this.clusterId = clusterId;
-    }
-
-    public String getServiceName() {
-        return serviceName;
-    }
-
-    @Override
-    public String toString() {
-        return "ClusterMaintenanceModeEvent [serviceName=" + serviceName + ", clusterStatus=" +
-                status.toString() + "]";
-    }
-
-    public String getClusterId() {
-        return clusterId;
-    }
-
-    public Status getStatus() {
-        return status;
-    }
-
-    public void setStatus(Status status) {
-        this.status = status;
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/topology/ClusterMaintenanceModeEventListener.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/topology/ClusterMaintenanceModeEventListener.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/topology/ClusterMaintenanceModeEventListener.java
deleted file mode 100644
index 3bd2a19..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/listener/topology/ClusterMaintenanceModeEventListener.java
+++ /dev/null
@@ -1,25 +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.messaging.listener.topology;
-
-import org.apache.stratos.messaging.listener.EventListener;
-
-public abstract class ClusterMaintenanceModeEventListener extends EventListener {
-
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationActivatedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationActivatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationActivatedMessageProcessor.java
index 9bcf47d..8626fca 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationActivatedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationActivatedMessageProcessor.java
@@ -21,7 +21,7 @@ package org.apache.stratos.messaging.message.processor.topology;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.messaging.domain.topology.Application;
-import org.apache.stratos.messaging.domain.topology.Status;
+import org.apache.stratos.messaging.domain.topology.ApplicationStatus;
 import org.apache.stratos.messaging.domain.topology.Topology;
 import org.apache.stratos.messaging.event.topology.ApplicationActivatedEvent;
 import org.apache.stratos.messaging.message.processor.MessageProcessor;
@@ -76,7 +76,7 @@ public class ApplicationActivatedMessageProcessor extends MessageProcessor {
         }
     }
 
-    private boolean doProcess (ApplicationActivatedEvent event, Topology topology) {
+    private boolean doProcess(ApplicationActivatedEvent event, Topology topology) {
 
         // Validate event against the existing topology
         Application application = topology.getApplication(event.getAppId());
@@ -88,7 +88,7 @@ public class ApplicationActivatedMessageProcessor extends MessageProcessor {
             return false;
         } else {
             // Apply changes to the topology
-            application.setTempStatus(Status.Activated);
+            application.setStatus(ApplicationStatus.Active);
             if (log.isInfoEnabled()) {
                 log.info(String.format("Application updated as activated : %s",
                         application.toString()));

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
index 1a6ffc7..f2f2521 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
@@ -20,7 +20,10 @@ package org.apache.stratos.messaging.message.processor.topology;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.messaging.domain.topology.*;
+import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.ClusterStatus;
+import org.apache.stratos.messaging.domain.topology.Service;
+import org.apache.stratos.messaging.domain.topology.Topology;
 import org.apache.stratos.messaging.event.topology.ClusterActivatedEvent;
 import org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
 import org.apache.stratos.messaging.message.filter.topology.TopologyServiceFilter;
@@ -63,7 +66,7 @@ public class ClusterActivatedProcessor extends MessageProcessor {
                 TopologyUpdater.releaseWriteLockForCluster(event.getServiceName(), event.getClusterId());
             }
 
-        }  else {
+        } else {
             if (nextProcessor != null) {
                 // ask the next processor to take care of the message.
                 return nextProcessor.process(type, message, topology);
@@ -73,7 +76,7 @@ public class ClusterActivatedProcessor extends MessageProcessor {
         }
     }
 
-    private boolean doProcess (ClusterActivatedEvent event,Topology topology) {
+    private boolean doProcess(ClusterActivatedEvent event, Topology topology) {
 
         // Apply service filter
         if (TopologyServiceFilter.getInstance().isActive()) {
@@ -119,8 +122,6 @@ public class ClusterActivatedProcessor extends MessageProcessor {
                 log.error("Invalid State Transition from " + cluster.getStatus() + " to " + ClusterStatus.Active);
             }
             cluster.setStatus(ClusterStatus.Active);
-            // temporary; should be removed
-            cluster.setTempStatus(Status.Activated);
             if (log.isInfoEnabled()) {
                 log.info(String.format("Cluster updated as activated : %s",
                         cluster.toString()));

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInActivateProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInActivateProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInActivateProcessor.java
index 8156055..c9499fb 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInActivateProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterInActivateProcessor.java
@@ -21,10 +21,9 @@ package org.apache.stratos.messaging.message.processor.topology;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 import org.apache.stratos.messaging.domain.topology.Service;
-import org.apache.stratos.messaging.domain.topology.Status;
 import org.apache.stratos.messaging.domain.topology.Topology;
-import org.apache.stratos.messaging.event.topology.ClusterActivatedEvent;
 import org.apache.stratos.messaging.event.topology.ClusterInActivateEvent;
 import org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
 import org.apache.stratos.messaging.message.filter.topology.TopologyServiceFilter;
@@ -67,7 +66,7 @@ public class ClusterInActivateProcessor extends MessageProcessor {
                 TopologyUpdater.releaseWriteLockForCluster(event.getServiceName(), event.getClusterId());
             }
 
-        }  else {
+        } else {
             if (nextProcessor != null) {
                 // ask the next processor to take care of the message.
                 return nextProcessor.process(type, message, topology);
@@ -77,9 +76,8 @@ public class ClusterInActivateProcessor extends MessageProcessor {
         }
     }
 
-    private boolean doProcess (ClusterInActivateEvent event,Topology topology) {
-
-        // Apply service filter
+    private boolean doProcess(ClusterInActivateEvent event, Topology topology) {
+// Apply service filter
         if (TopologyServiceFilter.getInstance().isActive()) {
             if (TopologyServiceFilter.getInstance().serviceNameExcluded(event.getServiceName())) {
                 // Service is excluded, do not update topology or fire event
@@ -119,10 +117,12 @@ public class ClusterInActivateProcessor extends MessageProcessor {
             }
         } else {
             // Apply changes to the topology
-            //TODO
-            // cluster.setStatus(Status.Activated);
+            if (!cluster.isStateTransitionValid(ClusterStatus.Inactive)) {
+                log.error("Invalid State Transition from " + cluster.getStatus() + " to " + ClusterStatus.Inactive);
+            }
+            cluster.setStatus(ClusterStatus.Inactive);
             if (log.isInfoEnabled()) {
-                log.info(String.format("Cluster updated as activated : %s",
+                log.info(String.format("Cluster updated as maintenance mode: %s",
                         cluster.toString()));
             }
         }
@@ -131,5 +131,4 @@ public class ClusterInActivateProcessor extends MessageProcessor {
         notifyEventListeners(event);
         return true;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterMaintenanceModeMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterMaintenanceModeMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterMaintenanceModeMessageProcessor.java
deleted file mode 100644
index 096c9a3..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterMaintenanceModeMessageProcessor.java
+++ /dev/null
@@ -1,129 +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.messaging.message.processor.topology;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.messaging.domain.topology.*;
-import org.apache.stratos.messaging.event.topology.ClusterMaintenanceModeEvent;
-import org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
-import org.apache.stratos.messaging.message.filter.topology.TopologyServiceFilter;
-import org.apache.stratos.messaging.message.processor.MessageProcessor;
-import org.apache.stratos.messaging.message.processor.topology.updater.TopologyUpdater;
-import org.apache.stratos.messaging.util.Util;
-
-public class ClusterMaintenanceModeMessageProcessor extends MessageProcessor {
-    private static final Log log = LogFactory.getLog(ClusterMaintenanceModeMessageProcessor.class);
-    private MessageProcessor nextProcessor;
-
-    @Override
-    public void setNext(MessageProcessor nextProcessor) {
-        this.nextProcessor = nextProcessor;
-    }
-
-    @Override
-    public boolean process(String type, String message, Object object) {
-        Topology topology = (Topology) object;
-
-        if (ClusterMaintenanceModeEvent.class.getName().equals(type)) {
-            // Return if topology has not been initialized
-            if (!topology.isInitialized())
-                return false;
-
-            // Parse complete message and build event
-            ClusterMaintenanceModeEvent event = (ClusterMaintenanceModeEvent) Util.
-                                jsonToObject(message, ClusterMaintenanceModeEvent.class);
-
-            TopologyUpdater.acquireWriteLockForCluster(event.getServiceName(), event.getClusterId());
-            try {
-                return doProcess(event, topology);
-
-            } finally {
-                TopologyUpdater.releaseWriteLockForCluster(event.getServiceName(), event.getClusterId());
-            }
-
-        } else {
-            if (nextProcessor != null) {
-                // ask the next processor to take care of the message.
-                return nextProcessor.process(type, message, topology);
-            } else {
-                throw new RuntimeException(String.format("Failed to process message using available message processors: [type] %s [body] %s", type, message));
-            }
-        }
-    }
-
-    private boolean doProcess (ClusterMaintenanceModeEvent event,Topology topology)  {
-
-        // Apply service filter
-        if (TopologyServiceFilter.getInstance().isActive()) {
-            if (TopologyServiceFilter.getInstance().serviceNameExcluded(event.getServiceName())) {
-                // Service is excluded, do not update topology or fire event
-                if (log.isDebugEnabled()) {
-                    log.debug(String.format("Service is excluded: [service] %s", event.getServiceName()));
-                }
-                return false;
-            }
-        }
-
-        // Apply cluster filter
-        if (TopologyClusterFilter.getInstance().isActive()) {
-            if (TopologyClusterFilter.getInstance().clusterIdExcluded(event.getClusterId())) {
-                // Cluster is excluded, do not update topology or fire event
-                if (log.isDebugEnabled()) {
-                    log.debug(String.format("Cluster is excluded: [cluster] %s", event.getClusterId()));
-                }
-                return false;
-            }
-        }
-
-        // Validate event against the existing topology
-        Service service = topology.getService(event.getServiceName());
-        if (service == null) {
-            if (log.isWarnEnabled()) {
-                log.warn(String.format("Service does not exist: [service] %s",
-                        event.getServiceName()));
-            }
-            return false;
-        }
-        Cluster cluster = service.getCluster(event.getClusterId());
-
-        if (cluster == null) {
-            if (log.isWarnEnabled()) {
-                log.warn(String.format("Cluster not exists in service: [service] %s [cluster] %s", event.getServiceName(),
-                        event.getClusterId()));
-            }
-        } else {
-            // Apply changes to the topology
-            if (!cluster.isStateTransitionValid(ClusterStatus.Inactive)) {
-                log.error("Invalid State Transition from " + cluster.getStatus() + " to " + ClusterStatus.Inactive);
-            }
-            cluster.setStatus(ClusterStatus.Inactive);
-            // temporary; should be removed
-            cluster.setTempStatus(Status.In_Active);
-            if (log.isInfoEnabled()) {
-                log.info(String.format("Cluster updated as maintenance mode: %s",
-                        cluster.toString()));
-            }
-        }
-
-        // Notify event listeners
-        notifyEventListeners(event);
-        return true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupActivatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupActivatedProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupActivatedProcessor.java
index 1ed6b27..d7f2de6 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupActivatedProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupActivatedProcessor.java
@@ -91,9 +91,9 @@ public class GroupActivatedProcessor extends MessageProcessor {
         } else {
             // Apply changes to the topology
             if (!group.isStateTransitionValid(GroupStatus.Active)) {
-                log.error("Invalid State Transition from " + application.getTempStatus() + " to " + GroupStatus.Active);
+                log.error("Invalid State Transition from " + group.getStatus() + " to " + GroupStatus.Active);
             }
-            group.setTempStatus(Status.Activated);
+            group.setStatus(GroupStatus.Active);
             if (log.isInfoEnabled())     {
                 log.info(String.format("Group updated as activated : %s",
                         group.getUniqueIdentifier()));

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupInActivateProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupInActivateProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupInActivateProcessor.java
index 36ca259..571fc74 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupInActivateProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupInActivateProcessor.java
@@ -22,7 +22,6 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.messaging.domain.topology.Application;
 import org.apache.stratos.messaging.domain.topology.Group;
-import org.apache.stratos.messaging.domain.topology.Status;
 import org.apache.stratos.messaging.domain.topology.Topology;
 import org.apache.stratos.messaging.event.topology.GroupActivatedEvent;
 import org.apache.stratos.messaging.event.topology.GroupInActivateEvent;
@@ -74,7 +73,7 @@ public class GroupInActivateProcessor extends MessageProcessor {
         }
     }
 
-    private boolean doProcess (GroupInActivateEvent event,Topology topology) {
+    private boolean doProcess(GroupInActivateEvent event, Topology topology) {
 
         // Validate event against the existing topology
         Application application = topology.getApplication(event.getAppId());
@@ -96,7 +95,7 @@ public class GroupInActivateProcessor extends MessageProcessor {
             // Apply changes to the topology
             //TODO
             // group.setStatus(Status.Activated);
-            if (log.isInfoEnabled())     {
+            if (log.isInfoEnabled()) {
                 log.info(String.format("Group updated as activated : %s",
                         group.getUniqueIdentifier()));
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/77676a68/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/TopologyMessageProcessorChain.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/TopologyMessageProcessorChain.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/TopologyMessageProcessorChain.java
index db9e8b1..e6535f1 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/TopologyMessageProcessorChain.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/TopologyMessageProcessorChain.java
@@ -37,7 +37,6 @@ public class TopologyMessageProcessorChain extends MessageProcessorChain {
     private ServiceRemovedMessageProcessor serviceRemovedMessageProcessor;
     private ClusterCreatedMessageProcessor clusterCreatedMessageProcessor;
     private ClusterActivatedProcessor clusterActivatedProcessor;
-    private ClusterMaintenanceModeMessageProcessor clusterMaintenanceModeMessageProcessor;
     private ClusterRemovedMessageProcessor clusterRemovedMessageProcessor;
     private InstanceSpawnedMessageProcessor instanceSpawnedMessageProcessor;
     private MemberStartedMessageProcessor memberStartedMessageProcessor;
@@ -69,9 +68,6 @@ public class TopologyMessageProcessorChain extends MessageProcessorChain {
         clusterActivatedProcessor = new ClusterActivatedProcessor();
         add(clusterActivatedProcessor);
 
-        clusterMaintenanceModeMessageProcessor = new ClusterMaintenanceModeMessageProcessor();
-        add(clusterMaintenanceModeMessageProcessor);
-
         clusterRemovedMessageProcessor = new ClusterRemovedMessageProcessor();
         add(clusterRemovedMessageProcessor);
 
@@ -120,8 +116,6 @@ public class TopologyMessageProcessorChain extends MessageProcessorChain {
             clusterCreatedMessageProcessor.addEventListener(eventListener);
         } else if (eventListener instanceof ClusterActivatedEventListener) {
             clusterActivatedProcessor.addEventListener(eventListener);
-        } else if (eventListener instanceof ClusterMaintenanceModeEventListener) {
-            clusterMaintenanceModeMessageProcessor.addEventListener(eventListener);
         } else if (eventListener instanceof ClusterRemovedEventListener) {
             clusterRemovedMessageProcessor.addEventListener(eventListener);
         } else if (eventListener instanceof InstanceSpawnedEventListener) {