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;
