resetting Cluster and Group statuses to Created from Terminating in Topology


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

Branch: refs/heads/docker-grouping-merge
Commit: db1fd260a24dfceeb4b85312f7588defe4e4f30f
Parents: 38221db
Author: Isuru Haththotuwa <[email protected]>
Authored: Thu Oct 30 18:25:30 2014 +0530
Committer: Isuru Haththotuwa <[email protected]>
Committed: Thu Oct 30 18:25:30 2014 +0530

----------------------------------------------------------------------
 .../ApplicationStatusTopicReceiver.java         | 15 ++++
 .../controller/topology/TopologyBuilder.java    | 74 ++++++++++++++++++++
 .../topology/TopologyEventPublisher.java        |  9 +++
 .../ClusterCreatedMessageProcessor.java         |  9 +--
 .../topology/GroupCreatedProcessor.java         |  3 +-
 5 files changed, 105 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/db1fd260/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/status/receiver/ApplicationStatusTopicReceiver.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/status/receiver/ApplicationStatusTopicReceiver.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/status/receiver/ApplicationStatusTopicReceiver.java
index 4d52fce..e155875 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/status/receiver/ApplicationStatusTopicReceiver.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/status/receiver/ApplicationStatusTopicReceiver.java
@@ -64,6 +64,13 @@ public class ApplicationStatusTopicReceiver implements 
Runnable {
 
     private void addEventListeners() {
         // Listen to topology events that affect clusters
+        statusEventReceiver.addEventListener(new 
AppStatusClusterCreatedEventListener() {
+            @Override
+            protected void onEvent(Event event) {
+                
TopologyBuilder.handleClusterReset((AppStatusClusterCreatedEvent) event);
+            }
+        });
+
         statusEventReceiver.addEventListener(new 
AppStatusClusterActivatedEventListener() {
             @Override
             protected void onEvent(Event event) {
@@ -92,6 +99,14 @@ public class ApplicationStatusTopicReceiver implements 
Runnable {
             }
         });
 
+
+        statusEventReceiver.addEventListener(new 
AppStatusGroupCreatedEventListener() {
+            @Override
+            protected void onEvent(Event event) {
+                TopologyBuilder.handleGroupReset((AppStatusGroupCreatedEvent) 
event);
+            }
+        });
+
         statusEventReceiver.addEventListener(new 
AppStatusGroupActivatedEventListener() {
             @Override
             protected void onEvent(Event event) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/db1fd260/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 1daec32..5d14971 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,6 +114,80 @@ public class TopologyBuilder {
         }
     }
 
+    public static void handleClusterReset (AppStatusClusterCreatedEvent event) 
{
+
+        TopologyManager.acquireWriteLock();
+
+        try {
+            Topology topology = TopologyManager.getTopology();
+            Service service = topology.getService(event.getServiceName());
+            if (service == null) {
+                log.error("Service " + event.getServiceName() +
+                        " not found in Topology, unable to update the cluster 
status to Created");
+                return;
+            }
+
+            Cluster cluster = service.getCluster(event.getClusterId());
+            if (cluster == null) {
+                log.error("Cluster " + event.getClusterId() + " not found in 
Topology, unable to update " +
+                        "status to Created");
+                return;
+            }
+
+            // update the cluster status to Created
+            if (!cluster.isStateTransitionValid(ClusterStatus.Created))  {
+                 log.error("Invalid state transition from " + 
cluster.getStatus() + " to " +
+                         ClusterStatus.Created + " for cluster id " + 
event.getClusterId());
+            }
+            // forcefully update the status
+            cluster.setStatus(ClusterStatus.Created);
+            TopologyManager.updateTopology(topology);
+
+        } finally {
+            TopologyManager.releaseWriteLock();
+        }
+
+        TopologyEventPublisher.sendClusterCreatedEvent(event.getAppId(), 
event.getServiceName(),
+                event.getClusterId());
+    }
+
+    public static void handleGroupReset (AppStatusGroupCreatedEvent event) {
+
+        TopologyManager.acquireWriteLock();
+
+        try {
+            Topology topology = TopologyManager.getTopology();
+
+            Application application = 
topology.getApplication(event.getAppId());
+            if (application == null) {
+                log.error("Application " + event.getAppId() +
+                        " not found in Topology, unable to update the Group 
status to Created");
+                return;
+            }
+
+            Group group = application.getGroupRecursively(event.getGroupId());
+            if (group == null) {
+                log.error("Group " + event.getGroupId() +
+                        " not found in Topology, unable to update the Group 
status to Created");
+                return;
+            }
+
+            // update the cluster status to Created
+            if (!group.isStateTransitionValid(GroupStatus.Created))  {
+                log.error("Invalid state transition from " + group.getStatus() 
+ " to " +
+                        GroupStatus.Created + " for group " + 
event.getGroupId());
+            }
+            // forcefully update the status
+            group.setStatus(GroupStatus.Created);
+            TopologyManager.updateTopology(topology);
+
+        } finally {
+            TopologyManager.releaseWriteLock();
+        }
+
+        TopologyEventPublisher.sendGroupCreatedEvent(new 
GroupCreatedEvent(event.getAppId(), event.getGroupId()));
+    }
+
     public static void handleClusterCreated(Registrant registrant, boolean 
isLb) {
         /*Topology topology = TopologyManager.getTopology();
         Service service;

http://git-wip-us.apache.org/repos/asf/stratos/blob/db1fd260/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 a3feb4d..c9337d2 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
@@ -188,6 +188,15 @@ public class TopologyEventPublisher {
         publishEvent(memberMaintenanceModeEvent);
     }
 
+    public static void sendGroupCreatedEvent (GroupCreatedEvent 
groupCreatedEvent) {
+
+        if(log.isInfoEnabled()) {
+            log.info(String.format("Publishing group created event: [appId] %s 
[group] %s",
+                    groupCreatedEvent.getAppId(), 
groupCreatedEvent.getGroupId()));
+        }
+        publishEvent(groupCreatedEvent);
+    }
+
     public static void sendGroupActivatedEvent(GroupActivatedEvent 
groupActivatedEvent) {
         if(log.isInfoEnabled()) {
             log.info(String.format("Publishing group activated event: [appId] 
%s [group] %s",

http://git-wip-us.apache.org/repos/asf/stratos/blob/db1fd260/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterCreatedMessageProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterCreatedMessageProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterCreatedMessageProcessor.java
index 613c5df..b8cd80f 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterCreatedMessageProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterCreatedMessageProcessor.java
@@ -20,10 +20,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.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.domain.topology.*;
 import org.apache.stratos.messaging.event.topology.ClusterCreatedEvent;
 import 
org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
 import 
org.apache.stratos.messaging.message.filter.topology.TopologyServiceFilter;
@@ -125,6 +122,10 @@ public class ClusterCreatedMessageProcessor extends 
MessageProcessor {
 
             // Apply changes to the topology
             Cluster cluster = service.getCluster(event.getClusterId());
+            if (!cluster.isStateTransitionValid(ClusterStatus.Created)) {
+                log.error("Invalid State Transition from " + 
cluster.getStatus() + " to " + ClusterStatus.Created + " " +
+                        "for cluster " + cluster.getClusterId());
+            }
             cluster.setStatus(ClusterStatus.Created);
             if (log.isInfoEnabled()) {
                 log.info(String.format("Cluster created: %s",

http://git-wip-us.apache.org/repos/asf/stratos/blob/db1fd260/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupCreatedProcessor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupCreatedProcessor.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupCreatedProcessor.java
index 4a8a744..b6d2da9 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupCreatedProcessor.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupCreatedProcessor.java
@@ -96,7 +96,8 @@ public class GroupCreatedProcessor extends MessageProcessor {
         } else {
             // Apply changes to the topology
             if (!group.isStateTransitionValid(GroupStatus.Created)) {
-                log.error("Invalid State Transition from " + group.getStatus() 
+ " to " + GroupStatus.Active);
+                log.error("Invalid State Transition from " + group.getStatus() 
+ " to " + GroupStatus.Created  + " " +
+                        "for Group " + group.getAlias());
             }
             group.setStatus(GroupStatus.Created);
 

Reply via email to