Repository: incubator-stratos
Updated Branches:
  refs/heads/master 7af4ab696 -> 721dd0c17


implementing STRATOS-454


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

Branch: refs/heads/master
Commit: 721dd0c17789e3ffd710cfaba610bd4889fb07ed
Parents: 7af4ab6
Author: rekathiru <[email protected]>
Authored: Mon Feb 17 19:10:43 2014 +0530
Committer: rekathiru <[email protected]>
Committed: Mon Feb 17 19:10:43 2014 +0530

----------------------------------------------------------------------
 .../stratos/cartridge/agent/CartridgeAgent.java |  6 +--
 .../publisher/CartridgeAgentEventPublisher.java | 28 +++++++++++++
 .../InstanceStatusEventMessageDelegator.java    |  6 +++
 .../controller/topology/TopologyBuilder.java    | 44 +++++++++++++++++++-
 .../topology/TopologyEventPublisher.java        | 11 ++++-
 .../messaging/domain/topology/MemberStatus.java |  3 +-
 .../topology/MemberReadyToShutdownEvent.java    | 18 ++++++++
 7 files changed, 110 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/721dd0c1/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
 
b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
index 3e95da0..dc449b0 100644
--- 
a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
+++ 
b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/CartridgeAgent.java
@@ -120,9 +120,6 @@ public class CartridgeAgent implements Runnable {
         // Wait for all ports to be active
         CartridgeAgentUtils.waitUntilPortsActive("localhost", 
CartridgeAgentConfiguration.getInstance().getPorts());
 
-        // Mount persistance volumes.
-        ExtensionUtils.executeVolumeMountExtension();
-
         // Check repo url
         String repoUrl = 
CartridgeAgentConfiguration.getInstance().getRepoUrl();
         if ("null".equals(repoUrl) || StringUtils.isBlank(repoUrl)) {
@@ -252,6 +249,9 @@ public class CartridgeAgent implements Runnable {
         if(log.isInfoEnabled()) {
             log.info("Executing cleaning up the data in the cartridge 
instance...");
         }
+        //sending event on the maintenance mode
+        CartridgeAgentEventPublisher.publishMaintenanceModeEvent();
+
         //cleaning up the cartridge instance's data
         ExtensionUtils.executeCleanupExtension();
         if(log.isInfoEnabled()) {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/721dd0c1/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
 
b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
index 70b4989..df2f1ac 100644
--- 
a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
+++ 
b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
@@ -7,6 +7,7 @@ import 
org.apache.stratos.cartridge.agent.statistics.publisher.HealthStatisticsN
 import org.apache.stratos.cartridge.agent.util.ExtensionUtils;
 import org.apache.stratos.messaging.broker.publish.EventPublisher;
 import 
org.apache.stratos.messaging.event.instance.status.InstanceActivatedEvent;
+import 
org.apache.stratos.messaging.event.instance.status.InstanceMaintenanceModeEvent;
 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;
@@ -19,6 +20,7 @@ public class CartridgeAgentEventPublisher {
     private static boolean started;
     private static boolean activated;
     private static boolean readyToShutdown;
+    private static boolean maintenance;
 
     public static void publishInstanceStartedEvent() {
         if (!started) {
@@ -107,4 +109,30 @@ public class CartridgeAgentEventPublisher {
             }
         }
     }
+
+     public static void publishMaintenanceModeEvent() {
+        if (!maintenance) {
+            if (log.isInfoEnabled()) {
+                log.info("Publishing instance maintenance mode event");
+            }
+            InstanceMaintenanceModeEvent event = new 
InstanceMaintenanceModeEvent(
+                    CartridgeAgentConfiguration.getInstance().getServiceName(),
+                    CartridgeAgentConfiguration.getInstance().getClusterId(),
+                    
CartridgeAgentConfiguration.getInstance().getNetworkPartitionId(),
+                    CartridgeAgentConfiguration.getInstance().getPartitionId(),
+                    CartridgeAgentConfiguration.getInstance().getMemberId());
+
+            EventPublisher eventPublisher = new 
EventPublisher(Constants.INSTANCE_STATUS_TOPIC);
+            eventPublisher.publish(event);
+            maintenance = true;
+            if (log.isInfoEnabled()) {
+                log.info("Instance Maintenance mode event published");
+            }
+        } else {
+            if (log.isWarnEnabled()) {
+                log.warn("Instance already in a Maintenance mode....");
+            }
+        }
+    }
 }
+

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/721dd0c1/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 ff6970f..f019a15 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
@@ -22,6 +22,7 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.topology.TopologyBuilder;
 import 
org.apache.stratos.messaging.event.instance.status.InstanceActivatedEvent;
+import 
org.apache.stratos.messaging.event.instance.status.InstanceMaintenanceModeEvent;
 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;
@@ -59,6 +60,11 @@ public class InstanceStatusEventMessageDelegator implements 
Runnable {
                     String json = message.getText();
                     
TopologyBuilder.handleMemberReadyToShutdown((InstanceReadyToShutdownEvent) Util.
                             jsonToObject(json, 
InstanceReadyToShutdownEvent.class));
+                } else if 
(InstanceMaintenanceModeEvent.class.getName().equals(type)) {
+                    //retrieve the actual message
+                    String json = message.getText();
+                    
TopologyBuilder.handleMemberMaintenance((InstanceMaintenanceModeEvent) Util.
+                            jsonToObject(json, 
InstanceMaintenanceModeEvent.class));
                 } else {
                     log.warn("Event message received is not 
InstanceStartedEvent or InstanceActivatedEvent");
                 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/721dd0c1/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 0da9449..0bc0b6c 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
@@ -32,11 +32,12 @@ 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.InstanceMaintenanceModeEvent;
 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.MemberMaintenanceModeEvent;
 import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent;
-import org.apache.stratos.messaging.util.Constants;
 
 import java.util.List;
 import java.util.Properties;
@@ -344,6 +345,47 @@ public class TopologyBuilder {
 
     }
 
+     public static void handleMemberMaintenance(InstanceMaintenanceModeEvent 
instanceMaintenanceModeEvent)
+                            throws InvalidMemberException, 
InvalidCartridgeTypeException {
+        String memberId = instanceMaintenanceModeEvent.getMemberId();
+        Topology topology = TopologyManager.getTopology();
+        Service service = 
topology.getService(instanceMaintenanceModeEvent.getServiceName());
+        //update the status of the member
+        if (service == null) {
+            throw new RuntimeException(String.format("Service %s does not 
exist",
+                                                     
instanceMaintenanceModeEvent.getServiceName()));
+        }
+
+        Cluster cluster = 
service.getCluster(instanceMaintenanceModeEvent.getClusterId());
+        if (cluster == null) {
+            throw new RuntimeException(String.format("Cluster %s does not 
exist",
+                                                     
instanceMaintenanceModeEvent.getClusterId()));
+        }
+        Member member = 
cluster.getMember(instanceMaintenanceModeEvent.getMemberId());
+        if (member == null) {
+            throw new RuntimeException(String.format("Member %s does not 
exist",
+                    instanceMaintenanceModeEvent.getMemberId()));
+        }
+        MemberMaintenanceModeEvent memberMaintenanceModeEvent = new 
MemberMaintenanceModeEvent(
+                                                                
instanceMaintenanceModeEvent.getServiceName(),
+                                                                
instanceMaintenanceModeEvent.getClusterId(),
+                                                                
instanceMaintenanceModeEvent.getNetworkPartitionId(),
+                                                                
instanceMaintenanceModeEvent.getPartitionId(),
+                                                                
instanceMaintenanceModeEvent.getMemberId());
+        try {
+            TopologyManager.acquireWriteLock();
+            member.setStatus(MemberStatus.Maintenance);
+            log.info("member maintenance mode event adding status started");
+
+            TopologyManager.updateTopology(topology);
+        } finally {
+            TopologyManager.releaseWriteLock();
+        }
+        //publishing data
+        
TopologyEventPublisher.sendMemberMaintenanceModeEvent(memberMaintenanceModeEvent);
+
+    }
+
     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/721dd0c1/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 6ff3f75..c039af7 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
@@ -129,12 +129,21 @@ public class TopologyEventPublisher {
 
     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",
+            log.info(String.format("Publishing member Ready to shut down 
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 
sendMemberMaintenanceModeEvent(MemberMaintenanceModeEvent 
memberMaintenanceModeEvent) {
+            if(log.isInfoEnabled()) {
+               log.info(String.format("Publishing Maintenance mode event: 
[service] %s [cluster] %s [network-partition] %s [partition] %s [member] %s",
+                       memberMaintenanceModeEvent.getServiceName(), 
memberMaintenanceModeEvent.getClusterId(), 
memberMaintenanceModeEvent.getNetworkPartitionId(), 
memberMaintenanceModeEvent.getPartitionId(), 
memberMaintenanceModeEvent.getMemberId()));
+            }
+            publishEvent(memberMaintenanceModeEvent);
+       }
+
+
     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()) {

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/721dd0c1/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/MemberStatus.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/MemberStatus.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/MemberStatus.java
index fd74e4c..d6d14a8 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/MemberStatus.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/MemberStatus.java
@@ -26,5 +26,6 @@ import javax.xml.bind.annotation.XmlRootElement;
  */
 @XmlRootElement
 public enum MemberStatus {
-    Created, Starting, Activated, Suspended, ReadyToShutDown, ShuttingDown, 
Terminated
+    Created, Starting, Activated, Suspended, ReadyToShutDown, ShuttingDown, 
Terminated, Maintenance
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/721dd0c1/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberReadyToShutdownEvent.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberReadyToShutdownEvent.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberReadyToShutdownEvent.java
index 7c93b3e..b521e76 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberReadyToShutdownEvent.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/MemberReadyToShutdownEvent.java
@@ -1,3 +1,21 @@
+/*
+ * 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.MemberStatus;

Reply via email to