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/20 06:36:32 UTC

[1/2] git commit: adding in_active events support

Repository: stratos
Updated Branches:
  refs/heads/4.0.0-grouping ae4f94efb -> b01d73c30


adding in_active events support


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/6d8ea413
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/6d8ea413
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/6d8ea413

Branch: refs/heads/4.0.0-grouping
Commit: 6d8ea4132625ef015299a544b4963a41109c3562
Parents: 8efef75
Author: reka <rt...@gmail.com>
Authored: Mon Oct 20 09:57:21 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Mon Oct 20 09:57:21 2014 +0530

----------------------------------------------------------------------
 .../grouping/dependency/DependencyTree.java     |  3 +-
 .../grouping/topic/StatusEventPublisher.java    | 49 +++++++++++++
 .../AutoscalerTopologyEventReceiver.java        | 48 ++++++++++++-
 .../stratos/autoscaler/monitor/Monitor.java     | 12 ++--
 .../monitor/ParentComponentMonitor.java         | 24 ++++---
 .../monitor/application/ApplicationMonitor.java | 11 ++-
 .../monitor/events/ApplicationStatusEvent.java  |  8 ++-
 .../monitor/events/ClusterStatusEvent.java      | 10 ++-
 .../monitor/events/GroupStatusEvent.java        | 12 +++-
 .../monitor/events/MonitorStatusEvent.java      | 14 +---
 .../autoscaler/monitor/group/GroupMonitor.java  | 74 ++++++++++++++++++--
 .../status/checker/StatusChecker.java           | 26 ++++++-
 .../domain/topology/ComponentStatus.java        | 26 +++++++
 .../messaging/domain/topology/Status.java       |  2 +-
 14 files changed, 270 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java
