Repository: stratos Updated Branches: refs/heads/docker-grouping-merge a61fc9d0b -> 89fb37afb
support cluster created when auto-recovery case in the member fault Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/65d96bce Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/65d96bce Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/65d96bce Branch: refs/heads/docker-grouping-merge Commit: 65d96bce5237a4bee999fe35d21956d886dca1cc Parents: 2414bca Author: reka <[email protected]> Authored: Thu Oct 30 18:01:17 2014 +0530 Committer: reka <[email protected]> Committed: Thu Oct 30 18:01:38 2014 +0530 ---------------------------------------------------------------------- .../grouping/topic/StatusEventPublisher.java | 24 ++++++++++++++++++++ .../monitor/ParentComponentMonitor.java | 2 ++ .../status/checker/StatusChecker.java | 19 ++++++++++++++-- 3 files changed, 43 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/65d96bce/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 7bbe8ce..8058c85 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 @@ -18,6 +18,30 @@ import java.util.Set; public class StatusEventPublisher { private static final Log log = LogFactory.getLog(StatusEventPublisher.class); + public static void sendClusterCreatedEvent(String appId, String serviceName, String clusterId) { + try { + TopologyManager.acquireReadLockForCluster(serviceName, clusterId); + Service service = TopologyManager.getTopology().getService(serviceName); + if (service != null) { + Cluster cluster = service.getCluster(clusterId); + if (cluster.isStateTransitionValid(ClusterStatus.Active)) { + if (log.isInfoEnabled()) { + log.info("Publishing Cluster activated event for [application]: " + appId + + " [cluster]: " + clusterId); + } + 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 sendClusterActivatedEvent(String appId, String serviceName, String clusterId) { try { TopologyManager.acquireReadLockForCluster(serviceName, clusterId); http://git-wip-us.apache.org/repos/asf/stratos/blob/65d96bce/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 ced698c..91d5275 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 @@ -205,6 +205,8 @@ public abstract class ParentComponentMonitor extends Monitor { //Find the non existent monitor by traversing dependency tree try { this.startDependencyOnTermination(); + List<ApplicationContext> applicationContexts = this.dependencyTree. + getStarAbleDependenciesByTermination(); } catch (TopologyInConsistentException e) { //TODO revert the siblings and notify parent, change a flag for reverting/un-subscription log.error("Error while starting the monitor upon termination" + e); http://git-wip-us.apache.org/repos/asf/stratos/blob/65d96bce/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 bc08c56..97f6476 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 @@ -89,12 +89,24 @@ public class StatusChecker { TopologyManager.acquireReadLockForCluster(monitor.getServiceId(), monitor.getClusterId()); Service service = TopologyManager.getTopology().getService(monitor.getServiceId()); Cluster cluster; + String appId = monitor.getAppId(); if (service != null) { cluster = service.getCluster(monitor.getClusterId()); if (cluster != null) { + try { + + TopologyManager.acquireReadLockForApplication(appId); + Application application = TopologyManager.getTopology().getApplication(appId); + if (!clusterMonitorHasMembers && cluster.getStatus() == ClusterStatus.Terminating) { - StatusEventPublisher.sendClusterTerminatedEvent(monitor.getAppId(), monitor.getServiceId(), - monitor.getClusterId()); + if(application.getStatus() == ApplicationStatus.Terminating) { + StatusEventPublisher.sendClusterTerminatedEvent(appId, monitor.getServiceId(), + monitor.getClusterId()); + } else { + StatusEventPublisher.sendClusterCreatedEvent(appId, monitor.getServiceId(), + monitor.getClusterId()); + } + } else { log.info("Cluster has non terminated [members] and in the [status] " + cluster.getStatus().toString()); @@ -107,6 +119,9 @@ public class StatusChecker { }*/ } + } finally { + TopologyManager.releaseReadLockForApplication(appId); + } } }
