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);
+                            }
                         }
                     }
 

Reply via email to