index 156f3a5..e4f214e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyTree.java
@@ -92,7 +92,8 @@ public class DependencyTree {
      */
     private ApplicationContext findApplicationContextWithId(String id, List<ApplicationContext> contexts) {
         for (ApplicationContext context : contexts) {
-            if (context.getId().equals(id) && context.getCurrentStatus() == null) {
+            //TODO check for the status
+            if (context.getId().equals(id)) {
                 return context;
             }
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/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 efd5eea..f8a2322 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
@@ -6,6 +6,7 @@ import org.apache.stratos.messaging.broker.publish.EventPublisher;
 import org.apache.stratos.messaging.broker.publish.EventPublisherPool;
 import org.apache.stratos.messaging.event.Event;
 import org.apache.stratos.messaging.event.application.status.*;
+import org.apache.stratos.messaging.event.topology.ClusterCreatedEvent;
 import org.apache.stratos.messaging.util.Constants;
 
 /**
@@ -14,6 +15,19 @@ import org.apache.stratos.messaging.util.Constants;
 public class StatusEventPublisher {
     private static final Log log = LogFactory.getLog(StatusEventPublisher.class);
 
+    public static void sendClusterCreatedEvent(String appId, String serviceName, String clusterId) {
+
+        if (log.isInfoEnabled()) {
+            log.info("Publishing Cluster activated event for [application]: " + appId +
+                    " [cluster]: " + clusterId);
+        }
+
+        //TODO cluster
+        ClusterCreatedEvent clusterActivatedEvent = new ClusterCreatedEvent(appId, serviceName, null);
+
+        publishEvent(clusterActivatedEvent);
+    }
+
     public static void sendClusterActivatedEvent(String appId, String serviceName, String clusterId) {
 
         if (log.isInfoEnabled()) {
@@ -26,6 +40,18 @@ public class StatusEventPublisher {
         publishEvent(clusterActivatedEvent);
     }
 
+    public static void sendClusterInActivateEvent(String appId, String serviceName, String clusterId) {
+
+        if (log.isInfoEnabled()) {
+            log.info("Publishing Cluster in-activate event for [application]: " + appId +
+                    " [cluster]: " + clusterId);
+        }
+
+        /*ClusterActivatedEvent clusterActivatedEvent = new ClusterActivatedEvent(appId, serviceName, clusterId);
+
+        publishEvent(clusterActivatedEvent);*/
+    }
+
     public static void sendClusterInMaintenanceEvent(String appId, String serviceName, String clusterId) {
 
         if (log.isInfoEnabled()) {
@@ -39,6 +65,17 @@ public class StatusEventPublisher {
         publishEvent(clusterInMaintenanceEvent);
     }
 
+    public static void sendGroupCreatedEvent(String appId, String groupId) {
+
+        if (log.isInfoEnabled()) {
+            log.info("Publishing Group activated event for [application]: " + appId +
+                    " [group]: " + groupId);
+        }
+
+/*
+        publishEvent(groupActivatedEvent);*/
+    }
+
     public static void sendGroupActivatedEvent(String appId, String groupId) {
 
         if (log.isInfoEnabled()) {
@@ -51,6 +88,18 @@ public class StatusEventPublisher {
         publishEvent(groupActivatedEvent);
     }
 
+    public static void sendGroupInActivateEvent(String appId, String groupId) {
+
+        if (log.isInfoEnabled()) {
+            log.info("Publishing Group in-activate event for [application]: " + appId +
+                    " [group]: " + groupId);
+        }
+
+        /*GroupActivatedEvent groupActivatedEvent = new GroupActivatedEvent(appId, groupId);
+
+        publishEvent(groupActivatedEvent);*/
+    }
+
     public static void sendApplicationActivatedEvent(String appId) {
 
         if (log.isInfoEnabled()) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
index 1e20937..29e5c50 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
@@ -30,6 +30,7 @@ import org.apache.stratos.autoscaler.exception.TopologyInConsistentException;
 import org.apache.stratos.autoscaler.monitor.AbstractClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.ApplicationMonitorFactory;
 import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitor;
+import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.group.GroupMonitor;
 import org.apache.stratos.autoscaler.partition.PartitionManager;
 import org.apache.stratos.autoscaler.policy.PolicyManager;
@@ -160,6 +161,26 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
             }
         });
 
+        topologyEventReceiver.addEventListener(new ClusterInActivateEventListener() {
+            @Override
+            protected void onEvent(Event event) {
+
+                log.info("[ClusterActivatedEvent] Received: " + event.getClass());
+
+                ClusterInActivateEvent clusterInActivateEvent = (ClusterInActivateEvent) event;
+                String appId = clusterInActivateEvent.getAppId();
+                String clusterId = clusterInActivateEvent.getClusterId();
+                AbstractClusterMonitor clusterMonitor =
+                        (AbstractClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterId);
+
+                //changing the status in the monitor, will notify its parent monitor
+                clusterMonitor.setStatus(Status.In_Active);
+
+                //starting the status checker to decide on the status of it's parent
+                //StatusChecker.getInstance().onClusterStatusChange(clusterId, appId);
+            }
+        });
+
         topologyEventReceiver.addEventListener(new GroupActivatedEventListener() {
             @Override
             protected void onEvent(Event event) {
@@ -181,6 +202,27 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
             }
         });
 
+        topologyEventReceiver.addEventListener(new GroupInActivateEventListener() {
+            @Override
+            protected void onEvent(Event event) {
+
+                log.info("[GroupInActivateEvent] Received: " + event.getClass());
+
+                GroupInActivateEvent groupInActivateEvent = (GroupInActivateEvent) event;
+                String appId = groupInActivateEvent.getAppId();
+                String groupId = groupInActivateEvent.getGroupId();
+
+                ApplicationMonitor appMonitor = AutoscalerContext.getInstance().getAppMonitor(appId);
+                GroupMonitor monitor = (GroupMonitor) appMonitor.findGroupMonitorWithId(groupId);
+
+                //changing the status in the monitor, will notify its parent monitor
+                monitor.setStatus(Status.In_Active);
+
+                //starting the status checker to decide on the status of it's parent
+                //StatusChecker.getInstance().onGroupStatusChange(groupId, appId);
+            }
+        });
+
         topologyEventReceiver.addEventListener(new ApplicationActivatedEventListener() {
             @Override
             protected void onEvent(Event event) {
@@ -209,14 +251,14 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
 
                 try {
                     //TODO remove monitors as well as any starting or pending threads
-                    /*ApplicationMonitor monitor = AutoscalerContext.getInstance().
+                    ApplicationMonitor monitor = AutoscalerContext.getInstance().
                             getAppMonitor(applicationRemovedEvent.getApplicationId());
                     if (monitor != null) {
                         List<String> clusters = monitor.
                                 findClustersOfApplication(applicationRemovedEvent.getApplicationId());
                         for (String clusterId : clusters) {
                             //stopping the cluster monitor and remove it from the AS
-                            AutoscalerContext.getInstance().getMonitor(clusterId).setDestroyed(true);
+                            ((ClusterMonitor)AutoscalerContext.getInstance().getMonitor(clusterId)).setDestroyed(true);
                             AutoscalerContext.getInstance().removeMonitor(clusterId);
                         }
                         //removing the application monitor
@@ -225,7 +267,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
                     } else {
                         log.warn("Application Monitor cannot be found for the removed [application] "
                                 + applicationRemovedEvent.getApplicationId());
-                    }*/
+                    }
 
 
                 } finally {

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/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 f08be7f..a0f1d98 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
@@ -31,7 +31,9 @@ public abstract class Monitor implements EventHandler {
     //Parent monitor of this monitor, for appMonitor parent will be none.
     protected ParentComponentMonitor parent;
     //monitors map, key=GroupAlias/clusterId and value=GroupMonitor/AbstractClusterMonitor
-    protected Map<String, Monitor> aliasToMonitorsMap;
+    protected Map<String, Monitor> aliasToActiveMonitorsMap;
+    //monitors map, stopped monitors
+    protected Map<String, Monitor> aliasToInActiveMonitorsMap;
 
     public String getId() {
         return id;
@@ -50,12 +52,12 @@ public abstract class Monitor implements EventHandler {
         this.appId = appId;
     }
 
-    public Map<String, Monitor> getAliasToMonitorsMap() {
-        return aliasToMonitorsMap;
+    public Map<String, Monitor> getAliasToActiveMonitorsMap() {
+        return aliasToActiveMonitorsMap;
     }
 
-    public void setAliasToMonitorsMap(Map<String, Monitor> aliasToMonitorsMap) {
-        this.aliasToMonitorsMap = aliasToMonitorsMap;
+    public void setAliasToActiveMonitorsMap(Map<String, Monitor> aliasToActiveMonitorsMap) {
+        this.aliasToActiveMonitorsMap = aliasToActiveMonitorsMap;
     }
 
     public ParentComponentMonitor getParent() {

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/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 3cd2d9f..08f2376 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
@@ -49,7 +49,7 @@ public abstract class ParentComponentMonitor extends Monitor {
     protected String appId;
 
     public ParentComponentMonitor(ParentComponent component) throws DependencyBuilderException {
-        aliasToMonitorsMap = new HashMap<String, Monitor>();
+        aliasToActiveMonitorsMap = new HashMap<String, Monitor>();
         //clusterIdToClusterMonitorsMap = new HashMap<String, AbstractClusterMonitor>();
         this.id = component.getUniqueIdentifier();
         //Building the dependency for this monitor within the immediate children
@@ -103,8 +103,12 @@ public abstract class ParentComponentMonitor extends Monitor {
             if (log.isDebugEnabled()) {
                 log.debug("Dependency check for the Group " + context.getId() + " started");
             }
-            startMonitor(this, context);
-            //context.setCurrentStatus(Status.Created);
+            if(!this.aliasToActiveMonitorsMap.containsKey(context.getId())) {
+                //to avoid if it is already started
+                startMonitor(this, context);
+            } else if(this.aliasToInActiveMonitorsMap.containsKey(context.getId())) {
+                //need to trigger the cluster monitor
+            }
         }
 
         return true;
@@ -129,7 +133,7 @@ public abstract class ParentComponentMonitor extends Monitor {
 
     protected synchronized void startMonitor(ParentComponentMonitor parent, ApplicationContext context) {
         Thread th = null;
-        if (!this.aliasToMonitorsMap.containsKey(context.getId())) {
+        if (!this.aliasToActiveMonitorsMap.containsKey(context.getId())) {
             th = new Thread(
                     new MonitorAdder(parent, context, this.appId));
             if (log.isDebugEnabled()) {
@@ -205,7 +209,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             }
 
             AutoscalerContext.getInstance().addMonitor(monitor);
-            aliasToMonitorsMap.put(context.getId(), monitor);
+            aliasToActiveMonitorsMap.put(context.getId(), monitor);
             if (log.isInfoEnabled()) {
                 log.info(String.format("Monitor has been added successfully for: %s",
                         context.getId()));
@@ -217,7 +221,7 @@ public abstract class ParentComponentMonitor extends Monitor {
     /*protected synchronized void startGroupMonitor(ParentComponentMonitor parent, GroupContext groupContext) {
         Thread th = null;
         //String groupId = group.getUniqueIdentifier();
-        if (!this.aliasToMonitorsMap.containsKey(groupId)) {
+        if (!this.aliasToActiveMonitorsMap.containsKey(groupId)) {
             if (log.isDebugEnabled()) {
                 log.debug(String
                         .format("Group monitor Adder has been added: [group] %s ",
@@ -259,7 +263,7 @@ public abstract class ParentComponentMonitor extends Monitor {
 
     /*protected synchronized void startClusterMonitor(ParentComponentMonitor parent, ApplicationContext clusterContext) {
         Thread th = null;
-        if (!this.aliasToMonitorsMap.containsKey(clusterContext.getId())) {
+        if (!this.aliasToActiveMonitorsMap.containsKey(clusterContext.getId())) {
             th = new Thread(
                     new ClusterMonitorAdder(parent, clusterContext));
             if (log.isDebugEnabled()) {
@@ -357,7 +361,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             th.start();
 
             AutoscalerContext.getInstance().addMonitor(monitor);
-            aliasToMonitorsMap.put(cluster.getClusterId(), monitor);
+            aliasToActiveMonitorsMap.put(cluster.getClusterId(), monitor);
             if (log.isInfoEnabled()) {
                 log.info(String.format("Cluster monitor has been added successfully: [cluster] %s",
                         cluster.getClusterId()));
@@ -421,7 +425,7 @@ public abstract class ParentComponentMonitor extends Monitor {
                 throw new RuntimeException(msg);
             }
 
-            aliasToMonitorsMap.put(groupId, monitor);
+            aliasToActiveMonitorsMap.put(groupId, monitor);
             //parent.addObserver(monitor);
 
             if (log.isInfoEnabled()) {
@@ -473,7 +477,7 @@ public abstract class ParentComponentMonitor extends Monitor {
             Thread th = new Thread(monitor);
             th.start();
             AutoscalerContext.getInstance().addLbMonitor(monitor);
-            aliasToMonitorsMap.put(cluster.getClusterId(), monitor);
+            aliasToActiveMonitorsMap.put(cluster.getClusterId(), monitor);
             if (log.isInfoEnabled()) {
                 log.info(String.format("LB Cluster monitor has been added successfully: [cluster] %s",
                         cluster.getClusterId()));

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/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 5df3367..ce1ffb6 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
@@ -29,6 +29,7 @@ import org.apache.stratos.autoscaler.monitor.ParentComponentMonitor;
 import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
 import org.apache.stratos.autoscaler.status.checker.StatusChecker;
 import org.apache.stratos.messaging.domain.topology.Application;
+import org.apache.stratos.messaging.domain.topology.ComponentStatus;
 import org.apache.stratos.messaging.domain.topology.Status;
 
 import java.util.ArrayList;
@@ -78,7 +79,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
      */
     public AbstractClusterMonitor findClusterMonitorWithId(String clusterId) {
         /*return findClusterMonitor(clusterId, clusterIdToClusterMonitorsMap.values(),
-                aliasToMonitorsMap.values());*/
+                aliasToActiveMonitorsMap.values());*/
         return null;
 
     }
@@ -118,7 +119,7 @@ public class ApplicationMonitor extends ParentComponentMonitor {
      * @return the found GroupMonitor
      */
     public Monitor findGroupMonitorWithId(String groupId) {
-        return findGroupMonitor(groupId, aliasToMonitorsMap.values());
+        return findGroupMonitor(groupId, aliasToActiveMonitorsMap.values());
 
     }
 
@@ -137,8 +138,8 @@ public class ApplicationMonitor extends ParentComponentMonitor {
                 return monitor;
             } else {
                 // check if this Group has nested sub Groups. If so, traverse them as well
-                if (monitor.getAliasToMonitorsMap() != null) {
-                    return findGroupMonitor(id, monitor.getAliasToMonitorsMap().values());
+                if (monitor.getAliasToActiveMonitorsMap() != null) {
+                    return findGroupMonitor(id, monitor.getAliasToActiveMonitorsMap().values());
                 }
             }
         }
@@ -196,8 +197,6 @@ public class ApplicationMonitor extends ParentComponentMonitor {
 
                 }
                 //updating the life cycle and current status
-                context.setCurrentStatus(statusEvent.getStatus());
-                context.addStatusToLIfeCycle(statusEvent.getStatus());
                 if (!startDep) {
                     //Checking in the children whether all are active,
                     // since no dependency found to be started.

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ApplicationStatusEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ApplicationStatusEvent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ApplicationStatusEvent.java
index 783cc7a..657719a 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ApplicationStatusEvent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ApplicationStatusEvent.java
@@ -25,12 +25,18 @@ import org.apache.stratos.messaging.domain.topology.Status;
  */
 public class ApplicationStatusEvent extends MonitorStatusEvent {
 
+    private Status status;
+
     public ApplicationStatusEvent(Status status, String id) {
-        super(status, id);
+        super(id);
+        this.status = status;
     }
 
     public Status getStatus() {
         return this.status;
     }
 
+    public void setStatus(Status status) {
+        this.status = status;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java
index d05208f..7e3fabc 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/ClusterStatusEvent.java
@@ -25,12 +25,18 @@ import org.apache.stratos.messaging.domain.topology.Status;
  */
 public class ClusterStatusEvent extends MonitorStatusEvent {
 
+    private Status status;
+
     public ClusterStatusEvent(Status status, String id) {
-        super(status, id);
+        super(id);
+        this.status = status;
     }
 
     public Status getStatus() {
-        return super.getStatus();
+        return this.status;
     }
 
+    public void setStatus(Status status) {
+        this.status = status;
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/GroupStatusEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/GroupStatusEvent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/GroupStatusEvent.java
index aa31d73..bb93710 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/GroupStatusEvent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/GroupStatusEvent.java
@@ -24,8 +24,18 @@ import org.apache.stratos.messaging.domain.topology.Status;
  * This will use to notify observers upon a group activation events received in Topology.
  */
 public class GroupStatusEvent extends MonitorStatusEvent {
+    private Status status;
 
     public GroupStatusEvent(Status status, String id) {
-        super(status, id);
+        super(id);
+        this.status = status;
+    }
+
+    public Status getStatus() {
+        return status;
+    }
+
+    public void setStatus(Status status) {
+        this.status = status;
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorStatusEvent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorStatusEvent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorStatusEvent.java
index 336bd7a..180b1cc 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorStatusEvent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/events/MonitorStatusEvent.java
@@ -18,21 +18,19 @@
  */
 package org.apache.stratos.autoscaler.monitor.events;
 
+import org.apache.stratos.messaging.domain.topology.ComponentStatus;
 import org.apache.stratos.messaging.domain.topology.Status;
 
 /**
  * Monitor Status Event
  */
 public abstract class MonitorStatusEvent {
-    protected Status status;
     protected String id;
 
-    public MonitorStatusEvent(Status status, String id) {
-        this.setStatus(status);
+    public MonitorStatusEvent(String id) {
         this.setId(id);
     }
 
-
     public String getId() {
         return id;
     }
@@ -41,11 +39,5 @@ public abstract class MonitorStatusEvent {
         this.id = id;
     }
 
-    public Status getStatus() {
-        return status;
-    }
-
-    public void setStatus(Status status) {
-        this.status = status;
-    }
+    public abstract ComponentStatus getStatus();
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/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 9f83578..a06ab14 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
@@ -28,6 +28,7 @@ import org.apache.stratos.autoscaler.monitor.MonitorStatusEventBuilder;
 import org.apache.stratos.autoscaler.monitor.ParentComponentMonitor;
 import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
 import org.apache.stratos.autoscaler.status.checker.StatusChecker;
+import org.apache.stratos.messaging.domain.topology.ComponentStatus;
 import org.apache.stratos.messaging.domain.topology.Group;
 import org.apache.stratos.messaging.domain.topology.Status;
 
@@ -66,7 +67,7 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler
     @Override
     protected void monitor(MonitorStatusEvent statusEvent) {
         String id = statusEvent.getId();
-        Status status1 = statusEvent.getStatus();
+        ComponentStatus status1 = statusEvent.getStatus();
         ApplicationContext context = this.dependencyTree.findApplicationContextWithId(id);
         //Events coming from parent are In_Active(in faulty detection), Scaling events, termination
         //TODO if statusEvent is for active, then start the next one if any available
@@ -92,7 +93,7 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler
                     log.error(e);
                 }
             } else if (status1 == Status.In_Active) {
-                //TODO if C1 depends on C2, then if C2 is in_active, then by getting killdepend as C1 and
+                //TODO if C1 depends on C2, then if C2 is in_active, then by getting kill depend as C1 and
                 //TODO need to send in_active for c1. When C1 in_active receives, get dependent and
                 //TODO check whether dependent in_active. Then kill c1.
                 //evaluate termination behavior and take action based on that.
@@ -100,11 +101,31 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler
                 List<ApplicationContext> terminationList = new ArrayList<ApplicationContext>();
                 terminationList = this.dependencyTree.getTerminationDependencies(id);
 
-                //check whether all the children are in_active state
-                for (ApplicationContext terminationContext : terminationList) {
-                    //terminationContext
+                if(terminationList != null) {
+                    //Move to in_active monitors list
+                    this.aliasToInActiveMonitorsMap.put(id, this.aliasToActiveMonitorsMap.remove(id));
+                    boolean allInActive = false;
+                    //check whether all the children are in_active state
+                    for (ApplicationContext terminationContext : terminationList) {
+                        //Check for whether all dependent are in_active
+                        if(this.aliasToInActiveMonitorsMap.containsKey(terminationContext.getId())) {
+                            allInActive = true;
+                        } else {
+                            allInActive = false;
+                        }
+                    }
+
+                    if(allInActive) {
+                        //Then kill-all of each termination dependents and get a lock for CM
+                        //if start order then can kill only the first one, rest of them will get killed based on created event of first one.
+                    }
                 }
 
+
+
+
+
+
                 /*if(terminationList != null && !terminationList.isEmpty()) {
                     for(ApplicationContext context1 : terminationList) {
                         if(context1 instanceof ClusterContext) {
@@ -124,9 +145,50 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler
                     if(canTerminate) {
                        //
                     }*/
-            } else {
+            } else if(status1 == Status.Created) {
                 //TODO get dependents
                 List<ApplicationContext> dependents = this.dependencyTree.getTerminationDependencies(id);
+                // if no dependencies then start the cluster monitor. if all are in created, then start them in the order.
+                if(dependents != null) {
+                    boolean allCreated = false;
+                    //check whether all the children are in_active state
+                    for (ApplicationContext terminationContext : dependents) {
+                        //Check for whether all dependent are in_active
+                        if(this.aliasToInActiveMonitorsMap.containsKey(terminationContext.getId())) {
+                            allCreated = true;
+                        } else {
+                            allCreated = false;
+                        }
+                    }
+
+                    String firstChildToBeStarted = null;
+
+                    if(allCreated) {
+                        //start the CM according to startup order and releasing the lock for it
+                        try {
+                            //if life cycle is empty, need to start the monitor
+                            boolean startDep = startDependency(firstChildToBeStarted);
+                            if (log.isDebugEnabled()) {
+                                log.debug("started a child: " + startDep + " by the group/cluster: " + firstChildToBeStarted);
+
+                            }
+                            //updating the life cycle and current status
+                            if (startDep) {
+                                context.setCurrentStatus(Status.Created);
+                                context.addStatusToLIfeCycle(Status.Created);
+                            } else {
+                                StatusChecker.getInstance().onChildStatusChange(id, firstChildToBeStarted, this.appId);
+                            }
+
+                        } catch (TopologyInConsistentException e) {
+                            //TODO revert the siblings and notify parent, change a flag for reverting/un-subscription
+                            log.error(e);
+                        }
+                    } else {
+                        //kill other dependents cluster
+                        
+                    }
+                }
             }
 
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
index c76df01..32523d0 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
@@ -70,8 +70,15 @@ public class StatusChecker {
     public void onMemberTermination(String clusterId) {
         ClusterMonitor monitor = (ClusterMonitor) AutoscalerContext.getInstance().getMonitor(clusterId);
         //TODO get Topology status
-        // if cluster not having any members and if the cluster was in_active then send created Events
-        // if cluster was in terminating, then send terminated event.
+        boolean clusterMonitorHasMembers;
+        clusterMonitorHasMembers = clusterMonitorHasMembers(monitor);
+        if(clusterMonitorHasMembers) {
+            //monitor.pause();
+            // if cluster not having any members and if the cluster was in_active then send created Events
+            StatusEventPublisher.sendClusterCreatedEvent(monitor.getAppId(), monitor.getServiceId(),
+                    monitor.getClusterId());
+        }
+        // TODO if cluster was in terminating, then send terminated event.
     }
 
     private boolean clusterActive(AbstractClusterMonitor monitor) {
@@ -93,6 +100,20 @@ public class StatusChecker {
         return clusterActive;
     }
 
+    private boolean clusterMonitorHasMembers(AbstractClusterMonitor monitor) {
+        boolean hasMember = false;
+        for (NetworkPartitionContext networkPartitionContext : monitor.getNetworkPartitionCtxts().values()) {
+            //minimum check per partition
+            for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) {
+                if (partitionContext.getNonTerminatedMemberCount() > 0) {
+                    hasMember = true;
+                    return hasMember;
+                }
+            }
+        }
+        return hasMember;
+    }
+
     /**
      * @param clusterId
      * @param appId
@@ -104,6 +125,7 @@ public class StatusChecker {
         if (clusterInActive) {
             //TODO evaluate life cycle
             //send cluster In-Active event to cluster status topic
+            StatusEventPublisher.sendGroupInActivateEvent(appId, monitor.getParent().getId());
 
         } else {
             boolean clusterActive = clusterActive(monitor);

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ComponentStatus.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ComponentStatus.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ComponentStatus.java
new file mode 100644
index 0000000..1b8993c
--- /dev/null
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/ComponentStatus.java
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.messaging.domain.topology;
+
+/**
+ * Created by reka on 10/18/14.
+ */
+public interface ComponentStatus {
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/6d8ea413/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java
index 2bd0945..dd6f922 100644
--- a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java
+++ b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/Status.java
@@ -19,7 +19,7 @@
 
 package org.apache.stratos.messaging.domain.topology;
 
-public enum Status {
+public enum Status implements ComponentStatus {
 
     Created(1),
     Running(2),


[2/2] git commit: merging the changes

Posted by re...@apache.org.
merging the changes


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/b01d73c3
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/b01d73c3
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/b01d73c3

Branch: refs/heads/4.0.0-grouping
Commit: b01d73c30097d1f16970920d551b05f75387bf0a
Parents: 6d8ea41 ae4f94e
Author: reka <rt...@gmail.com>
Authored: Mon Oct 20 10:06:12 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Mon Oct 20 10:06:12 2014 +0530

----------------------------------------------------------------------
 .../AutoscalerTopologyEventReceiver.java        |  18 ++--
 .../monitor/ApplicationMonitorFactory.java      |   8 +-
 .../monitor/cluster/ClusterMonitor.java         |   4 +-
 .../monitor/cluster/LbClusterMonitor.java       |   4 +-
 .../autoscaler/monitor/group/GroupMonitor.java  |   5 +-
 .../status/checker/StatusChecker.java           |   4 +-
 .../InstanceStatusEventMessageDelegator.java    |  17 ++--
 .../controller/topology/TopologyBuilder.java    |  41 ++++++--
 .../messaging/domain/topology/Application.java  |  27 ++++-
 .../domain/topology/ApplicationStatus.java      |  71 +++++++++++++
 .../messaging/domain/topology/Cluster.java      |  37 +++++--
 .../domain/topology/ClusterStatus.java          |  56 ++++++++--
 .../messaging/domain/topology/Group.java        |  30 +++++-
 .../messaging/domain/topology/GroupStatus.java  |  70 +++++++++++++
 .../LifeCycleStateTransitionBehavior.java       |  35 +++++++
 .../messaging/domain/topology/Member.java       |  29 ++++--
 .../messaging/domain/topology/MemberStatus.java |  59 +++++++++--
 .../domain/topology/ParentComponent.java        |  12 +--
 .../topology/lifecycle/LifeCycleState.java      |  28 +++++
 .../lifecycle/LifeCycleStateManager.java        | 102 +++++++++++++++++++
 .../domain/topology/util/GroupStatus.java       |  40 --------
 .../ApplicationActivatedMessageProcessor.java   |   2 +-
 .../topology/ClusterActivatedProcessor.java     |  12 ++-
 .../ClusterMaintenanceModeMessageProcessor.java |   7 +-
 .../topology/GroupActivatedProcessor.java       |   5 +-
 .../InstanceSpawnedMessageProcessor.java        |   2 +-
 .../MemberActivatedMessageProcessor.java        |   3 +
 .../MemberMaintenanceModeProcessor.java         |   3 +
 .../MemberReadyToShutdownMessageProcessor.java  |   3 +
 .../topology/MemberStartedMessageProcessor.java |   3 +
 .../MemberSuspendedMessageProcessor.java        |   3 +
 31 files changed, 619 insertions(+), 121 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/b01d73c3/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/stratos/blob/b01d73c3/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/stratos/blob/b01d73c3/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/status/checker/StatusChecker.java
----------------------------------------------------------------------