You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2014/10/28 08:45:05 UTC
git commit: adding the valid transition check for status changes
Repository: stratos
Updated Branches:
refs/heads/4.0.0-grouping 097e884bd -> 2ae7e2b94
adding the valid transition check for status changes
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/2ae7e2b9
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/2ae7e2b9
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/2ae7e2b9
Branch: refs/heads/4.0.0-grouping
Commit: 2ae7e2b947f9ad1635fecad739643f2379807efe
Parents: 097e884
Author: reka <rt...@gmail.com>
Authored: Tue Oct 28 13:14:40 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Oct 28 13:14:48 2014 +0530
----------------------------------------------------------------------
.../grouping/topic/StatusEventPublisher.java | 198 ++++++++++++++-----
.../AutoscalerTopologyEventReceiver.java | 22 ++-
.../monitor/AbstractClusterMonitor.java | 24 +--
.../monitor/application/ApplicationMonitor.java | 4 +-
.../autoscaler/monitor/group/GroupMonitor.java | 17 +-
5 files changed, 183 insertions(+), 82 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/2ae7e2b9/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/topic/StatusEventPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/topic/StatusEventPublisher.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/topic/StatusEventPublisher.java
index fece506..5b09a21 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/topic/StatusEventPublisher.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/topic/StatusEventPublisher.java
@@ -7,13 +7,6 @@ import org.apache.stratos.messaging.broker.publish.EventPublisherPool;
import org.apache.stratos.messaging.domain.topology.*;
import org.apache.stratos.messaging.event.Event;
import org.apache.stratos.messaging.event.application.status.*;
-import org.apache.stratos.messaging.event.application.status.AppStatusApplicationActivatedEvent;
-import org.apache.stratos.messaging.event.application.status.AppStatusApplicationInactivatedEvent;
-import org.apache.stratos.messaging.event.application.status.AppStatusApplicationTerminatedEvent;
-import org.apache.stratos.messaging.event.application.status.AppStatusApplicationTerminatingEvent;
-import org.apache.stratos.messaging.event.application.status.AppStatusClusterActivatedEvent;
-import org.apache.stratos.messaging.event.application.status.AppStatusClusterInactivateEvent;
-import org.apache.stratos.messaging.event.application.status.AppStatusGroupActivatedEvent;
import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
import org.apache.stratos.messaging.util.Constants;
@@ -32,10 +25,23 @@ public class StatusEventPublisher {
" [cluster]: " + clusterId);
}
- AppStatusClusterActivatedEvent clusterActivatedEvent =
- new AppStatusClusterActivatedEvent(appId, serviceName, clusterId);
-
- publishEvent(clusterActivatedEvent);
+ try {
+ TopologyManager.acquireReadLockForCluster(serviceName, clusterId);
+ Service service = TopologyManager.getTopology().getService(serviceName);
+ if (service != null) {
+ Cluster cluster = service.getCluster(clusterId);
+ if (cluster.isStateTransitionValid(ClusterStatus.Active)) {
+ AppStatusClusterActivatedEvent clusterActivatedEvent =
+ new AppStatusClusterActivatedEvent(appId, serviceName, clusterId);
+
+ publishEvent(clusterActivatedEvent);
+ } else {
+ log.warn("Active is not in the possible state list of [cluster] " + clusterId);
+ }
+ }
+ } finally {
+ TopologyManager.releaseReadLockForCluster(serviceName, clusterId);
+ }
}
public static void sendClusterInActivateEvent(String appId, String serviceName, String clusterId) {
@@ -45,36 +51,77 @@ public class StatusEventPublisher {
" [cluster]: " + clusterId);
}
- AppStatusClusterInactivateEvent clusterInActivateEvent =
- new AppStatusClusterInactivateEvent(appId, serviceName, clusterId);
+ try {
+ TopologyManager.acquireReadLockForCluster(serviceName, clusterId);
+ Service service = TopologyManager.getTopology().getService(serviceName);
+ if (service != null) {
+ Cluster cluster = service.getCluster(clusterId);
+ if (cluster.isStateTransitionValid(ClusterStatus.Inactive)) {
+ AppStatusClusterInactivateEvent clusterInActivateEvent =
+ new AppStatusClusterInactivateEvent(appId, serviceName, clusterId);
+
+ publishEvent(clusterInActivateEvent);
+ } else {
+ log.warn("In-active is not in the possible state list of [cluster] " + clusterId);
+ }
+ }
+ } finally {
+ TopologyManager.releaseReadLockForCluster(serviceName, clusterId);
- publishEvent(clusterInActivateEvent);
+ }
}
public static void sendClusterTerminatingEvent(String appId, String serviceName, String clusterId) {
if (log.isInfoEnabled()) {
- log.info("Publishing Cluster in-activate event for [application]: " + appId +
+ log.info("Publishing Cluster Terminating event for [application]: " + appId +
" [cluster]: " + clusterId);
}
- //TODO
- AppStatusClusterTerminatingEvent appStatusClusterTerminatingEvent =
- new AppStatusClusterTerminatingEvent(appId, serviceName, clusterId);
+ try {
+ TopologyManager.acquireReadLockForCluster(serviceName, clusterId);
+ Service service = TopologyManager.getTopology().getService(serviceName);
+ if (service != null) {
+ Cluster cluster = service.getCluster(clusterId);
+ if (cluster.isStateTransitionValid(ClusterStatus.Terminating)) {
+ AppStatusClusterTerminatingEvent appStatusClusterTerminatingEvent =
+ new AppStatusClusterTerminatingEvent(appId, serviceName, clusterId);
+
+ publishEvent(appStatusClusterTerminatingEvent);
+ } else {
+ log.warn("Terminating is not in the possible state list of [cluster] " + clusterId);
+ }
+ }
+ } finally {
+ TopologyManager.releaseReadLockForCluster(serviceName, clusterId);
+
+ }
- publishEvent(appStatusClusterTerminatingEvent);
}
public static void sendClusterTerminatedEvent(String appId, String serviceName, String clusterId) {
if (log.isInfoEnabled()) {
- log.info("Publishing Cluster in-activate event for [application]: " + appId +
+ log.info("Publishing Cluster terminated event for [application]: " + appId +
" [cluster]: " + clusterId);
}
+ try {
+ TopologyManager.acquireReadLockForCluster(serviceName, clusterId);
+ Service service = TopologyManager.getTopology().getService(serviceName);
+ if (service != null) {
+ Cluster cluster = service.getCluster(clusterId);
+ if (cluster.isStateTransitionValid(ClusterStatus.Terminated)) {
+ AppStatusClusterTerminatedEvent appStatusClusterTerminatedEvent =
+ new AppStatusClusterTerminatedEvent(appId, serviceName, clusterId);
+
+ publishEvent(appStatusClusterTerminatedEvent);
+ } else {
+ log.warn("Terminated is not in the possible state list of [cluster] " + clusterId);
+ }
+ }
+ } finally {
+ TopologyManager.releaseReadLockForCluster(serviceName, clusterId);
- AppStatusClusterTerminatedEvent appStatusClusterTerminatedEvent =
- new AppStatusClusterTerminatedEvent(appId, serviceName, clusterId);
-
- publishEvent(appStatusClusterTerminatedEvent);
+ }
}
public static void sendGroupActivatedEvent(String appId, String groupId) {
@@ -87,9 +134,9 @@ public class StatusEventPublisher {
try {
TopologyManager.acquireReadLockForApplication(appId);
Application application = TopologyManager.getTopology().getApplication(appId);
- if(application != null) {
+ if (application != null) {
Group group = application.getGroupRecursively(groupId);
- if(group.getStatus().getNextStates().contains(GroupStatus.Active)) {
+ if (group.isStateTransitionValid(GroupStatus.Active)) {
AppStatusGroupActivatedEvent groupActivatedEvent =
new AppStatusGroupActivatedEvent(appId, groupId);
@@ -101,8 +148,6 @@ public class StatusEventPublisher {
} finally {
TopologyManager.releaseReadLockForApplication(appId);
}
-
-
}
public static void sendGroupInActivateEvent(String appId, String groupId) {
@@ -114,10 +159,10 @@ public class StatusEventPublisher {
try {
TopologyManager.acquireReadLockForApplication(appId);
Application application = TopologyManager.getTopology().getApplication(appId);
- if(application != null) {
+ if (application != null) {
Group group = application.getGroupRecursively(groupId);
- if(group.getStatus().getNextStates().contains(GroupStatus.Inactive)) {
- AppStatusGroupInactivateEvent appStatusGroupInactivateEvent= new
+ if (group.isStateTransitionValid(GroupStatus.Inactive)) {
+ AppStatusGroupInactivateEvent appStatusGroupInactivateEvent = new
AppStatusGroupInactivateEvent(appId, groupId);
publishEvent(appStatusGroupInactivateEvent);
@@ -128,8 +173,6 @@ public class StatusEventPublisher {
} finally {
TopologyManager.releaseReadLockForApplication(appId);
}
-
-
}
public static void sendGroupTerminatingEvent(String appId, String groupId) {
@@ -141,9 +184,9 @@ public class StatusEventPublisher {
try {
TopologyManager.acquireReadLockForApplication(appId);
Application application = TopologyManager.getTopology().getApplication(appId);
- if(application != null) {
+ if (application != null) {
Group group = application.getGroupRecursively(groupId);
- if(group.getStatus().getNextStates().contains(GroupStatus.Terminating)) {
+ if (group.isStateTransitionValid(GroupStatus.Terminating)) {
AppStatusGroupTerminatingEvent groupInTerminatingEvent =
new AppStatusGroupTerminatingEvent(appId, groupId);
publishEvent(groupInTerminatingEvent);
@@ -166,9 +209,9 @@ public class StatusEventPublisher {
try {
TopologyManager.acquireReadLockForApplication(appId);
Application application = TopologyManager.getTopology().getApplication(appId);
- if(application != null) {
+ if (application != null) {
Group group = application.getGroupRecursively(groupId);
- if(group.getStatus().getNextStates().contains(GroupStatus.Terminated)) {
+ if (group.isStateTransitionValid(GroupStatus.Terminated)) {
AppStatusGroupTerminatedEvent groupInTerminatedEvent =
new AppStatusGroupTerminatedEvent(appId, groupId);
publishEvent(groupInTerminatedEvent);
@@ -189,40 +232,87 @@ public class StatusEventPublisher {
log.info("Publishing Application activated event for [application]: " + appId);
}
- AppStatusApplicationActivatedEvent applicationActivatedEvent = new AppStatusApplicationActivatedEvent(appId);
+ try {
+ TopologyManager.acquireReadLockForApplication(appId);
+ Application application = TopologyManager.getTopology().getApplication(appId);
+ if (application != null) {
+ if (application.isStateTransitionValid(ApplicationStatus.Active)) {
+ AppStatusApplicationActivatedEvent applicationActivatedEvent =
+ new AppStatusApplicationActivatedEvent(appId);
- publishEvent(applicationActivatedEvent);
+ publishEvent(applicationActivatedEvent);
+ } else {
+ log.warn("Active is not in the possible state list of [application] " + appId);
+ }
+ }
+ } finally {
+ TopologyManager.releaseReadLockForApplication(appId);
+ }
}
- public static void sendApplicationInactivatedEvent(String appId){
+ public static void sendApplicationInactivatedEvent(String appId) {
if (log.isInfoEnabled()) {
- log.info("Publishing Application Inactivated event for [application]: " + appId);
+ log.info("Publishing Application In-activated event for [application]: " + appId);
}
- AppStatusApplicationInactivatedEvent applicationInActivatedEvent = new AppStatusApplicationInactivatedEvent(appId);
-
- publishEvent(applicationInActivatedEvent);
+ try {
+ TopologyManager.acquireReadLockForApplication(appId);
+ Application application = TopologyManager.getTopology().getApplication(appId);
+ if (application != null) {
+ if (application.isStateTransitionValid(ApplicationStatus.Inactive)) {
+ AppStatusApplicationInactivatedEvent applicationInActivatedEvent =
+ new AppStatusApplicationInactivatedEvent(appId);
+ publishEvent(applicationInActivatedEvent);
+ } else {
+ log.warn("Inactive is not in the possible state list of [application] " + appId);
+ }
+ }
+ } finally {
+ TopologyManager.releaseReadLockForApplication(appId);
+ }
}
- public static void sendApplicationTerminatingEvent (String appId) {
+ public static void sendApplicationTerminatingEvent(String appId) {
if (log.isInfoEnabled()) {
log.info("Publishing Application terminated event for [application]: " + appId);
}
- AppStatusApplicationTerminatingEvent applicationTerminatingEvent = new AppStatusApplicationTerminatingEvent(appId);
-
- publishEvent(applicationTerminatingEvent);
+ try {
+ TopologyManager.acquireReadLockForApplication(appId);
+ Application application = TopologyManager.getTopology().getApplication(appId);
+ if (application != null) {
+ if (application.isStateTransitionValid(ApplicationStatus.Terminating)) {
+ AppStatusApplicationTerminatingEvent applicationTerminatingEvent =
+ new AppStatusApplicationTerminatingEvent(appId);
+ publishEvent(applicationTerminatingEvent);
+ } else {
+ log.warn("Terminating is not in the possible state list of [application] " + appId);
+ }
+ }
+ } finally {
+ TopologyManager.releaseReadLockForApplication(appId);
+ }
}
- public static void sendApplicationTerminatedEvent (String appId, Set<ClusterDataHolder> clusterData) {
+ public static void sendApplicationTerminatedEvent(String appId, Set<ClusterDataHolder> clusterData) {
if (log.isInfoEnabled()) {
log.info("Publishing Application terminated event for [application]: " + appId);
}
-
- AppStatusApplicationTerminatedEvent applicationTerminatedEvent =
- new AppStatusApplicationTerminatedEvent(appId, clusterData);
-
- publishEvent(applicationTerminatedEvent);
+ try {
+ TopologyManager.acquireReadLockForApplication(appId);
+ Application application = TopologyManager.getTopology().getApplication(appId);
+ if (application != null) {
+ if (application.isStateTransitionValid(ApplicationStatus.Terminated)) {
+ AppStatusApplicationTerminatedEvent applicationTerminatedEvent =
+ new AppStatusApplicationTerminatedEvent(appId, clusterData);
+ publishEvent(applicationTerminatedEvent);
+ } else {
+ log.warn("Terminated is not in the possible state list of [application] " + appId);
+ }
+ }
+ } finally {
+ TopologyManager.releaseReadLockForApplication(appId);
+ }
}
public static void publishEvent(Event event) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/2ae7e2b9/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 e5bbd55..99aa69c 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
@@ -39,10 +39,6 @@ import org.apache.stratos.autoscaler.status.checker.StatusChecker;
import org.apache.stratos.messaging.domain.topology.*;
import org.apache.stratos.messaging.event.Event;
import org.apache.stratos.messaging.event.topology.*;
-import org.apache.stratos.messaging.event.topology.ApplicationActivatedEvent;
-import org.apache.stratos.messaging.event.topology.ApplicationCreatedEvent;
-import org.apache.stratos.messaging.event.topology.ClusterActivatedEvent;
-import org.apache.stratos.messaging.event.topology.GroupActivatedEvent;
import org.apache.stratos.messaging.listener.topology.*;
import org.apache.stratos.messaging.message.receiver.topology.TopologyEventReceiver;
import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
@@ -237,7 +233,9 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
(AbstractClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterId);
//changing the status in the monitor, will notify its parent monitor
- clusterMonitor.setStatus(ClusterStatus.Terminated);
+ if (clusterMonitor != null) {
+ clusterMonitor.setStatus(ClusterStatus.Terminated);
+ }
//starting the status checker to decide on the status of it's parent
//StatusChecker.getInstance().onClusterStatusChange(clusterId, appId);
@@ -258,7 +256,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
GroupMonitor monitor = (GroupMonitor) appMonitor.findGroupMonitorWithId(groupId);
//changing the status in the monitor, will notify its parent monitor
- if(monitor != null) {
+ if (monitor != null) {
monitor.setStatus(GroupStatus.Active);
}
@@ -279,7 +277,9 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
GroupMonitor monitor = (GroupMonitor) appMonitor.findGroupMonitorWithId(groupId);
//changing the status in the monitor, will notify its parent monitor
- monitor.setStatus(GroupStatus.Inactive);
+ if (monitor != null) {
+ monitor.setStatus(GroupStatus.Inactive);
+ }
}
});
@@ -298,7 +298,9 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
GroupMonitor monitor = (GroupMonitor) appMonitor.findGroupMonitorWithId(groupId);
//changing the status in the monitor, will notify its parent monitor
- monitor.setStatus(GroupStatus.Terminating);
+ if (monitor != null) {
+ monitor.setStatus(GroupStatus.Terminating);
+ }
}
});
@@ -317,7 +319,9 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
GroupMonitor monitor = (GroupMonitor) appMonitor.findGroupMonitorWithId(groupId);
//changing the status in the monitor, will notify its parent monitor
- monitor.setStatus(GroupStatus.Terminated);
+ if (monitor != null) {
+ monitor.setStatus(GroupStatus.Terminated);
+ }
}
});
http://git-wip-us.apache.org/repos/asf/stratos/blob/2ae7e2b9/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
index 588d2c4..0a9d628 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
@@ -228,17 +228,19 @@ abstract public class AbstractClusterMonitor extends Monitor implements Runnable
public void setStatus(ClusterStatus status) {
log.info(String.format("[Monitor] %s is notifying the parent" +
"on its state change from %s to %s", clusterId, this.status, status));
- this.status = status;
- /**
- * notifying the parent monitor about the state change
- * If the cluster in_active and if it is a in_dependent cluster,
- * then won't send the notification to parent.
- */
- if(status == ClusterStatus.Inactive && !this.hasDependent) {
- log.info("[Cluster] " + clusterId + "is not notifying the parent, " +
- "since it is identified as the independent unit");
- } else {
- MonitorStatusEventBuilder.handleClusterStatusEvent(this.parent, this.status, this.clusterId);
+ if(this.status != status) {
+ this.status = status;
+ /**
+ * notifying the parent monitor about the state change
+ * If the cluster in_active and if it is a in_dependent cluster,
+ * then won't send the notification to parent.
+ */
+ if (status == ClusterStatus.Inactive && !this.hasDependent) {
+ log.info("[Cluster] " + clusterId + "is not notifying the parent, " +
+ "since it is identified as the independent unit");
+ } else {
+ MonitorStatusEventBuilder.handleClusterStatusEvent(this.parent, this.status, this.clusterId);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/2ae7e2b9/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
index 66044ef..966c8b2 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/application/ApplicationMonitor.java
@@ -142,7 +142,9 @@ public class ApplicationMonitor extends ParentComponentMonitor {
public void setStatus(ApplicationStatus status) {
log.info(String.format("[ApplicationMonitor] %s " +
"state changes from %s to %s", id, this.status, status));
- this.status = status;
+ if(this.status != status) {
+ this.status = status;
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/stratos/blob/2ae7e2b9/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
index dff0bba..ab3ef16 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
@@ -140,13 +140,16 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler
public void setStatus(GroupStatus status) {
log.info(String.format("[Monitor] %s is notifying the parent" +
"on its state change from %s to %s", id, this.status, status));
- this.status = status;
- //notifying the parent
- if (status == GroupStatus.Inactive && !this.hasDependent) {
- log.info("[Group] " + this.id + "is not notifying the parent, " +
- "since it is identified as the independent unit");
- } else {
- MonitorStatusEventBuilder.handleGroupStatusEvent(this.parent, this.status, this.id);
+ if(this.status != status) {
+ this.status = status;
+ //notifying the parent
+ if (status == GroupStatus.Inactive && !this.hasDependent) {
+ log.info("[Group] " + this.id + "is not notifying the parent, " +
+ "since it is identified as the independent unit");
+ } else {
+ MonitorStatusEventBuilder.handleGroupStatusEvent(this.parent, this.status, this.id);
+ }
}
+
}
}