Updated Branches: refs/heads/master 7fab5047c -> 6752bb739
MemberReadyToShutdown event handling in Cloud controller - stratos-330 Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/6752bb73 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/6752bb73 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/6752bb73 Branch: refs/heads/master Commit: 6752bb739b69867a5df9af1856dfcf94b5be774a Parents: 7fab504 Author: rekathiru <[email protected]> Authored: Fri Jan 3 13:36:48 2014 +0530 Committer: rekathiru <[email protected]> Committed: Fri Jan 3 13:36:48 2014 +0530 ---------------------------------------------------------------------- .../InstanceStatusEventMessageDelegator.java | 7 ++- .../controller/topology/TopologyBuilder.java | 47 ++++++++++++++++++++ .../topology/TopologyEventPublisher.java | 12 +++-- 3 files changed, 61 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/6752bb73/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/instance/status/InstanceStatusEventMessageDelegator.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/instance/status/InstanceStatusEventMessageDelegator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/instance/status/InstanceStatusEventMessageDelegator.java index 1b94bbd..ff6970f 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/instance/status/InstanceStatusEventMessageDelegator.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/topic/instance/status/InstanceStatusEventMessageDelegator.java @@ -21,8 +21,8 @@ package org.apache.stratos.cloud.controller.topic.instance.status; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.topology.TopologyBuilder; -import org.apache.stratos.cloud.controller.topology.TopologyManager; import org.apache.stratos.messaging.event.instance.status.InstanceActivatedEvent; +import org.apache.stratos.messaging.event.instance.status.InstanceReadyToShutdownEvent; import org.apache.stratos.messaging.event.instance.status.InstanceStartedEvent; import org.apache.stratos.messaging.util.Constants; import org.apache.stratos.messaging.util.Util; @@ -54,6 +54,11 @@ public class InstanceStatusEventMessageDelegator implements Runnable { String json = message.getText(); TopologyBuilder.handleMemberActivated((InstanceActivatedEvent) Util. jsonToObject(json, InstanceActivatedEvent.class)); + } else if (InstanceReadyToShutdownEvent.class.getName().equals(type)) { + //retrieve the actual message + String json = message.getText(); + TopologyBuilder.handleMemberReadyToShutdown((InstanceReadyToShutdownEvent) Util. + jsonToObject(json, InstanceReadyToShutdownEvent.class)); } else { log.warn("Event message received is not InstanceStartedEvent or InstanceActivatedEvent"); } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/6752bb73/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 58f682e..069f818 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 @@ -20,6 +20,9 @@ package org.apache.stratos.cloud.controller.topology; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.stratos.cloud.controller.exception.InvalidCartridgeTypeException; +import org.apache.stratos.cloud.controller.exception.InvalidMemberException; +import org.apache.stratos.cloud.controller.impl.CloudControllerServiceImpl; import org.apache.stratos.cloud.controller.pojo.Cartridge; import org.apache.stratos.cloud.controller.pojo.ClusterContext; import org.apache.stratos.cloud.controller.pojo.PortMapping; @@ -28,8 +31,10 @@ import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder; import org.apache.stratos.cloud.controller.util.CloudControllerUtil; import org.apache.stratos.messaging.domain.topology.*; import org.apache.stratos.messaging.event.instance.status.InstanceActivatedEvent; +import org.apache.stratos.messaging.event.instance.status.InstanceReadyToShutdownEvent; import org.apache.stratos.messaging.event.instance.status.InstanceStartedEvent; import org.apache.stratos.messaging.event.topology.MemberActivatedEvent; +import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent; import org.apache.stratos.messaging.util.Constants; import java.util.List; @@ -272,6 +277,48 @@ public class TopologyBuilder { TopologyEventPublisher.sendMemberActivatedEvent(memberActivatedEvent); } + public static void handleMemberReadyToShutdown(InstanceReadyToShutdownEvent instanceReadyToShutdownEvent) + throws InvalidMemberException, InvalidCartridgeTypeException { + String memberId = instanceReadyToShutdownEvent.getMemberId(); + Topology topology = TopologyManager.getTopology(); + Service service = topology.getService(instanceReadyToShutdownEvent.getServiceName()); + //update the status of the member + if (service == null) { + throw new RuntimeException(String.format("Service %s does not exist", + instanceReadyToShutdownEvent.getServiceName())); + } + + Cluster cluster = service.getCluster(instanceReadyToShutdownEvent.getClusterId()); + if (cluster == null) { + throw new RuntimeException(String.format("Cluster %s does not exist", + instanceReadyToShutdownEvent.getClusterId())); + } + Member member = cluster.getMember(instanceReadyToShutdownEvent.getMemberId()); + if (member == null) { + throw new RuntimeException(String.format("Member %s does not exist", + instanceReadyToShutdownEvent.getMemberId())); + } + MemberReadyToShutdownEvent memberReadyToShutdownEvent = new MemberReadyToShutdownEvent( + instanceReadyToShutdownEvent.getServiceName(), + instanceReadyToShutdownEvent.getClusterId(), + instanceReadyToShutdownEvent.getNetworkPartitionId(), + instanceReadyToShutdownEvent.getPartitionId(), + instanceReadyToShutdownEvent.getMemberId()); + try { + TopologyManager.acquireWriteLock(); + member.setStatus(MemberStatus.ReadyToShutDown); + log.info("member started event adding status started"); + + TopologyManager.updateTopology(topology); + } finally { + TopologyManager.releaseWriteLock(); + } + TopologyEventPublisher.sendMemberReadyToShutdownEvent(memberReadyToShutdownEvent); + //calling the actual termination of the instance + new CloudControllerServiceImpl().terminateInstance(memberId); + + } + public static void handleMemberTerminated(String serviceName, String clusterId, String networkPartitionId, String partitionId, String memberId) { Topology topology = TopologyManager.getTopology(); Service service = topology.getService(serviceName); http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/6752bb73/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 efe335b..99378c2 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 @@ -22,9 +22,6 @@ import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.pojo.Cartridge; import org.apache.stratos.cloud.controller.pojo.ClusterContext; import org.apache.stratos.cloud.controller.pojo.PortMapping; -import org.apache.stratos.cloud.controller.pojo.Registrant; -import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder; -import org.apache.stratos.cloud.controller.util.CloudControllerUtil; import org.apache.stratos.messaging.broker.publish.EventPublisher; import org.apache.stratos.messaging.domain.topology.Cluster; import org.apache.stratos.messaging.domain.topology.Port; @@ -36,7 +33,6 @@ import org.apache.stratos.messaging.event.topology.*; import org.apache.stratos.messaging.util.Constants; import java.util.List; -import java.util.Properties; /** * this is to send the relevant events from cloud controller to topology topic @@ -127,6 +123,14 @@ public class TopologyEventPublisher { publishEvent(memberActivatedEvent); } + public static void sendMemberReadyToShutdownEvent(MemberReadyToShutdownEvent memberReadyToShutdownEvent) { + if(log.isInfoEnabled()) { + log.info(String.format("Publishing member activated event: [service] %s [cluster] %s [network-partition] %s [partition] %s [member] %s", + memberReadyToShutdownEvent.getServiceName(), memberReadyToShutdownEvent.getClusterId(), memberReadyToShutdownEvent.getNetworkPartitionId(), memberReadyToShutdownEvent.getPartitionId(), memberReadyToShutdownEvent.getMemberId())); + } + publishEvent(memberReadyToShutdownEvent); + } + public static void sendMemberTerminatedEvent(String serviceName, String clusterId, String networkPartitionId, String partitionId, String memberId) { MemberTerminatedEvent memberTerminatedEvent = new MemberTerminatedEvent(serviceName, clusterId, networkPartitionId, partitionId, memberId); if(log.isInfoEnabled()) {
