You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by is...@apache.org on 2014/10/19 06:39:24 UTC
[2/4] git commit: life cycle status machine contd.
life cycle status machine contd.
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/17d68aba
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/17d68aba
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/17d68aba
Branch: refs/heads/4.0.0-grouping
Commit: 17d68aba871352cf94ecbb0d843bfbb587478516
Parents: 4ec1d6f
Author: Isuru Haththotuwa <is...@apache.org>
Authored: Fri Oct 17 17:36:56 2014 +0530
Committer: Isuru Haththotuwa <is...@apache.org>
Committed: Sun Oct 19 08:52:07 2014 +0530
----------------------------------------------------------------------
.../AutoscalerTopologyEventReceiver.java | 20 ++++++---
.../monitor/cluster/ClusterMonitor.java | 4 +-
.../monitor/cluster/LbClusterMonitor.java | 4 +-
.../status/checker/StatusChecker.java | 2 +-
.../InstanceStatusEventMessageDelegator.java | 31 ++-----------
.../controller/topology/TopologyBuilder.java | 35 +++++++++++----
.../conf/LoadBalancerConfiguration.java | 8 +---
.../messaging/domain/topology/Cluster.java | 27 ++++++++---
.../domain/topology/ClusterStatus.java | 40 +++++++++++++----
.../LifeCycleStateTransitionBehavior.java | 35 +++++++++++++++
.../messaging/domain/topology/Member.java | 23 +++++++---
.../InvalidLifecycleTransitionException.java | 47 --------------------
.../lifecycle/LifeCycleStateManager.java | 33 ++++++++------
.../topology/ClusterActivatedProcessor.java | 10 ++---
.../ClusterMaintenanceModeMessageProcessor.java | 5 ++-
.../MemberActivatedMessageProcessor.java | 10 ++---
.../MemberMaintenanceModeProcessor.java | 10 ++---
.../MemberReadyToShutdownMessageProcessor.java | 10 ++---
.../topology/MemberStartedMessageProcessor.java | 10 ++---
.../MemberSuspendedMessageProcessor.java | 10 ++---
20 files changed, 201 insertions(+), 173 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
index 1e20937..b342a81 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -306,7 +306,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
AbstractClusterMonitor monitor;
if (AutoscalerContext.getInstance().monitorExist((cluster.getClusterId()))) {
monitor = (AbstractClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterMaitenanceEvent.getClusterId());
- monitor.setStatus(Status.In_Active);
+ monitor.setStatus(Status.In_Maintenance);
} else if (AutoscalerContext.getInstance().
lbMonitorExist((cluster.getClusterId()))) {
AutoscalerContext.getInstance().getLBMonitor(clusterMaitenanceEvent.getClusterId()).
@@ -589,19 +589,25 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
th = new Thread(
new ApplicationMonitorAdder(applicationId));
}
- // if (th != null) {
- th.start();
+
+ if (th != null) {
+ th.start();
// try {
// th.join();
// } catch (InterruptedException ignore) {
- // }
- if (log.isDebugEnabled()) {
- log.debug(String
+ if (log.isDebugEnabled()) {
+ log.debug(String
.format("Application monitor thread has been started successfully: " +
"[application] %s ", applicationId));
+ }
+ } else {
+ if (log.isDebugEnabled()) {
+ log.debug(String
+ .format("Application monitor thread already exists: " +
+ "[application] %s ", applicationId));
+ }
}
- // }
}
private class ApplicationMonitorAdder implements Runnable {
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
index b9e9948..c681a0f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
@@ -84,12 +84,12 @@ public class ClusterMonitor extends AbstractClusterMonitor {
log.debug("Cluster monitor is running.. " + this.toString());
}
try {
- if (!ClusterStatus.In_Maintenance.equals(status)) {
+ if (!ClusterStatus.Inactive.equals(status)) {
monitor();
} else {
if (log.isDebugEnabled()) {
log.debug("Cluster monitor is suspended as the cluster is in " +
- ClusterStatus.In_Maintenance + " mode......");
+ ClusterStatus.Inactive + " mode......");
}
}
} catch (Exception e) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/LbClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/LbClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/LbClusterMonitor.java
index e627503..d3a2371 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/LbClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/LbClusterMonitor.java
@@ -63,12 +63,12 @@ public class LbClusterMonitor extends AbstractClusterMonitor {
log.debug("Cluster monitor is running.. " + this.toString());
}
try {
- if( !ClusterStatus.In_Maintenance.equals(status)) {
+ if( !ClusterStatus.Inactive.equals(status)) {
monitor();
} else {
if (log.isDebugEnabled()) {
log.debug("LB Cluster monitor is suspended as the cluster is in " +
- ClusterStatus.In_Maintenance + " mode......");
+ ClusterStatus.Inactive + " mode......");
}
}
} catch (Exception e) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
index c76df01..ff45af1 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
@@ -283,7 +283,7 @@ public class StatusChecker {
for (Map.Entry<String, ClusterDataHolder> clusterDataHolderEntry : clusterData.entrySet()) {
Service service = TopologyManager.getTopology().getService(clusterDataHolderEntry.getValue().getServiceType());
if (service.getCluster(clusterDataHolderEntry.getValue().getClusterId()).
- getStatus() == Status.Activated) {
+ getStatus() == ClusterStatus.Active) {
clusterActiveStatus = true;
} else {
clusterActiveStatus = false;
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/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 fd89723..dd279ed 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,7 +21,6 @@ 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.messaging.domain.topology.lifecycle.InvalidLifecycleTransitionException;
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;
@@ -49,51 +48,27 @@ public class InstanceStatusEventMessageDelegator implements Runnable {
if (InstanceStartedEvent.class.getName().equals(type)) {
// retrieve the actual message
String json = message.getText();
- try {
TopologyBuilder.handleMemberStarted((InstanceStartedEvent) Util.
jsonToObject(json, InstanceStartedEvent.class));
- } catch (InvalidLifecycleTransitionException e) {
- //TODO: handle properly
- log.error(e);
- }
-
} else if (InstanceActivatedEvent.class.getName().equals(type)) {
// retrieve the actual message
String json = message.getText();
- try {
- TopologyBuilder.handleMemberActivated((InstanceActivatedEvent) Util.
+ TopologyBuilder.handleMemberActivated((InstanceActivatedEvent) Util.
jsonToObject(json, InstanceActivatedEvent.class));
- } catch (InvalidLifecycleTransitionException e) {
- //TODO: handle properly
- log.error(e);
- }
-
} else if (InstanceReadyToShutdownEvent.class.getName().equals(type)) {
//retrieve the actual message
String json = message.getText();
- try {
- TopologyBuilder.handleMemberReadyToShutdown((InstanceReadyToShutdownEvent) Util.
+ TopologyBuilder.handleMemberReadyToShutdown((InstanceReadyToShutdownEvent) Util.
jsonToObject(json, InstanceReadyToShutdownEvent.class));
- } catch (InvalidLifecycleTransitionException e) {
- //TODO: handle properly
- log.error(e);
- }
-
} else if (InstanceMaintenanceModeEvent.class.getName().equals(type)) {
//retrieve the actual message
String json = message.getText();
- try {
- TopologyBuilder.handleMemberMaintenance((InstanceMaintenanceModeEvent) Util.
+ TopologyBuilder.handleMemberMaintenance((InstanceMaintenanceModeEvent) Util.
jsonToObject(json, InstanceMaintenanceModeEvent.class));
- } catch (InvalidLifecycleTransitionException e) {
- //TODO: handle properly
- log.error(e);
- }
-
} else {
log.warn("Event message received is not InstanceStartedEvent or InstanceActivatedEvent");
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/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 906323b..9f74524 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
@@ -29,7 +29,6 @@ import org.apache.stratos.cloud.controller.publisher.CartridgeInstanceDataPublis
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.domain.topology.lifecycle.InvalidLifecycleTransitionException;
import org.apache.stratos.messaging.domain.topology.util.CompositeApplicationBuilder;
import org.apache.stratos.messaging.event.application.status.ApplicationActivatedEvent;
import org.apache.stratos.messaging.event.application.status.ClusterActivatedEvent;
@@ -151,7 +150,7 @@ public class TopologyBuilder {
}
cluster.setProperties(props);
cluster.setLbCluster(isLb);
- cluster.setStatus(Status.Created);
+ //cluster.setStatus(Status.Created);
service.addCluster(cluster);
}
TopologyManager.updateTopology(topology);
@@ -210,7 +209,11 @@ public class TopologyBuilder {
try {
TopologyManager.acquireWriteLock();
Cluster cluster = service.getCluster(ctxt.getClusterId());
- cluster.setStatus(Status.In_Active);
+ if (!cluster.isStateTransitionValid(ClusterStatus.Inactive)) {
+ log.error("Invalid State Transition from " + cluster.getStatus() + " to " + ClusterStatus.Inactive);
+ }
+ cluster.setStatus(ClusterStatus.Inactive);
+ //cluster.setStatus(Status.In_Maintenance);
TopologyManager.updateTopology(topology);
} finally {
TopologyManager.releaseWriteLock();
@@ -256,7 +259,7 @@ public class TopologyBuilder {
publicIp, privateIp, context);
}
- public static void handleMemberStarted(InstanceStartedEvent instanceStartedEvent) throws InvalidLifecycleTransitionException {
+ public static void handleMemberStarted(InstanceStartedEvent instanceStartedEvent) {
Topology topology = TopologyManager.getTopology();
Service service = topology.getService(instanceStartedEvent.getServiceName());
if (service == null) {
@@ -303,6 +306,9 @@ public class TopologyBuilder {
try {
TopologyManager.acquireWriteLock();
// try update lifecycle state
+ if (!member.isStateTransitionValid(MemberStatus.Starting)) {
+ log.error("Invalid State Transition from " + member.getStatus() + " to " + MemberStatus.Starting);
+ }
member.setStatus(MemberStatus.Starting);
log.info("member started event adding status started");
@@ -322,7 +328,7 @@ public class TopologyBuilder {
null);
}
- public static void handleMemberActivated(InstanceActivatedEvent instanceActivatedEvent) throws InvalidLifecycleTransitionException {
+ public static void handleMemberActivated(InstanceActivatedEvent instanceActivatedEvent) {
Topology topology = TopologyManager.getTopology();
Service service = topology.getService(instanceActivatedEvent.getServiceName());
if (service == null) {
@@ -372,6 +378,9 @@ public class TopologyBuilder {
try {
TopologyManager.acquireWriteLock();
// try update lifecycle state
+ if (!member.isStateTransitionValid(MemberStatus.Activated)) {
+ log.error("Invalid State Transition from " + member.getStatus() + " to " + MemberStatus.Activated);
+ }
member.setStatus(MemberStatus.Activated);
log.info("member started event adding status activated");
Cartridge cartridge = FasterLookUpDataHolder.getInstance().
@@ -407,7 +416,7 @@ public class TopologyBuilder {
}
public static void handleMemberReadyToShutdown(InstanceReadyToShutdownEvent instanceReadyToShutdownEvent)
- throws InvalidMemberException, InvalidCartridgeTypeException, InvalidLifecycleTransitionException {
+ throws InvalidMemberException, InvalidCartridgeTypeException {
Topology topology = TopologyManager.getTopology();
Service service = topology.getService(instanceReadyToShutdownEvent.getServiceName());
//update the status of the member
@@ -459,6 +468,10 @@ public class TopologyBuilder {
instanceReadyToShutdownEvent.getMemberId());
try {
TopologyManager.acquireWriteLock();
+
+ if (!member.isStateTransitionValid(MemberStatus.ReadyToShutDown)) {
+ log.error("Invalid State Transition from " + member.getStatus() + " to " + MemberStatus.ReadyToShutDown);
+ }
member.setStatus(MemberStatus.ReadyToShutDown);
log.info("Member Ready to shut down event adding status started");
@@ -479,7 +492,7 @@ public class TopologyBuilder {
}
public static void handleMemberMaintenance(InstanceMaintenanceModeEvent instanceMaintenanceModeEvent)
- throws InvalidMemberException, InvalidCartridgeTypeException, InvalidLifecycleTransitionException {
+ throws InvalidMemberException, InvalidCartridgeTypeException {
Topology topology = TopologyManager.getTopology();
Service service = topology.getService(instanceMaintenanceModeEvent.getServiceName());
//update the status of the member
@@ -535,6 +548,9 @@ public class TopologyBuilder {
try {
TopologyManager.acquireWriteLock();
// try update lifecycle state
+ if (!member.isStateTransitionValid(MemberStatus.In_Maintenance)) {
+ log.error("Invalid State Transition from " + member.getStatus() + " to " + MemberStatus.In_Maintenance);
+ }
member.setStatus(MemberStatus.In_Maintenance);
log.info("member maintenance mode event adding status started");
@@ -630,7 +646,7 @@ public class TopologyBuilder {
Cluster cluster = new Cluster(applicationClusterContext.getCartridgeType(),
applicationClusterContext.getClusterId(), applicationClusterContext.getDeploymentPolicyName(),
applicationClusterContext.getAutoscalePolicyName(), application.getUniqueIdentifier());
- cluster.setStatus(Status.Created);
+ //cluster.setStatus(Status.Created);
cluster.addHostName(applicationClusterContext.getHostName());
cluster.setTenantRange(applicationClusterContext.getTenantRange());
clusters.add(cluster);
@@ -756,7 +772,8 @@ public class TopologyBuilder {
clusterActivatedEvent.getClusterId());
try {
TopologyManager.acquireWriteLock();
- cluster.setStatus(Status.Activated);
+ //cluster.setStatus(Status.Activated);
+ cluster.setStatus(ClusterStatus.Active);
log.info("Cluster activated adding status started");
TopologyManager.updateTopology(topology);
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
index 4fff70a..ed8aa05 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
@@ -32,7 +32,6 @@ import org.apache.stratos.load.balancer.context.LoadBalancerContext;
import org.apache.stratos.load.balancer.context.LoadBalancerContextUtil;
import org.apache.stratos.load.balancer.exception.InvalidConfigurationException;
import org.apache.stratos.messaging.domain.topology.*;
-import org.apache.stratos.messaging.domain.topology.lifecycle.InvalidLifecycleTransitionException;
import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
import java.io.File;
@@ -489,12 +488,7 @@ public class LoadBalancerConfiguration {
Port port = new Port(portNode.getName(), Integer.valueOf(value), Integer.valueOf(proxy));
member.addPort(port);
}
- try {
- member.setStatus(MemberStatus.Activated);
-
- } catch (InvalidLifecycleTransitionException e) {
- log.error(e);
- }
+ member.setStatus(MemberStatus.Activated);
cluster.addMember(member);
}
// Add cluster to service
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
index 578089a..31b7bf1 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Cluster.java
@@ -20,6 +20,7 @@
package org.apache.stratos.messaging.domain.topology;
import org.apache.commons.lang3.StringUtils;
+import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager;
import org.apache.stratos.messaging.util.Util;
import org.apache.stratos.messaging.util.bean.type.map.MapAdapter;
@@ -33,7 +34,7 @@ import java.util.*;
* Key: serviceName, clusterId
*/
@XmlRootElement
-public class Cluster implements Serializable {
+public class Cluster implements Serializable, LifeCycleStateTransitionBehavior<ClusterStatus> {
private static final long serialVersionUID = -361960242360176077L;
@@ -49,13 +50,14 @@ public class Cluster implements Serializable {
@XmlJavaTypeAdapter(MapAdapter.class)
private Map<String, Member> memberMap;
- private Status status;
+ //private Status status;
private String appId;
private String loadBalanceAlgorithmName;
@XmlJavaTypeAdapter(MapAdapter.class)
private Properties properties;
+ private LifeCycleStateManager<ClusterStatus> clusterStateManager;
public Cluster(String serviceName, String clusterId, String deploymentPolicyName,
String autoscalePolicyName, String appId) {
@@ -66,6 +68,7 @@ public class Cluster implements Serializable {
this.hostNames = new ArrayList<String>();
this.memberMap = new HashMap<String, Member>();
this.appId = appId;
+ this.clusterStateManager = new LifeCycleStateManager<ClusterStatus>(ClusterStatus.Created);
}
public String getServiceName() {
@@ -207,12 +210,24 @@ public class Cluster implements Serializable {
return partitionIds.keySet();
}
- public Status getStatus() {
- return status;
+ @Override
+ public boolean isStateTransitionValid(ClusterStatus newState) {
+ return clusterStateManager.isStateTransitionValid(newState);
+ }
+
+ @Override
+ public Stack<ClusterStatus> getTransitionedStates() {
+ return clusterStateManager.getStateStack();
+ }
+
+ public ClusterStatus getStatus() {
+ //return status;
+ return clusterStateManager.getCurrentState();
}
- public void setStatus(Status status) {
- this.status = status;
+ public void setStatus(ClusterStatus newStatus) {
+ clusterStateManager.changeState(newStatus);
+ //this.status = newStatus;
}
public boolean equals(Object other) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ClusterStatus.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ClusterStatus.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ClusterStatus.java
index 9556c4d..a9f8afe 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ClusterStatus.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ClusterStatus.java
@@ -18,13 +18,38 @@
*/
package org.apache.stratos.messaging.domain.topology;
-public enum ClusterStatus {
- Created(1),
- In_Maintenance(2),
- terminating(3),
- Removed(4),
- Running(5),
- Active(6);
+
+import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public enum ClusterStatus implements LifeCycleState {
+ Created(0) {
+ @Override
+ public Set<LifeCycleState> getNextStates() {
+ return new HashSet<LifeCycleState>(Arrays.asList(ClusterStatus.Active));
+ }
+ },
+ Active(1) {
+ @Override
+ public Set<LifeCycleState> getNextStates() {
+ return new HashSet<LifeCycleState>(Arrays.asList(ClusterStatus.Inactive));
+ }
+ },
+ Inactive(3) {
+ @Override
+ public Set<LifeCycleState> getNextStates() {
+ return new HashSet<LifeCycleState>(Arrays.asList(ClusterStatus.Active, ClusterStatus.Terminated));
+ }
+ },
+ Terminated(4) {
+ @Override
+ public Set<LifeCycleState> getNextStates() {
+ return null;
+ }
+ };
private int code;
@@ -35,5 +60,4 @@ public enum ClusterStatus {
public int getCode() {
return code;
}
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/LifeCycleStateTransitionBehavior.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/LifeCycleStateTransitionBehavior.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/LifeCycleStateTransitionBehavior.java
new file mode 100644
index 0000000..2199b9a
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/LifeCycleStateTransitionBehavior.java
@@ -0,0 +1,35 @@
+/*
+ * 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.domain.topology;
+
+import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
+
+import java.util.Stack;
+
+public interface LifeCycleStateTransitionBehavior<T extends LifeCycleState> {
+
+ public boolean isStateTransitionValid(T newState);
+
+ public Stack<T> getTransitionedStates ();
+
+ public T getStatus();
+
+ public void setStatus(T newState);
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Member.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Member.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Member.java
index 4ea198c..f0cde24 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Member.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Member.java
@@ -19,7 +19,7 @@
package org.apache.stratos.messaging.domain.topology;
-import org.apache.stratos.messaging.domain.topology.lifecycle.InvalidLifecycleTransitionException;
+import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleStateManager;
import org.apache.stratos.messaging.util.bean.type.map.MapAdapter;
@@ -33,7 +33,7 @@ import java.util.*;
* Key: serviceName, clusterId, memberId
*/
@XmlRootElement
-public class Member implements Serializable {
+public class Member implements Serializable, LifeCycleStateTransitionBehavior<MemberStatus> {
private static final long serialVersionUID = 4179661867903664661L;
private final String serviceName;
@@ -74,16 +74,27 @@ public class Member implements Serializable {
return memberId;
}
+ @Override
+ public boolean isStateTransitionValid(MemberStatus newState) {
+ return memberStateManager.isStateTransitionValid(newState);
+ }
+
+ @Override
public MemberStatus getStatus() {
return memberStateManager.getCurrentState();
}
- public void setStatus(MemberStatus status) throws InvalidLifecycleTransitionException {
- this.memberStateManager.changeState(status);
+ public Stack<MemberStatus> getTransitionedStates () {
+ return memberStateManager.getStateStack();
+ }
+
+ @Override
+ public void setStatus(MemberStatus newState) {
+ memberStateManager.changeState(newState);
}
- public boolean isActive() {
- return (this.memberStateManager.getCurrentState() == MemberStatus.Activated);
+ public boolean isActive () {
+ return memberStateManager.getCurrentState().equals(MemberStatus.Activated);
}
public Collection<Port> getPorts() {
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/lifecycle/InvalidLifecycleTransitionException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/lifecycle/InvalidLifecycleTransitionException.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/lifecycle/InvalidLifecycleTransitionException.java
deleted file mode 100644
index 279e70d..0000000
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/lifecycle/InvalidLifecycleTransitionException.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * 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.domain.topology.lifecycle;
-
-public class InvalidLifecycleTransitionException extends Exception {
-
- private String message;
-
- public InvalidLifecycleTransitionException() {
- super();
- }
-
- public InvalidLifecycleTransitionException(String message, Throwable cause) {
- super(message, cause);
- this.message = message;
- }
-
- public InvalidLifecycleTransitionException(String message) {
- super(message);
- this.message = message;
- }
-
- public InvalidLifecycleTransitionException(Throwable cause) {
- super(cause);
- }
-
- public String getMessage() {
- return message;
- }
-}
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/lifecycle/LifeCycleStateManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/lifecycle/LifeCycleStateManager.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/lifecycle/LifeCycleStateManager.java
index ee0d6e5..8131b1d 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/lifecycle/LifeCycleStateManager.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/lifecycle/LifeCycleStateManager.java
@@ -35,23 +35,24 @@ public class LifeCycleStateManager<T extends LifeCycleState> implements Serializ
public LifeCycleStateManager(T initialState) {
stateStack = new Stack<T>();
stateStack.push(initialState);
+ //if (log.isDebugEnabled()) {
+ log.info("Life Cycle State Manager created, initial state: " + initialState.toString());
+ //}
}
- public void changeState (T nextState) throws InvalidLifecycleTransitionException {
+ public <S extends TopologyEvent> boolean isPreConditionsValid (T nextState, S topologyEvent) {
+ // TODO: implement
+ return true;
+ }
+
+ public boolean isStateTransitionValid (T nextState) {
- if(getCurrentState().getNextStates().contains(nextState)) {
- // do the transition
- stateStack.push(nextState);
- //if (log.isDebugEnabled()) {
- log.info("Life Cycle State successfully updated from " + getCurrentState() + " to " + nextState);
- //}
- } else {
- // invalid state transition
- String errorMsg = "Attempted transition from " + getCurrentState() + " to " + nextState
- + " is invalid";
- log.error(errorMsg);
- throw new InvalidLifecycleTransitionException(errorMsg);
- }
+ return stateStack.peek().getNextStates().contains(nextState);
+ }
+
+ public void changeState (T nextState) {
+
+ stateStack.push(nextState);
}
public Stack<T> getStateStack () {
@@ -61,4 +62,8 @@ public class LifeCycleStateManager<T extends LifeCycleState> implements Serializ
public T getCurrentState () {
return stateStack.peek();
}
+
+ public T getPreviousState () {
+ return stateStack.get(1);
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
index cb8eb5f..69fc3e7 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterActivatedProcessor.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.Service;
-import org.apache.stratos.messaging.domain.topology.Status;
-import org.apache.stratos.messaging.domain.topology.Topology;
+import org.apache.stratos.messaging.domain.topology.*;
import org.apache.stratos.messaging.event.topology.ClusterActivatedEvent;
import org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
import org.apache.stratos.messaging.message.filter.topology.TopologyServiceFilter;
@@ -118,7 +115,10 @@ public class ClusterActivatedProcessor extends MessageProcessor {
}
} else {
// Apply changes to the topology
- cluster.setStatus(Status.Activated);
+ if (!cluster.isStateTransitionValid(ClusterStatus.Active)) {
+ log.error("Invalid State Transition from " + cluster.getStatus() + " to " + ClusterStatus.Active);
+ }
+ cluster.setStatus(ClusterStatus.Active);
if (log.isInfoEnabled()) {
log.info(String.format("Cluster updated as activated : %s",
cluster.toString()));
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterMaintenanceModeMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterMaintenanceModeMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterMaintenanceModeMessageProcessor.java
index 4dc573e..35966e8 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterMaintenanceModeMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterMaintenanceModeMessageProcessor.java
@@ -110,7 +110,10 @@ public class ClusterMaintenanceModeMessageProcessor extends MessageProcessor {
}
} else {
// Apply changes to the topology
- cluster.setStatus(Status.In_Active);
+ if (!cluster.isStateTransitionValid(ClusterStatus.Inactive)) {
+ log.error("Invalid State Transition from " + cluster.getStatus() + " to " + ClusterStatus.Inactive);
+ }
+ cluster.setStatus(ClusterStatus.Inactive);
if (log.isInfoEnabled()) {
log.info(String.format("Cluster updated as maintenance mode: %s",
cluster.toString()));
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberActivatedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberActivatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberActivatedMessageProcessor.java
index dc98c9e..db9c85c 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberActivatedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberActivatedMessageProcessor.java
@@ -25,7 +25,6 @@ import org.apache.stratos.messaging.domain.topology.Member;
import org.apache.stratos.messaging.domain.topology.MemberStatus;
import org.apache.stratos.messaging.domain.topology.Service;
import org.apache.stratos.messaging.domain.topology.Topology;
-import org.apache.stratos.messaging.domain.topology.lifecycle.InvalidLifecycleTransitionException;
import org.apache.stratos.messaging.event.topology.MemberActivatedEvent;
import org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
import org.apache.stratos.messaging.message.filter.topology.TopologyMemberFilter;
@@ -60,10 +59,6 @@ public class MemberActivatedMessageProcessor extends MessageProcessor {
try {
return doProcess(event, topology);
- } catch (InvalidLifecycleTransitionException e) {
- log.error(e);
- return false;
-
} finally {
TopologyUpdater.releaseWriteLockForCluster(event.getServiceName(), event.getClusterId());
}
@@ -78,7 +73,7 @@ public class MemberActivatedMessageProcessor extends MessageProcessor {
}
}
- private boolean doProcess (MemberActivatedEvent event,Topology topology) throws InvalidLifecycleTransitionException {
+ private boolean doProcess (MemberActivatedEvent event,Topology topology) {
// Apply service filter
if (TopologyServiceFilter.getInstance().isActive()) {
@@ -165,6 +160,9 @@ public class MemberActivatedMessageProcessor extends MessageProcessor {
// Apply changes to the topology
member.addPorts(event.getPorts());
member.setMemberIp(event.getMemberIp());
+ if (!member.isStateTransitionValid(MemberStatus.Activated)) {
+ log.error("Invalid State Transition from " + member.getStatus() + " to " + MemberStatus.Activated);
+ }
member.setStatus(MemberStatus.Activated);
if (log.isInfoEnabled()) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberMaintenanceModeProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberMaintenanceModeProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberMaintenanceModeProcessor.java
index 9408e46..2810b19 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberMaintenanceModeProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberMaintenanceModeProcessor.java
@@ -22,7 +22,6 @@ 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.*;
-import org.apache.stratos.messaging.domain.topology.lifecycle.InvalidLifecycleTransitionException;
import org.apache.stratos.messaging.event.topology.MemberMaintenanceModeEvent;
import org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
import org.apache.stratos.messaging.message.filter.topology.TopologyMemberFilter;
@@ -57,10 +56,6 @@ public class MemberMaintenanceModeProcessor extends MessageProcessor {
try {
return doProcess(event, topology);
- } catch (InvalidLifecycleTransitionException e) {
- log.error(e);
- return false;
-
} finally {
TopologyUpdater.releaseWriteLockForCluster(event.getServiceName(), event.getClusterId());
}
@@ -75,7 +70,7 @@ public class MemberMaintenanceModeProcessor extends MessageProcessor {
}
}
- private boolean doProcess (MemberMaintenanceModeEvent event,Topology topology) throws InvalidLifecycleTransitionException {
+ private boolean doProcess (MemberMaintenanceModeEvent event,Topology topology) {
// Apply service filter
if (TopologyServiceFilter.getInstance().isActive()) {
@@ -148,6 +143,9 @@ public class MemberMaintenanceModeProcessor extends MessageProcessor {
} else {
// Apply changes to the topology
+ if (!member.isStateTransitionValid(MemberStatus.In_Maintenance)) {
+ log.error("Invalid State Transition from " + member.getStatus() + " to " + MemberStatus.In_Maintenance);
+ }
member.setStatus(MemberStatus.In_Maintenance);
if (log.isInfoEnabled()) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberReadyToShutdownMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberReadyToShutdownMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberReadyToShutdownMessageProcessor.java
index 83bb94f..2ede9da 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberReadyToShutdownMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberReadyToShutdownMessageProcessor.java
@@ -21,7 +21,6 @@ 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.*;
-import org.apache.stratos.messaging.domain.topology.lifecycle.InvalidLifecycleTransitionException;
import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent;
import org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
import org.apache.stratos.messaging.message.filter.topology.TopologyMemberFilter;
@@ -56,10 +55,6 @@ public class MemberReadyToShutdownMessageProcessor extends MessageProcessor{
try {
return doProcess(event, topology);
- } catch (InvalidLifecycleTransitionException e) {
- log.error(e);
- return false;
-
} finally {
TopologyUpdater.releaseWriteLockForCluster(event.getServiceName(), event.getClusterId());
}
@@ -74,7 +69,7 @@ public class MemberReadyToShutdownMessageProcessor extends MessageProcessor{
}
}
- private boolean doProcess (MemberReadyToShutdownEvent event,Topology topology) throws InvalidLifecycleTransitionException {
+ private boolean doProcess (MemberReadyToShutdownEvent event,Topology topology) {
// Apply service filter
if (TopologyServiceFilter.getInstance().isActive()) {
@@ -147,6 +142,9 @@ public class MemberReadyToShutdownMessageProcessor extends MessageProcessor{
} else {
// Apply changes to the topology
+ if (!member.isStateTransitionValid(MemberStatus.ReadyToShutDown)) {
+ log.error("Invalid State Transition from " + member.getStatus() + " to " + MemberStatus.ReadyToShutDown);
+ }
member.setStatus(MemberStatus.ReadyToShutDown);
if (log.isInfoEnabled()) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberStartedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberStartedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberStartedMessageProcessor.java
index b55ea26..2e4b171 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberStartedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberStartedMessageProcessor.java
@@ -25,7 +25,6 @@ import org.apache.stratos.messaging.domain.topology.Member;
import org.apache.stratos.messaging.domain.topology.MemberStatus;
import org.apache.stratos.messaging.domain.topology.Service;
import org.apache.stratos.messaging.domain.topology.Topology;
-import org.apache.stratos.messaging.domain.topology.lifecycle.InvalidLifecycleTransitionException;
import org.apache.stratos.messaging.event.topology.MemberStartedEvent;
import org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
import org.apache.stratos.messaging.message.filter.topology.TopologyMemberFilter;
@@ -60,10 +59,6 @@ public class MemberStartedMessageProcessor extends MessageProcessor {
try {
return doProcess(event, topology);
- } catch (InvalidLifecycleTransitionException e) {
- log.error(e);
- return false;
-
} finally {
TopologyUpdater.releaseWriteLockForCluster(event.getServiceName(), event.getClusterId());
}
@@ -78,7 +73,7 @@ public class MemberStartedMessageProcessor extends MessageProcessor {
}
}
- private boolean doProcess (MemberStartedEvent event,Topology topology) throws InvalidLifecycleTransitionException {
+ private boolean doProcess (MemberStartedEvent event,Topology topology) {
// Apply service filter
if (TopologyServiceFilter.getInstance().isActive()) {
@@ -150,6 +145,9 @@ public class MemberStartedMessageProcessor extends MessageProcessor {
} else {
// Apply changes to the topology
+ if (!member.isStateTransitionValid(MemberStatus.Starting)) {
+ log.error("Invalid State Transition from " + member.getStatus() + " to " + MemberStatus.Starting);
+ }
member.setStatus(MemberStatus.Starting);
if (log.isInfoEnabled()) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/17d68aba/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberSuspendedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberSuspendedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberSuspendedMessageProcessor.java
index 56cc055..e57903f 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberSuspendedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/MemberSuspendedMessageProcessor.java
@@ -25,7 +25,6 @@ import org.apache.stratos.messaging.domain.topology.Member;
import org.apache.stratos.messaging.domain.topology.MemberStatus;
import org.apache.stratos.messaging.domain.topology.Service;
import org.apache.stratos.messaging.domain.topology.Topology;
-import org.apache.stratos.messaging.domain.topology.lifecycle.InvalidLifecycleTransitionException;
import org.apache.stratos.messaging.event.topology.MemberSuspendedEvent;
import org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
import org.apache.stratos.messaging.message.filter.topology.TopologyMemberFilter;
@@ -60,10 +59,6 @@ public class MemberSuspendedMessageProcessor extends MessageProcessor {
try {
return doProcess(event, topology);
- } catch (InvalidLifecycleTransitionException e) {
- log.error(e);
- return false;
-
} finally {
TopologyUpdater.releaseWriteLockForCluster(event.getServiceName(), event.getClusterId());
}
@@ -78,7 +73,7 @@ public class MemberSuspendedMessageProcessor extends MessageProcessor {
}
}
- private boolean doProcess (MemberSuspendedEvent event,Topology topology) throws InvalidLifecycleTransitionException {
+ private boolean doProcess (MemberSuspendedEvent event,Topology topology) {
// Apply service filter
if (TopologyServiceFilter.getInstance().isActive()) {
@@ -150,6 +145,9 @@ public class MemberSuspendedMessageProcessor extends MessageProcessor {
} else {
// Apply changes to the topology
+ if (!member.isStateTransitionValid(MemberStatus.Suspended)) {
+ log.error("Invalid State Transition from " + member.getStatus() + " to " + MemberStatus.Suspended);
+ }
member.setStatus(MemberStatus.Suspended);
if (log.isInfoEnabled()) {