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
----------------------------------------------------------------------