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/26 17:25:29 UTC
[1/2] git commit: initial app unsubscription changes
Repository: stratos
Updated Branches:
refs/heads/4.0.0-grouping 6f7baa85e -> 4f59f4b8b
initial app unsubscription changes
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/4f59f4b8
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/4f59f4b8
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/4f59f4b8
Branch: refs/heads/4.0.0-grouping
Commit: 4f59f4b8bdbb4d9aeab043ea6544f9654ab2c634
Parents: 87d77a2
Author: Isuru Haththotuwa <is...@apache.org>
Authored: Sun Oct 26 21:47:35 2014 +0530
Committer: Isuru Haththotuwa <is...@apache.org>
Committed: Sun Oct 26 21:54:59 2014 +0530
----------------------------------------------------------------------
.../grouping/topic/StatusEventPublisher.java | 23 ++-
.../AutoscalerTopologyEventReceiver.java | 141 ++++++++-----------
.../stratos/autoscaler/monitor/Monitor.java | 7 +-
.../monitor/ParentComponentMonitor.java | 20 +--
.../monitor/application/ApplicationMonitor.java | 40 +++---
.../status/checker/StatusChecker.java | 13 +-
.../ApplicationStatusTopicReceiver.java | 4 +-
.../impl/CloudControllerServiceImpl.java | 4 +-
.../controller/topology/TopologyBuilder.java | 129 ++++++++---------
.../topology/TopologyEventPublisher.java | 20 +++
.../topology/ApplicationTerminatedEvent.java | 12 +-
.../topology/ApplicationTerminatingEvent.java | 12 +-
...StatusClusterTerminatedMessageProcessor.java | 2 +-
.../ApplicationTerminatingMessageProcessor.java | 10 +-
.../topology/ClusterTerminatedProcessor.java | 16 +--
.../topology/ClusterTerminatingProcessor.java | 16 +--
.../topology/GroupTerminatedProcessor.java | 4 +-
17 files changed, 243 insertions(+), 230 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/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 0800b14..c0c64ac 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
@@ -10,6 +10,7 @@ import org.apache.stratos.messaging.event.application.status.*;
import org.apache.stratos.messaging.event.application.status.ApplicationActivatedEvent;
import org.apache.stratos.messaging.event.application.status.ApplicationInactivatedEvent;
import org.apache.stratos.messaging.event.application.status.ApplicationTerminatedEvent;
+import org.apache.stratos.messaging.event.application.status.ApplicationTerminatingEvent;
import org.apache.stratos.messaging.event.application.status.ClusterActivatedEvent;
import org.apache.stratos.messaging.event.application.status.ClusterInActivateEvent;
import org.apache.stratos.messaging.event.application.status.ClusterMaintenanceModeEvent;
@@ -72,9 +73,10 @@ public class StatusEventPublisher {
" [cluster]: " + clusterId);
}
//TODO
- /*ClusterActivatedEvent clusterActivatedEvent = new ClusterActivatedEvent(appId, serviceName, clusterId);
+ AppStatusClusterTerminatingEvent appStatusClusterTerminatingEvent =
+ new AppStatusClusterTerminatingEvent(appId, serviceName, clusterId);
- publishEvent(clusterActivatedEvent);*/
+ publishEvent(appStatusClusterTerminatingEvent);
}
public static void sendClusterTerminatedEvent(String appId, String serviceName, String clusterId) {
@@ -83,10 +85,11 @@ public class StatusEventPublisher {
log.info("Publishing Cluster in-activate event for [application]: " + appId +
" [cluster]: " + clusterId);
}
- //TODO
- /* Cluster clusterActivatedEvent = new ClusterActivatedEvent(appId, serviceName, clusterId);
- publishEvent(clusterActivatedEvent);*/
+ AppStatusClusterTerminatedEvent appStatusClusterTerminatedEvent =
+ new AppStatusClusterTerminatedEvent(appId, serviceName, clusterId);
+
+ publishEvent(appStatusClusterTerminatedEvent);
}
public static void sendGroupActivatedEvent(String appId, String groupId) {
@@ -156,6 +159,16 @@ public class StatusEventPublisher {
publishEvent(applicationInActivatedEvent);
}
+ public static void sendApplicationTerminatingEvent (String appId) {
+ if (log.isInfoEnabled()) {
+ log.info("Publishing Application terminated event for [application]: " + appId);
+ }
+
+ ApplicationTerminatingEvent applicationTerminatingEvent = new ApplicationTerminatingEvent(appId);
+
+ publishEvent(applicationTerminatingEvent);
+ }
+
public static void sendApplicationTerminatedEvent (String appId, Set<ClusterDataHolder> clusterData) {
if (log.isInfoEnabled()) {
log.info("Publishing Application terminated event for [application]: " + appId);
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/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 2f7cca4..654d5b2 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
@@ -41,7 +41,6 @@ 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.ClusterInActivateEvent;
import org.apache.stratos.messaging.event.topology.GroupActivatedEvent;
import org.apache.stratos.messaging.listener.topology.*;
import org.apache.stratos.messaging.message.receiver.topology.TopologyEventReceiver;
@@ -204,9 +203,9 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
log.info("[ClusterInActivateEvent] Received: " + event.getClass());
- ClusterTerminatedEvent clusterInactivateEvent = (ClusterTerminatedEvent) event;
- String appId = clusterInactivateEvent.getAppId();
- String clusterId = clusterInactivateEvent.getClusterId();
+ ClusterTerminatingEvent clusterTerminatingEvent = (ClusterTerminatingEvent) event;
+ String appId = clusterTerminatingEvent.getAppId();
+ String clusterId = clusterTerminatingEvent.getClusterId();
AbstractClusterMonitor clusterMonitor =
(AbstractClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterId);
@@ -224,9 +223,9 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
log.info("[ClusterInActivateEvent] Received: " + event.getClass());
- ClusterTerminatedEvent clusterInactivateEvent = (ClusterTerminatedEvent) event;
- String appId = clusterInactivateEvent.getAppId();
- String clusterId = clusterInactivateEvent.getClusterId();
+ ClusterTerminatedEvent clusterTerminatedEvent = (ClusterTerminatedEvent) event;
+ String appId = clusterTerminatedEvent.getAppId();
+ String clusterId = clusterTerminatedEvent.getClusterId();
AbstractClusterMonitor clusterMonitor =
(AbstractClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterId);
@@ -328,78 +327,17 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
}
});
-// topologyEventReceiver.addEventListener(new ApplicationUndeployedEventListener() {
-// @Override
-// protected void onEvent(Event event) {
-//
-// log.info("[ApplicationUndeployedEvent] Received: " + event.getClass());
-//
-// ApplicationUndeployedEvent applicationUndeployedEvent = (ApplicationUndeployedEvent) event;
-//
-// // acquire reead locks for application and relevant clusters
-// TopologyManager.acquireReadLockForApplication(applicationUndeployedEvent.getApplicationId());
-// Set<ClusterDataHolder> clusterDataHolders = applicationUndeployedEvent.getClusterData();
-// if (clusterDataHolders != null) {
-// for (ClusterDataHolder clusterData : clusterDataHolders) {
-// TopologyManager.acquireReadLockForCluster(clusterData.getServiceType(),
-// clusterData.getClusterId());
-// }
-// }
-//
-// try {
-// ApplicationMonitor appMonitor = AutoscalerContext.getInstance().
-// getAppMonitor(applicationUndeployedEvent.getApplicationId());
-//
-// if (appMonitor != null) {
-// // update the status as Terminating
-// appMonitor.setStatus(ApplicationStatus.Terminating);
-//
-// List<String> clusters = appMonitor.
-// findClustersOfApplication(applicationUndeployedEvent.getApplicationId());
-//
-// for (String clusterId : clusters) {
-// //stopping the cluster monitor and remove it from the AS
-// ClusterMonitor clusterMonitor =
-// ((ClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterId));
-// if (clusterMonitor != null) {
-// clusterMonitor.setDestroyed(true);
-// clusterMonitor.terminateAllMembers();
-// clusterMonitor.setStatus(ClusterStatus.Terminating);
-// } else {
-// log.warn("No Cluster Monitor found for cluster id " + clusterId);
-// }
-// }
-//
-// } else {
-// log.warn("Application Monitor cannot be found for the undeployed [application] "
-// + applicationUndeployedEvent.getApplicationId());
-// }
-//
-// } finally {
-// if (clusterDataHolders != null) {
-// for (ClusterDataHolder clusterData : clusterDataHolders) {
-// TopologyManager.releaseReadLockForCluster(clusterData.getServiceType(),
-// clusterData.getClusterId());
-// }
-// }
-// TopologyManager.
-// releaseReadLockForApplication(applicationUndeployedEvent.getApplicationId());
-// }
-// }
-// });
-
-
- topologyEventReceiver.addEventListener(new ApplicationTerminatingEventListener() {
+ topologyEventReceiver.addEventListener(new ApplicationUndeployedEventListener() {
@Override
protected void onEvent(Event event) {
- log.info("[ApplicationTerminatingEvent] Received: " + event.getClass());
+ log.info("[ApplicationUndeployedEvent] Received: " + event.getClass());
- ApplicationTerminatingEvent appTerminatingEvent = (ApplicationTerminatingEvent) event;
+ ApplicationUndeployedEvent applicationUndeployedEvent = (ApplicationUndeployedEvent) event;
// acquire reead locks for application and relevant clusters
- TopologyManager.acquireReadLockForApplication(appTerminatingEvent.getAppId());
- Set<ClusterDataHolder> clusterDataHolders = appTerminatingEvent.getClusterData();
+ TopologyManager.acquireReadLockForApplication(applicationUndeployedEvent.getApplicationId());
+ Set<ClusterDataHolder> clusterDataHolders = applicationUndeployedEvent.getClusterData();
if (clusterDataHolders != null) {
for (ClusterDataHolder clusterData : clusterDataHolders) {
TopologyManager.acquireReadLockForCluster(clusterData.getServiceType(),
@@ -409,31 +347,31 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
try {
ApplicationMonitor appMonitor = AutoscalerContext.getInstance().
- getAppMonitor(appTerminatingEvent.getAppId());
+ getAppMonitor(applicationUndeployedEvent.getApplicationId());
if (appMonitor != null) {
// update the status as Terminating
appMonitor.setStatus(ApplicationStatus.Terminating);
- List<String> clusters = appMonitor.
- findClustersOfApplication(appTerminatingEvent.getAppId());
+// List<String> clusters = appMonitor.
+// findClustersOfApplication(applicationUndeployedEvent.getApplicationId());
- for (String clusterId : clusters) {
+ for (ClusterDataHolder clusterData : clusterDataHolders) {
//stopping the cluster monitor and remove it from the AS
ClusterMonitor clusterMonitor =
- ((ClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterId));
+ ((ClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterData.getClusterId()));
if (clusterMonitor != null) {
clusterMonitor.setDestroyed(true);
clusterMonitor.terminateAllMembers();
clusterMonitor.setStatus(ClusterStatus.Terminating);
} else {
- log.warn("No Cluster Monitor found for cluster id " + clusterId);
+ log.warn("No Cluster Monitor found for cluster id " + clusterData.getClusterId());
}
}
} else {
log.warn("Application Monitor cannot be found for the undeployed [application] "
- + appTerminatingEvent.getAppId());
+ + applicationUndeployedEvent.getApplicationId());
}
} finally {
@@ -444,6 +382,38 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
}
}
TopologyManager.
+ releaseReadLockForApplication(applicationUndeployedEvent.getApplicationId());
+ }
+ }
+ });
+
+
+ topologyEventReceiver.addEventListener(new ApplicationTerminatingEventListener() {
+ @Override
+ protected void onEvent(Event event) {
+
+ log.info("[ApplicationTerminatingEvent] Received: " + event.getClass());
+
+ ApplicationTerminatingEvent appTerminatingEvent = (ApplicationTerminatingEvent) event;
+
+ // acquire reead locks for application and relevant clusters
+ TopologyManager.acquireReadLockForApplication(appTerminatingEvent.getAppId());
+
+ try {
+ ApplicationMonitor appMonitor = AutoscalerContext.getInstance().
+ getAppMonitor(appTerminatingEvent.getAppId());
+
+ if (appMonitor != null) {
+ // update the status as Terminating
+ appMonitor.setStatus(ApplicationStatus.Terminating);
+
+ } else {
+ log.warn("Application Monitor cannot be found for the undeployed [application] "
+ + appTerminatingEvent.getAppId());
+ }
+
+ } finally {
+ TopologyManager.
releaseReadLockForApplication(appTerminatingEvent.getAppId());
}
}
@@ -472,12 +442,13 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
ApplicationMonitor monitor = AutoscalerContext.getInstance().
getAppMonitor(applicationRemovedEvent.getApplicationId());
if (monitor != null) {
- List<String> clusters = monitor.
- findClustersOfApplication(applicationRemovedEvent.getApplicationId());
- for (String clusterId : clusters) {
+ //List<String> clusters = monitor.
+ // findClustersOfApplication(applicationRemovedEvent.getApplicationId());
+ for (ClusterDataHolder clusterData : clusterDataHolders) {
//stopping the cluster monitor and remove it from the AS
- ((ClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterId)).setDestroyed(true);
- AutoscalerContext.getInstance().removeMonitor(clusterId);
+ ((ClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterData.getClusterId())).
+ setDestroyed(true);
+ AutoscalerContext.getInstance().removeMonitor(clusterData.getClusterId());
}
//removing the application monitor
AutoscalerContext.getInstance().
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
index 1ac0893..7199ee8 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
@@ -73,7 +73,7 @@ public abstract class Monitor implements EventHandler {
this.appId = parent.getAppId();
}
- public boolean hasMonitors() {
+ public boolean hasActiveMonitors() {
boolean hasMonitor = false;
if(this.aliasToActiveMonitorsMap != null ) {
hasMonitor = true;
@@ -81,6 +81,11 @@ public abstract class Monitor implements EventHandler {
return hasMonitor;
}
+ public boolean hasMonitors () {
+
+ return this.aliasToActiveMonitorsMap != null || this.aliasToInActiveMonitorsMap != null;
+ }
+
public boolean isHasDependent() {
return hasDependent;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
index 26eff1d..4eb4bcb 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/ParentComponentMonitor.java
@@ -20,7 +20,6 @@ package org.apache.stratos.autoscaler.monitor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.AutoscalerContext;
import org.apache.stratos.autoscaler.exception.DependencyBuilderException;
import org.apache.stratos.autoscaler.exception.PartitionValidationException;
import org.apache.stratos.autoscaler.exception.PolicyValidationException;
@@ -96,16 +95,19 @@ public abstract class ParentComponentMonitor extends Monitor {
Monitor monitor = this.aliasToInActiveMonitorsMap.get(idOfEvent);
if (monitor != null) {
- for (Monitor monitor1 : monitor.getAliasToActiveMonitorsMap().values()) {
- if (monitor.hasMonitors()) {
- StatusEventPublisher.sendGroupTerminatingEvent(this.appId, monitor1.getId());
- } else {
- StatusEventPublisher.sendClusterTerminatingEvent(this.appId,
- ((AbstractClusterMonitor) monitor1).getServiceId(), monitor.getId());
+ // check if aliasToActiveMonitors are null (in case of a Cluster Monitor)
+ if (monitor.getAliasToActiveMonitorsMap() != null) {
+ for (Monitor monitor1 : monitor.getAliasToActiveMonitorsMap().values()) {
+ if (monitor.hasActiveMonitors()) {
+ StatusEventPublisher.sendGroupTerminatingEvent(this.appId, monitor1.getId());
+ } else {
+ StatusEventPublisher.sendClusterTerminatingEvent(this.appId,
+ ((AbstractClusterMonitor) monitor1).getServiceId(), monitor.getId());
+ }
}
}
} else {
- log.warn("Active Monitor not found for the id " + idOfEvent);
+ log.warn("Inactive Monitor not found for the id " + idOfEvent);
}
}
@@ -123,7 +125,7 @@ public abstract class ParentComponentMonitor extends Monitor {
monitor = this.aliasToActiveMonitorsMap.
get(terminationContext.getId());
//start to kill it
- if (monitor.hasMonitors()) {
+ if (monitor.hasActiveMonitors()) {
//it is a group
StatusEventPublisher.sendGroupTerminatingEvent(this.appId, terminationContext.getId());
} else {
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/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 deb0950..45530c5 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
@@ -61,26 +61,26 @@ public class ApplicationMonitor extends ParentComponentMonitor {
* @param appId the application which contains the clusters
* @return all the clusters of the application
*/
- public List<String> findClustersOfApplication(String appId) {
- List<String> clusters = new ArrayList<String>();
- Set<ClusterDataHolder> clusterData;
-
- TopologyManager.acquireReadLockForApplication(appId);
- try {
- clusterData = TopologyManager.getTopology().getApplication(appId).getClusterDataRecursively();
-
- } finally {
- TopologyManager.releaseReadLockForApplication(appId);
- }
-
- if (clusterData != null) {
- for (ClusterDataHolder clusterDataHolder : clusterData) {
- clusters.add(clusterDataHolder.getClusterId());
- }
- }
-
- return clusters;
- }
+// public List<String> findClustersOfApplication(String appId) {
+// List<String> clusters = new ArrayList<String>();
+// Set<ClusterDataHolder> clusterData;
+//
+// TopologyManager.acquireReadLockForApplication(appId);
+// try {
+// clusterData = TopologyManager.getTopology().getApplication(appId).getClusterDataRecursively();
+//
+// } finally {
+// TopologyManager.releaseReadLockForApplication(appId);
+// }
+//
+// if (clusterData != null) {
+// for (ClusterDataHolder clusterDataHolder : clusterData) {
+// clusters.add(clusterDataHolder.getClusterId());
+// }
+// }
+//
+// return clusters;
+// }
/**
* Find the cluster monitor by traversing recursively in the hierarchical monitors.
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/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 7aef08e..7019d0b 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
@@ -82,6 +82,9 @@ public class StatusChecker {
//TODO
StatusEventPublisher.sendClusterCreatedEvent(monitor.getAppId(), monitor.getServiceId(),
monitor.getClusterId());
+ } else {
+ StatusEventPublisher.sendClusterTerminatedEvent(monitor.getAppId(), monitor.getServiceId(),
+ monitor.getClusterId());
}
// TODO if cluster was in terminating, then send terminated event.
}
@@ -264,9 +267,9 @@ public class StatusChecker {
clusterData.isEmpty() && groupStatus == GroupStatus.Inactive ||
groupStatus == GroupStatus.Inactive && clusterStatus == ClusterStatus.Inactive) {
//send the in activation event
- if (parent instanceof Application) {
- //send application activated event
- log.info("sending app in-active : " + appId);
+ if (parent instanceof Application) {
+ //send application activated event
+ log.info("sending app in-active : " + appId);
StatusEventPublisher.sendApplicationInactivatedEvent(appId);
} else if (parent instanceof Group) {
//send activation to the parent
@@ -294,12 +297,12 @@ public class StatusChecker {
if (parent instanceof Application) {
//send application activated event
log.info("sending app terminating: " + appId);
- StatusEventPublisher.sendApplicationTerminatedEvent(appId, parent.getClusterDataRecursively());
+ StatusEventPublisher.sendApplicationTerminatingEvent(appId);
//StatusEventPublisher.sendApp(appId);
} else if (parent instanceof Group) {
//send activation to the parent
log.info("sending group terminating : " + parent.getUniqueIdentifier());
- StatusEventPublisher.sendGroupTerminatedEvent(appId, parent.getUniqueIdentifier());
+ StatusEventPublisher.sendGroupTerminatingEvent(appId, parent.getUniqueIdentifier());
}
} else {
log.warn("Clusters/groups not found in this [component] " + appId);
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/status/receiver/ApplicationStatusTopicReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/status/receiver/ApplicationStatusTopicReceiver.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/status/receiver/ApplicationStatusTopicReceiver.java
index 5aa4467..1a62fef 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/status/receiver/ApplicationStatusTopicReceiver.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/application/status/receiver/ApplicationStatusTopicReceiver.java
@@ -74,14 +74,14 @@ public class ApplicationStatusTopicReceiver implements Runnable {
statusEventReceiver.addEventListener(new AppStatusClusterTerminatedEventListener() {
@Override
protected void onEvent(Event event) {
- TopologyBuilder.handleClusterTerminatedEvent((ClusterActivatedEvent) event);
+ TopologyBuilder.handleClusterTerminatedEvent((AppStatusClusterTerminatedEvent) event);
}
});
statusEventReceiver.addEventListener(new AppStatusClusterTerminatingEventListener(){
@Override
protected void onEvent(Event event) {
- TopologyBuilder.handleClusterTerminatingEvent((ClusterActivatedEvent) event);
+ TopologyBuilder.handleClusterTerminatingEvent((AppStatusClusterTerminatingEvent) event);
}
});
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index 2fbf89a..0b322f8 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -1415,9 +1415,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
@Override
public void unDeployApplicationDefinition(String applicationId, int tenantId, String tenantDomain) throws ApplicationDefinitionException {
- TopologyBuilder.handleApplicationUndeployed(dataHolder, applicationId, tenantId, tenantDomain);
-
- //persist();
+ TopologyBuilder.handleApplicationUndeployed(applicationId);
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/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 d245a6f..4d929b1 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
@@ -678,8 +678,7 @@ public class TopologyBuilder {
}
}
- public static synchronized void handleApplicationUndeployed(FasterLookUpDataHolder dataHolder,
- String applicationId, int tenantId, String tenantDomain) {
+ public static synchronized void handleApplicationUndeployed(String applicationId) {
Set<ClusterDataHolder> clusterData;
@@ -702,7 +701,6 @@ public class TopologyBuilder {
}
// for now anyway update the status forcefully
application.setStatus(ApplicationStatus.Terminating);
- log.info("Application " + applicationId + "'s status updated to " + ApplicationStatus.Terminating);
// update all the Clusters' statuses to 'Terminating'
clusterData = application.getClusterDataRecursively();
@@ -730,6 +728,13 @@ public class TopologyBuilder {
}
}
+ // update all Group's statuses to 'Terminating'
+ if (application.getGroups() != null) {
+ updateGroupStatusesRecursively(GroupStatus.Terminating, application.getGroups());
+ }
+
+ TopologyManager.updateTopology(topology);
+
} finally {
TopologyManager.releaseWriteLock();
}
@@ -934,10 +939,9 @@ public class TopologyBuilder {
public static void handleApplicationTerminatingEvent(ApplicationTerminatingEvent event) {
- Set<ClusterDataHolder> clusterData;
String applicationId = event.getAppId();
- // update the Application and Cluster Statuses as 'Terminating'
+ // update the Application Status as 'Terminating'
TopologyManager.acquireWriteLock();
try {
@@ -958,44 +962,12 @@ public class TopologyBuilder {
application.setStatus(ApplicationStatus.Terminating);
log.info("Application " + applicationId + "'s status updated to " + ApplicationStatus.Terminating);
- // update all the Clusters' statuses to 'Terminating'
- clusterData = application.getClusterDataRecursively();
- for (ClusterDataHolder clusterDataHolder : clusterData) {
- Service service = topology.getService(clusterDataHolder.getServiceType());
- if (service != null) {
- Cluster aCluster = service.getCluster(clusterDataHolder.getClusterId());
- if (aCluster != null) {
- // validate state transition
- if (!aCluster.isStateTransitionValid(ClusterStatus.Terminating)) {
- log.error("Invalid state transfer from " + aCluster.getStatus() + " to "
- + ClusterStatus.Terminating);
- }
- // for now anyway update the status forcefully
- aCluster.setStatus(ClusterStatus.Terminating);
-
- } else {
- log.warn("Unable to find Cluster with cluster id " + clusterDataHolder.getClusterId() +
- " in Topology");
- }
-
- } else {
- log.warn("Unable to update cluster with cluster id: " + clusterDataHolder.getClusterId() + " from Topology, " +
- " associated Service [ " + clusterDataHolder.getServiceType() + " ] not found");
- }
- }
-
- // update all Group's statuses to 'Terminating'
- if (application.getGroups() != null) {
- updateGroupStatusesRecursively(GroupStatus.Terminating, application.getGroups());
- }
-
} finally {
TopologyManager.releaseWriteLock();
}
TopologyEventPublisher.sendApplicationTerminatingEvent(
- new org.apache.stratos.messaging.event.topology.ApplicationTerminatingEvent(
- applicationId, clusterData));
+ new org.apache.stratos.messaging.event.topology.ApplicationTerminatingEvent(applicationId));
}
private static void updateGroupStatusesRecursively (GroupStatus groupStatus, Collection<Group> groups) {
@@ -1015,30 +987,6 @@ public class TopologyBuilder {
}
public static void handleApplicationTerminatedEvent(ApplicationTerminatedEvent event) {
-// Topology topology = TopologyManager.getTopology();
-// Application application = topology.getApplication(event.getAppId());
-// //update the status of the Group
-// if (application == null) {
-// log.warn(String.format("Application %s does not exist",
-// event.getAppId()));
-// return;
-// }
-//
-// org.apache.stratos.messaging.event.topology.ApplicationTerminatedEvent applicationTerminatedEvent =
-// new org.apache.stratos.messaging.event.topology.ApplicationTerminatedEvent(
-// event.getAppId());
-// try {
-// TopologyManager.acquireWriteLock();
-// application.setStatus(ApplicationStatus.Terminated);
-// log.info("Application terminated adding status started for Topology");
-//
-// TopologyManager.updateTopology(topology);
-// } finally {
-// TopologyManager.releaseWriteLock();
-// }
-// //publishing data
-// TopologyEventPublisher.sendApplicationTerminatedEvent(applicationTerminatedEvent);
-
Topology topology = TopologyManager.getTopology();
@@ -1051,6 +999,13 @@ public class TopologyBuilder {
} else {
Application application = topology.getApplication(event.getAppId());
+
+ if (!application.isStateTransitionValid(ApplicationStatus.Terminated)) {
+ log.error("Invalid status change from " + application.getStatus() + " to " + ApplicationStatus.Terminated);
+ }
+ // forcefully set status for now
+ application.setStatus(ApplicationStatus.Terminated);
+
int tenantId = application.getTenantId();
String tenantDomain = application.getTenantDomain();
Set<ClusterDataHolder> clusterData = application.getClusterDataRecursively();
@@ -1201,11 +1156,57 @@ public class TopologyBuilder {
TopologyEventPublisher.sendGroupTerminatingEvent(groupTerminatingTopologyEvent);
}
- public static void handleClusterTerminatedEvent(ClusterActivatedEvent event) {
+ public static void handleClusterTerminatedEvent(AppStatusClusterTerminatedEvent event) {
+
+ TopologyManager.acquireWriteLock();
+
+ try {
+ Topology topology = TopologyManager.getTopology();
+ Cluster cluster = topology.getService(event.getServiceName()).
+ getCluster(event.getClusterId());
+
+ if (!cluster.isStateTransitionValid(ClusterStatus.Terminated)) {
+ log.error("Invalid state transfer from " + cluster.getStatus() + " to " +
+ ClusterStatus.Terminated);
+ }
+ // forcefully update status
+ cluster.setStatus(ClusterStatus.Terminated);
+
+ TopologyManager.updateTopology(topology);
+ } finally {
+ TopologyManager.releaseWriteLock();
+ }
+
+ ClusterTerminatedEvent clusterTerminatedEvent = new ClusterTerminatedEvent(event.getAppId(),
+ event.getServiceName(), event.getClusterId());
+ TopologyEventPublisher.sendClusterTerminatedEvent(clusterTerminatedEvent);
}
- public static void handleClusterTerminatingEvent(ClusterActivatedEvent event) {
+ public static void handleClusterTerminatingEvent(AppStatusClusterTerminatingEvent event) {
+
+ TopologyManager.acquireWriteLock();
+
+ try {
+ Topology topology = TopologyManager.getTopology();
+ Cluster cluster = topology.getService(event.getServiceName()).
+ getCluster(event.getClusterId());
+
+ if (!cluster.isStateTransitionValid(ClusterStatus.Terminating)) {
+ log.error("Invalid state transfer from " + cluster.getStatus() + " to " +
+ ClusterStatus.Terminating);
+ }
+ // forcefully update status
+ cluster.setStatus(ClusterStatus.Terminating);
+
+ TopologyManager.updateTopology(topology);
+ } finally {
+ TopologyManager.releaseWriteLock();
+ }
+
+ ClusterTerminatingEvent clusterTerminaingEvent = new ClusterTerminatingEvent(event.getAppId(),
+ event.getServiceName(), event.getClusterId());
+ TopologyEventPublisher.sendClusterTerminatingEvent(clusterTerminaingEvent);
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/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 3c6277d..cd13111 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
@@ -297,4 +297,24 @@ public class TopologyEventPublisher {
}
publishEvent(groupTerminatingTopologyEvent);
}
+
+ public static void sendClusterTerminatingEvent (ClusterTerminatingEvent clusterTerminatingEvent) {
+
+ if(log.isInfoEnabled()) {
+ log.info(String.format("Publishing Cluster terminating event: [appId] %s [cluster id] %s",
+ clusterTerminatingEvent.getAppId(), clusterTerminatingEvent.getClusterId()));
+ }
+
+ publishEvent(clusterTerminatingEvent);
+ }
+
+ public static void sendClusterTerminatedEvent (ClusterTerminatedEvent clusterTerminatedEvent) {
+
+ if(log.isInfoEnabled()) {
+ log.info(String.format("Publishing Cluster terminated event: [appId] %s [cluster id] %s",
+ clusterTerminatedEvent.getAppId(), clusterTerminatedEvent.getClusterId()));
+ }
+
+ publishEvent(clusterTerminatedEvent);
+ }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatedEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatedEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatedEvent.java
index 441b902..6607a02 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatedEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatedEvent.java
@@ -18,17 +18,27 @@
*/
package org.apache.stratos.messaging.event.topology;
+import org.apache.stratos.messaging.domain.topology.ClusterDataHolder;
+
+import java.util.Set;
+
/**
* This event will be sent to Topology upon termination of application
*/
public class ApplicationTerminatedEvent extends TopologyEvent {
private final String appId;
+ private final Set<ClusterDataHolder> clusterData;
- public ApplicationTerminatedEvent(String appId) {
+ public ApplicationTerminatedEvent(String appId, Set<ClusterDataHolder> clusterData) {
this.appId = appId;
+ this.clusterData = clusterData;
}
public String getAppId() {
return appId;
}
+
+ public Set<ClusterDataHolder> getClusterData() {
+ return clusterData;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatingEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatingEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatingEvent.java
index c718f08..48fde61 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatingEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatingEvent.java
@@ -18,28 +18,18 @@
*/
package org.apache.stratos.messaging.event.topology;
-import org.apache.stratos.messaging.domain.topology.ClusterDataHolder;
-
-import java.util.Set;
-
/**
* This event will be sent to Topology upon terminating of application
*/
public class ApplicationTerminatingEvent extends TopologyEvent {
private final String appId;
- private Set<ClusterDataHolder> clusterData;
- public ApplicationTerminatingEvent(String appId, Set<ClusterDataHolder> clusterData) {
+ public ApplicationTerminatingEvent(String appId) {
this.appId = appId;
- this.clusterData = clusterData;
}
public String getAppId() {
return appId;
}
-
- public Set<ClusterDataHolder> getClusterData() {
- return clusterData;
- }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/status/AppStatusClusterTerminatedMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/status/AppStatusClusterTerminatedMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/status/AppStatusClusterTerminatedMessageProcessor.java
index a5bed11..6cdde51 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/status/AppStatusClusterTerminatedMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/application/status/AppStatusClusterTerminatedMessageProcessor.java
@@ -39,7 +39,7 @@ public class AppStatusClusterTerminatedMessageProcessor extends MessageProcessor
public boolean process(String type, String message, Object object) {
if (AppStatusClusterTerminatedEvent.class.getName().equals(type)) {
// Parse complete message and build event
- ClusterTerminatedEvent event = (ClusterTerminatedEvent) Util.
+ AppStatusClusterTerminatedEvent event = (AppStatusClusterTerminatedEvent) Util.
jsonToObject(message, AppStatusClusterTerminatedEvent.class);
if(log.isDebugEnabled()) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationTerminatingMessageProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationTerminatingMessageProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationTerminatingMessageProcessor.java
index cb6e887..6ad43d8 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationTerminatingMessageProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ApplicationTerminatingMessageProcessor.java
@@ -23,7 +23,7 @@ import org.apache.commons.logging.LogFactory;
import org.apache.stratos.messaging.domain.topology.Application;
import org.apache.stratos.messaging.domain.topology.ApplicationStatus;
import org.apache.stratos.messaging.domain.topology.Topology;
-import org.apache.stratos.messaging.event.topology.ApplicationInactivatedEvent;
+import org.apache.stratos.messaging.event.topology.ApplicationTerminatingEvent;
import org.apache.stratos.messaging.message.processor.MessageProcessor;
import org.apache.stratos.messaging.message.processor.topology.updater.TopologyUpdater;
import org.apache.stratos.messaging.util.Util;
@@ -48,14 +48,14 @@ public class ApplicationTerminatingMessageProcessor extends MessageProcessor {
public boolean process(String type, String message, Object object) {
Topology topology = (Topology) object;
- if (ApplicationInactivatedEvent.class.getName().equals(type)) {
+ if (ApplicationTerminatingEvent.class.getName().equals(type)) {
// Return if topology has not been initialized
if (!topology.isInitialized())
return false;
// Parse complete message and build event
- ApplicationInactivatedEvent event = (ApplicationInactivatedEvent) Util.
- jsonToObject(message, ApplicationInactivatedEvent.class);
+ ApplicationTerminatingEvent event = (ApplicationTerminatingEvent) Util.
+ jsonToObject(message, ApplicationTerminatingEvent.class);
TopologyUpdater.acquireWriteLockForApplication(event.getAppId());
@@ -76,7 +76,7 @@ public class ApplicationTerminatingMessageProcessor extends MessageProcessor {
}
}
- private boolean doProcess (ApplicationInactivatedEvent event, Topology topology) {
+ private boolean doProcess (ApplicationTerminatingEvent event, Topology topology) {
// Validate event against the existing topology
Application application = topology.getApplication(event.getAppId());
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterTerminatedProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterTerminatedProcessor.java
index 0536011..98599d3 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterTerminatedProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterTerminatedProcessor.java
@@ -24,7 +24,7 @@ import org.apache.stratos.messaging.domain.topology.Cluster;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.domain.topology.Service;
import org.apache.stratos.messaging.domain.topology.Topology;
-import org.apache.stratos.messaging.event.topology.ClusterActivatedEvent;
+import org.apache.stratos.messaging.event.topology.ClusterTerminatedEvent;
import org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
import org.apache.stratos.messaging.message.filter.topology.TopologyServiceFilter;
import org.apache.stratos.messaging.message.processor.MessageProcessor;
@@ -48,15 +48,15 @@ public class ClusterTerminatedProcessor extends MessageProcessor {
Topology topology = (Topology) object;
- if (ClusterActivatedEvent.class.getName().equals(type)) {
+ if (ClusterTerminatedEvent.class.getName().equals(type)) {
// Return if topology has not been initialized
if (!topology.isInitialized()) {
return false;
}
// Parse complete message and build event
- ClusterActivatedEvent event = (ClusterActivatedEvent) Util.
- jsonToObject(message, ClusterActivatedEvent.class);
+ ClusterTerminatedEvent event = (ClusterTerminatedEvent) Util.
+ jsonToObject(message, ClusterTerminatedEvent.class);
TopologyUpdater.acquireWriteLockForCluster(event.getServiceName(), event.getClusterId());
try {
@@ -76,7 +76,7 @@ public class ClusterTerminatedProcessor extends MessageProcessor {
}
}
- private boolean doProcess(ClusterActivatedEvent event, Topology topology) {
+ private boolean doProcess(ClusterTerminatedEvent event, Topology topology) {
// Apply service filter
if (TopologyServiceFilter.getInstance().isActive()) {
@@ -118,10 +118,10 @@ public class ClusterTerminatedProcessor extends MessageProcessor {
}
} else {
// Apply changes to the topology
- if (!cluster.isStateTransitionValid(ClusterStatus.Active)) {
- log.error("Invalid State Transition from " + cluster.getStatus() + " to " + ClusterStatus.Active);
+ if (!cluster.isStateTransitionValid(ClusterStatus.Terminated)) {
+ log.error("Invalid State Transition from " + cluster.getStatus() + " to " + ClusterStatus.Terminated);
}
- cluster.setStatus(ClusterStatus.Active);
+ cluster.setStatus(ClusterStatus.Terminated);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterTerminatingProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterTerminatingProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterTerminatingProcessor.java
index 1ed2671..cd30618 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterTerminatingProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/ClusterTerminatingProcessor.java
@@ -24,7 +24,7 @@ import org.apache.stratos.messaging.domain.topology.Cluster;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.domain.topology.Service;
import org.apache.stratos.messaging.domain.topology.Topology;
-import org.apache.stratos.messaging.event.topology.ClusterActivatedEvent;
+import org.apache.stratos.messaging.event.topology.ClusterTerminatingEvent;
import org.apache.stratos.messaging.message.filter.topology.TopologyClusterFilter;
import org.apache.stratos.messaging.message.filter.topology.TopologyServiceFilter;
import org.apache.stratos.messaging.message.processor.MessageProcessor;
@@ -48,15 +48,15 @@ public class ClusterTerminatingProcessor extends MessageProcessor {
Topology topology = (Topology) object;
- if (ClusterActivatedEvent.class.getName().equals(type)) {
+ if (ClusterTerminatingEvent.class.getName().equals(type)) {
// Return if topology has not been initialized
if (!topology.isInitialized()) {
return false;
}
// Parse complete message and build event
- ClusterActivatedEvent event = (ClusterActivatedEvent) Util.
- jsonToObject(message, ClusterActivatedEvent.class);
+ ClusterTerminatingEvent event = (ClusterTerminatingEvent) Util.
+ jsonToObject(message, ClusterTerminatingEvent.class);
TopologyUpdater.acquireWriteLockForCluster(event.getServiceName(), event.getClusterId());
try {
@@ -76,7 +76,7 @@ public class ClusterTerminatingProcessor extends MessageProcessor {
}
}
- private boolean doProcess(ClusterActivatedEvent event, Topology topology) {
+ private boolean doProcess(ClusterTerminatingEvent event, Topology topology) {
// Apply service filter
if (TopologyServiceFilter.getInstance().isActive()) {
@@ -118,10 +118,10 @@ public class ClusterTerminatingProcessor extends MessageProcessor {
}
} else {
// Apply changes to the topology
- if (!cluster.isStateTransitionValid(ClusterStatus.Active)) {
- log.error("Invalid State Transition from " + cluster.getStatus() + " to " + ClusterStatus.Active);
+ if (!cluster.isStateTransitionValid(ClusterStatus.Terminating)) {
+ log.error("Invalid State Transition from " + cluster.getStatus() + " to " + ClusterStatus.Terminating);
}
- cluster.setStatus(ClusterStatus.Active);
+ cluster.setStatus(ClusterStatus.Terminating);
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/4f59f4b8/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupTerminatedProcessor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupTerminatedProcessor.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupTerminatedProcessor.java
index 5e96709..5a308ba 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupTerminatedProcessor.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/message/processor/topology/GroupTerminatedProcessor.java
@@ -93,8 +93,8 @@ public class GroupTerminatedProcessor extends MessageProcessor {
}
} else {
// Apply changes to the topology
- if (!group.isStateTransitionValid(GroupStatus.Terminating)) {
- log.error("Invalid State Transition from " + group.getStatus() + " to " + GroupStatus.Active);
+ if (!group.isStateTransitionValid(GroupStatus.Terminated)) {
+ log.error("Invalid State Transition from " + group.getStatus() + " to " + GroupStatus.Terminated);
}
group.setStatus(GroupStatus.Terminated);
[2/2] git commit: removing unwanted event ApplicationUndeployed from
the flow
Posted by is...@apache.org.
removing unwanted event ApplicationUndeployed from the flow
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/87d77a2d
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/87d77a2d
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/87d77a2d
Branch: refs/heads/4.0.0-grouping
Commit: 87d77a2dfa8d9ac9ca0f53f119fcabdedffb4159
Parents: 6f7baa8
Author: Isuru Haththotuwa <is...@apache.org>
Authored: Fri Oct 24 17:42:37 2014 +0530
Committer: Isuru Haththotuwa <is...@apache.org>
Committed: Sun Oct 26 21:54:59 2014 +0530
----------------------------------------------------------------------
.../AutoscalerTopologyEventReceiver.java | 85 ++++++++++++++++---
.../controller/topology/TopologyBuilder.java | 88 ++++++++++++++++----
.../topology/ApplicationTerminatingEvent.java | 13 ++-
3 files changed, 159 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/87d77a2d/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 63f9079..2f7cca4 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
@@ -38,6 +38,11 @@ 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.ClusterInActivateEvent;
+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;
@@ -323,17 +328,78 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
}
});
- topologyEventReceiver.addEventListener(new ApplicationUndeployedEventListener() {
+// topologyEventReceiver.addEventListener(new ApplicationUndeployedEventListener() {
+// @Override
+// protected void onEvent(Event event) {
+//
+// log.info("[ApplicationUndeployedEvent] Received: " + event.getClass());
+//
+// ApplicationUndeployedEvent applicationUndeployedEvent = (ApplicationUndeployedEvent) event;
+//
+// // acquire reead locks for application and relevant clusters
+// TopologyManager.acquireReadLockForApplication(applicationUndeployedEvent.getApplicationId());
+// Set<ClusterDataHolder> clusterDataHolders = applicationUndeployedEvent.getClusterData();
+// if (clusterDataHolders != null) {
+// for (ClusterDataHolder clusterData : clusterDataHolders) {
+// TopologyManager.acquireReadLockForCluster(clusterData.getServiceType(),
+// clusterData.getClusterId());
+// }
+// }
+//
+// try {
+// ApplicationMonitor appMonitor = AutoscalerContext.getInstance().
+// getAppMonitor(applicationUndeployedEvent.getApplicationId());
+//
+// if (appMonitor != null) {
+// // update the status as Terminating
+// appMonitor.setStatus(ApplicationStatus.Terminating);
+//
+// List<String> clusters = appMonitor.
+// findClustersOfApplication(applicationUndeployedEvent.getApplicationId());
+//
+// for (String clusterId : clusters) {
+// //stopping the cluster monitor and remove it from the AS
+// ClusterMonitor clusterMonitor =
+// ((ClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterId));
+// if (clusterMonitor != null) {
+// clusterMonitor.setDestroyed(true);
+// clusterMonitor.terminateAllMembers();
+// clusterMonitor.setStatus(ClusterStatus.Terminating);
+// } else {
+// log.warn("No Cluster Monitor found for cluster id " + clusterId);
+// }
+// }
+//
+// } else {
+// log.warn("Application Monitor cannot be found for the undeployed [application] "
+// + applicationUndeployedEvent.getApplicationId());
+// }
+//
+// } finally {
+// if (clusterDataHolders != null) {
+// for (ClusterDataHolder clusterData : clusterDataHolders) {
+// TopologyManager.releaseReadLockForCluster(clusterData.getServiceType(),
+// clusterData.getClusterId());
+// }
+// }
+// TopologyManager.
+// releaseReadLockForApplication(applicationUndeployedEvent.getApplicationId());
+// }
+// }
+// });
+
+
+ topologyEventReceiver.addEventListener(new ApplicationTerminatingEventListener() {
@Override
protected void onEvent(Event event) {
- log.info("[ApplicationUndeployedEvent] Received: " + event.getClass());
+ log.info("[ApplicationTerminatingEvent] Received: " + event.getClass());
- ApplicationUndeployedEvent applicationUndeployedEvent = (ApplicationUndeployedEvent) event;
+ ApplicationTerminatingEvent appTerminatingEvent = (ApplicationTerminatingEvent) event;
// acquire reead locks for application and relevant clusters
- TopologyManager.acquireReadLockForApplication(applicationUndeployedEvent.getApplicationId());
- Set<ClusterDataHolder> clusterDataHolders = applicationUndeployedEvent.getClusterData();
+ TopologyManager.acquireReadLockForApplication(appTerminatingEvent.getAppId());
+ Set<ClusterDataHolder> clusterDataHolders = appTerminatingEvent.getClusterData();
if (clusterDataHolders != null) {
for (ClusterDataHolder clusterData : clusterDataHolders) {
TopologyManager.acquireReadLockForCluster(clusterData.getServiceType(),
@@ -343,14 +409,14 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
try {
ApplicationMonitor appMonitor = AutoscalerContext.getInstance().
- getAppMonitor(applicationUndeployedEvent.getApplicationId());
+ getAppMonitor(appTerminatingEvent.getAppId());
if (appMonitor != null) {
// update the status as Terminating
appMonitor.setStatus(ApplicationStatus.Terminating);
List<String> clusters = appMonitor.
- findClustersOfApplication(applicationUndeployedEvent.getApplicationId());
+ findClustersOfApplication(appTerminatingEvent.getAppId());
for (String clusterId : clusters) {
//stopping the cluster monitor and remove it from the AS
@@ -367,7 +433,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
} else {
log.warn("Application Monitor cannot be found for the undeployed [application] "
- + applicationUndeployedEvent.getApplicationId());
+ + appTerminatingEvent.getAppId());
}
} finally {
@@ -378,12 +444,11 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
}
}
TopologyManager.
- releaseReadLockForApplication(applicationUndeployedEvent.getApplicationId());
+ releaseReadLockForApplication(appTerminatingEvent.getAppId());
}
}
});
-
topologyEventReceiver.addEventListener(new ApplicationRemovedEventListener() {
@Override
protected void onEvent(Event event) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/87d77a2d/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 80315ea..d245a6f 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
@@ -933,29 +933,85 @@ public class TopologyBuilder {
}
public static void handleApplicationTerminatingEvent(ApplicationTerminatingEvent event) {
- Topology topology = TopologyManager.getTopology();
- Application application = topology.getApplication(event.getAppId());
- //update the status of the Group
- if (application == null) {
- log.warn(String.format("Application %s does not exist",
- event.getAppId()));
- return;
- }
- org.apache.stratos.messaging.event.topology.ApplicationTerminatingEvent applicationTerminatingEvent =
- new org.apache.stratos.messaging.event.topology.ApplicationTerminatingEvent(
- event.getAppId());
+ Set<ClusterDataHolder> clusterData;
+ String applicationId = event.getAppId();
+
+ // update the Application and Cluster Statuses as 'Terminating'
+ TopologyManager.acquireWriteLock();
+
try {
- TopologyManager.acquireWriteLock();
+
+ Topology topology = TopologyManager.getTopology();
+
+ if (!topology.applicationExists(applicationId)) {
+ log.warn("Application with id [ " + applicationId + " ] doesn't exist in Topology");
+ return;
+ }
+
+ Application application = topology.getApplication(applicationId);
+ // check and update application status to 'Terminating'
+ if (!application.isStateTransitionValid(ApplicationStatus.Terminating)) {
+ log.error("Invalid state transfer from " + application.getStatus() + " to " + ApplicationStatus.Terminating);
+ }
+ // for now anyway update the status forcefully
application.setStatus(ApplicationStatus.Terminating);
- log.info("Application terminating adding status started for Topology");
+ log.info("Application " + applicationId + "'s status updated to " + ApplicationStatus.Terminating);
+
+ // update all the Clusters' statuses to 'Terminating'
+ clusterData = application.getClusterDataRecursively();
+ for (ClusterDataHolder clusterDataHolder : clusterData) {
+ Service service = topology.getService(clusterDataHolder.getServiceType());
+ if (service != null) {
+ Cluster aCluster = service.getCluster(clusterDataHolder.getClusterId());
+ if (aCluster != null) {
+ // validate state transition
+ if (!aCluster.isStateTransitionValid(ClusterStatus.Terminating)) {
+ log.error("Invalid state transfer from " + aCluster.getStatus() + " to "
+ + ClusterStatus.Terminating);
+ }
+ // for now anyway update the status forcefully
+ aCluster.setStatus(ClusterStatus.Terminating);
+
+ } else {
+ log.warn("Unable to find Cluster with cluster id " + clusterDataHolder.getClusterId() +
+ " in Topology");
+ }
+
+ } else {
+ log.warn("Unable to update cluster with cluster id: " + clusterDataHolder.getClusterId() + " from Topology, " +
+ " associated Service [ " + clusterDataHolder.getServiceType() + " ] not found");
+ }
+ }
+
+ // update all Group's statuses to 'Terminating'
+ if (application.getGroups() != null) {
+ updateGroupStatusesRecursively(GroupStatus.Terminating, application.getGroups());
+ }
- TopologyManager.updateTopology(topology);
} finally {
TopologyManager.releaseWriteLock();
}
- //publishing data
- TopologyEventPublisher.sendApplicationTerminatingEvent(applicationTerminatingEvent);
+
+ TopologyEventPublisher.sendApplicationTerminatingEvent(
+ new org.apache.stratos.messaging.event.topology.ApplicationTerminatingEvent(
+ applicationId, clusterData));
+ }
+
+ private static void updateGroupStatusesRecursively (GroupStatus groupStatus, Collection<Group> groups) {
+
+ for (Group group : groups) {
+ if (!group.isStateTransitionValid(groupStatus)) {
+ log.error("Invalid state transfer from " + group.getStatus() + " to " + groupStatus);
+ }
+ // force update for now
+ group.setStatus(groupStatus);
+
+ // go recursively and update
+ if (group.getGroups() != null) {
+ updateGroupStatusesRecursively(groupStatus, group.getGroups());
+ }
+ }
}
public static void handleApplicationTerminatedEvent(ApplicationTerminatedEvent event) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/87d77a2d/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatingEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatingEvent.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatingEvent.java
index e1fbc02..c718f08 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatingEvent.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/event/topology/ApplicationTerminatingEvent.java
@@ -18,17 +18,28 @@
*/
package org.apache.stratos.messaging.event.topology;
+import org.apache.stratos.messaging.domain.topology.ClusterDataHolder;
+
+import java.util.Set;
+
/**
* This event will be sent to Topology upon terminating of application
*/
public class ApplicationTerminatingEvent extends TopologyEvent {
+
private final String appId;
+ private Set<ClusterDataHolder> clusterData;
- public ApplicationTerminatingEvent(String appId) {
+ public ApplicationTerminatingEvent(String appId, Set<ClusterDataHolder> clusterData) {
this.appId = appId;
+ this.clusterData = clusterData;
}
public String getAppId() {
return appId;
}
+
+ public Set<ClusterDataHolder> getClusterData() {
+ return clusterData;
+ }
}
\ No newline at end of file