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);
