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()) {

Reply via email to