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/09 11:41:51 UTC
[1/2] git commit: fixing application/group activation and locking
Repository: stratos
Updated Branches:
refs/heads/4.0.0-grouping cbcb376fd -> a13091a6c
fixing application/group activation and locking
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/dc8067a9
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/dc8067a9
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/dc8067a9
Branch: refs/heads/4.0.0-grouping
Commit: dc8067a9a382597aa9eb3ef89fe098ad40d900b7
Parents: 10ed5ef
Author: reka <rt...@gmail.com>
Authored: Thu Oct 9 15:10:23 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Oct 9 15:10:23 2014 +0530
----------------------------------------------------------------------
.../apache/stratos/autoscaler/Constants.java | 4 +
.../grouping/dependency/DependencyBuilder.java | 9 +-
.../grouping/dependency/DependencyTree.java | 1 -
.../context/ApplicationContextFactory.java | 52 +++++++----
.../AutoscalerTopologyEventReceiver.java | 44 +++++----
.../monitor/AbstractClusterMonitor.java | 1 +
.../stratos/autoscaler/monitor/Monitor.java | 97 ++++++++++++--------
.../monitor/application/ApplicationMonitor.java | 6 +-
.../autoscaler/monitor/group/GroupMonitor.java | 12 ++-
.../status/checker/StatusChecker.java | 34 +++----
.../stratos/autoscaler/util/AutoscalerUtil.java | 1 +
11 files changed, 157 insertions(+), 104 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/dc8067a9/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/Constants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/Constants.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/Constants.java
index a448406..59717f7 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/Constants.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/Constants.java
@@ -76,4 +76,8 @@ public class Constants {
public static final String KILL_NONE = "kill-none";
public static final String KILL_ALL = "kill-all";
public static final String KILL_DEPENDENTS = "kill-dependents";
+ public static final String GROUP = "group";
+ public static final String CARTRIDGE = "cartridge";
+
+
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/dc8067a9/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyBuilder.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyBuilder.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyBuilder.java
index fcdaade..5a1e4fd 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyBuilder.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/DependencyBuilder.java
@@ -32,7 +32,7 @@ import java.util.Set;
/**
* This is to build the startup/termination dependencies
- * across all the groups and clusters
+ * across immediate children according to the start order defined.
*/
public class DependencyBuilder {
private static final Log log = LogFactory.getLog(DependencyBuilder.class);
@@ -97,8 +97,9 @@ public class DependencyBuilder {
if (start != null) {
ApplicationContext applicationContext = ApplicationContextFactory.
- getApplicationContext(start, component, dependencyTree);
- String id = applicationContext.getId(); //TODO change the id
+ getApplicationContext(start, component,
+ dependencyTree.isKillDependent());
+ String id = applicationContext.getId();
ApplicationContext existingApplicationContext =
dependencyTree.findApplicationContextWithId(id);
@@ -131,7 +132,7 @@ public class DependencyBuilder {
}
}
}
- //TODO need to parser the scalable dependencies
+ //TODO need to parser the scalable dependencies
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/dc8067a9/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 a5b9ce2..d3dded3 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
@@ -166,7 +166,6 @@ public class DependencyTree {
return childContexts;
}
-
public boolean isKillAll() {
return killAll;
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/dc8067a9/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/context/ApplicationContextFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/context/ApplicationContextFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/context/ApplicationContextFactory.java
index dfd8fa9..6e10633 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/context/ApplicationContextFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/dependency/context/ApplicationContextFactory.java
@@ -18,44 +18,64 @@
*/
package org.apache.stratos.autoscaler.grouping.dependency.context;
-import org.apache.stratos.autoscaler.grouping.dependency.DependencyTree;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.Constants;
+import org.apache.stratos.messaging.domain.topology.ClusterDataHolder;
import org.apache.stratos.messaging.domain.topology.ParentComponent;
/**
* Factory to create new GroupContext or ClusterContext
*/
public class ApplicationContextFactory {
+ private static final Log log = LogFactory.getLog(ApplicationContextFactory.class);
+ /**
+ * Will return the GroupContext/ClusterContext based on the type in start order
+ * @param startOrder reference of group/cluster in the start order
+ * @param component The component which used to build the dependency
+ * @param isKillDependent kill dependent behaviour of this component
+ * @return Context
+ */
public static ApplicationContext getApplicationContext(String startOrder,
ParentComponent component,
- DependencyTree dependencyTree) {
+ boolean isKillDependent) {
String id;
ApplicationContext applicationContext = null;
- if (startOrder.contains("group")) {
+ if (startOrder.contains(Constants.GROUP)) {
+ //getting the group alias
id = getGroupFromStartupOrder(startOrder);
- //TODO getting the alias of the group using groupName
- applicationContext = new GroupContext(component.getGroup(id).getAlias(),
- dependencyTree.isKillDependent());
- } else if (startOrder.contains("cartridge")) {
+ applicationContext = new GroupContext(id,
+ isKillDependent);
+ } else if (startOrder.contains(Constants.CARTRIDGE)) {
+ //getting the cluster alias
id = getClusterFromStartupOrder(startOrder);
- //TODO getting the cluster id of the using cartridge name
- applicationContext = new ClusterContext(component.getClusterData(id).getClusterId(),
- dependencyTree.isKillDependent());
+ //getting the cluster-id from cluster alias
+ ClusterDataHolder clusterDataHolder = component.getClusterDataMap().get(id);
+ applicationContext = new ClusterContext(clusterDataHolder.getClusterId(),
+ isKillDependent);
} else {
- //TODO throw exception
+ log.warn("[Startup Order]: " + startOrder + " contains unknown reference");
}
return applicationContext;
}
+ /**
+ * Utility method to get the group alias from the startup order Eg: group.mygroup
+ * @param startupOrder startup order
+ * @return group alias
+ */
public static String getGroupFromStartupOrder(String startupOrder) {
- return startupOrder.substring(6);
+ return startupOrder.substring(Constants.GROUP.length() + 1);
}
+ /**
+ * Utility method to get the cluster alias from startup order Eg: cartridge.myphp
+ * @param startupOrder startup order
+ * @return cluster alias
+ */
public static String getClusterFromStartupOrder(String startupOrder) {
- return startupOrder.substring(10);
+ return startupOrder.substring(Constants.CARTRIDGE.length() + 1);
}
-
-
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/dc8067a9/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 b7d671f..3930e83 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
@@ -114,24 +114,27 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
topologyEventReceiver.addEventListener(new ApplicationCreatedEventListener() {
@Override
protected void onEvent(Event event) {
-
- log.info("[ApplicationCreatedEvent] Received: " + event.getClass());
-
- ApplicationCreatedEvent applicationCreatedEvent = (ApplicationCreatedEvent) event;
-
- //acquire read lock
- //TopologyManager.acquireReadLock();
- TopologyManager.acquireReadLockForApplication(applicationCreatedEvent.getApplication().getUniqueIdentifier());
-
try {
- //start the application monitor
- //TODO catch exception by ApplicationMonitor
- startApplicationMonitor(applicationCreatedEvent.getApplication());
+ log.info("[ApplicationCreatedEvent] Received: " + event.getClass());
+ ApplicationCreatedEvent applicationCreatedEvent = (ApplicationCreatedEvent) event;
+ try {
- } finally {
- //release read lock
- TopologyManager.releaseReadLockForApplication(applicationCreatedEvent.getApplication().getUniqueIdentifier());
- //TopologyManager.releaseReadLock();
+ //acquire read lock
+ TopologyManager.acquireReadLockForApplication(
+ applicationCreatedEvent.getApplication().getUniqueIdentifier());
+ //start the application monitor
+ startApplicationMonitor(applicationCreatedEvent.getApplication());
+ } catch (Exception e) {
+ String msg = "Error processing event " + e.getLocalizedMessage();
+ log.error(msg, e);
+ } finally {
+ //release read lock
+ TopologyManager.releaseReadLockForApplication(
+ applicationCreatedEvent.getApplication().getUniqueIdentifier());
+ }
+ } catch (ClassCastException e) {
+ String msg = "Error while casting the event " + e.getLocalizedMessage();
+ log.error(msg, e);
}
}
@@ -153,7 +156,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
clusterMonitor.setStatus(Status.Activated);
//starting the status checker to decide on the status of it's parent
- StatusChecker.getInstance().onClusterStatusChange(clusterId, appId);
+ //StatusChecker.getInstance().onClusterStatusChange(clusterId, appId);
}
});
@@ -174,7 +177,7 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
monitor.setStatus(Status.Activated);
//starting the status checker to decide on the status of it's parent
- StatusChecker.getInstance().onGroupStatusChange(groupId, appId);
+ //StatusChecker.getInstance().onGroupStatusChange(groupId, appId);
}
});
@@ -189,9 +192,6 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
ApplicationMonitor appMonitor = AutoscalerContext.getInstance().getAppMonitor(appId);
appMonitor.setStatus(Status.Activated);
- //TODO update appmonitor
- //starting the status checker to decide on the status of it's parent
- //StatusChecker.getInstance().onClusterStatusChange(clusterId, appId);
}
});
@@ -205,7 +205,6 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
ApplicationRemovedEvent applicationRemovedEvent = (ApplicationRemovedEvent) event;
//acquire read lock
- //TopologyManager.acquireReadLock();
TopologyManager.acquireReadLockForApplication(applicationRemovedEvent.getApplicationId());
try {
@@ -232,7 +231,6 @@ public class AutoscalerTopologyEventReceiver implements Runnable {
} finally {
//release read lock
TopologyManager.releaseReadLockForApplication(applicationRemovedEvent.getApplicationId());
- //TopologyManager.releaseReadLock();
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/dc8067a9/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
index d48fdb4..9aa75b4 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractClusterMonitor.java
@@ -255,6 +255,7 @@ abstract public class AbstractClusterMonitor implements EventHandler, Runnable {
public void setParent(Monitor parent) {
this.parent = parent;
+ this.appId = parent.getAppId();
}
@Override
http://git-wip-us.apache.org/repos/asf/stratos/blob/dc8067a9/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 475cb4f..65ab790 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
@@ -38,10 +38,9 @@ import org.apache.stratos.autoscaler.util.AutoscalerUtil;
import org.apache.stratos.messaging.domain.topology.*;
import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
-import java.util.*;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* Monitor is to monitor it's child monitors and
@@ -62,6 +61,8 @@ public abstract class Monitor implements EventHandler {
protected ParentComponent component;
//status of the monitor whether it is running/in_maintainable/terminated
protected Status status;
+ //Application id of this particular monitor
+ protected String appId;
public Monitor(ParentComponent component) throws DependencyBuilderException {
aliasToGroupMonitorsMap = new HashMap<String, GroupMonitor>();
@@ -73,6 +74,7 @@ public abstract class Monitor implements EventHandler {
/**
* Will monitor the immediate children upon any event triggers from parent/children
+ *
* @param statusEvent will be sent by parent/children with the current status
*/
protected abstract void monitor(MonitorStatusEvent statusEvent);
@@ -106,7 +108,7 @@ public abstract class Monitor implements EventHandler {
* @param applicationContexts the found applicationContexts to be started
*/
private boolean startDependency(List<ApplicationContext> applicationContexts)
- throws TopologyInConsistentException{
+ throws TopologyInConsistentException {
if (applicationContexts == null) {
//all the groups/clusters have been started and waiting for activation
log.info("There is no child found for the [group]: " + this.id);
@@ -124,27 +126,32 @@ public abstract class Monitor implements EventHandler {
String clusterId = clusterDataHolder.getClusterId();
String serviceName = clusterDataHolder.getServiceType();
Cluster cluster;
- //TopologyManager.acquireReadLock();
- Topology topology = TopologyManager.getTopology();
- if (topology.serviceExists(serviceName)) {
- Service service = topology.getService(serviceName);
- if (service.clusterExists(clusterId)) {
- cluster = service.getCluster(clusterId);
- if (log.isDebugEnabled()) {
- log.debug("Dependency check starting the [cluster]" + clusterId);
+ //acquire read lock for the service and cluster
+ TopologyManager.acquireReadLockForCluster(clusterId, serviceName);
+ try {
+ Topology topology = TopologyManager.getTopology();
+ if (topology.serviceExists(serviceName)) {
+ Service service = topology.getService(serviceName);
+ if (service.clusterExists(clusterId)) {
+ cluster = service.getCluster(clusterId);
+ if (log.isDebugEnabled()) {
+ log.debug("Dependency check starting the [cluster]" + clusterId);
+ }
+ startClusterMonitor(this, cluster);
+ } else {
+ String msg = "[Cluster] " + clusterId + " cannot be found in the " +
+ "Topology for [service] " + serviceName;
+ throw new TopologyInConsistentException(msg);
}
- startClusterMonitor(this, cluster);
} else {
- String msg = "[Cluster] " + clusterId + " cannot be found in the " +
- "Topology for [service] " + serviceName;
+ String msg = "[Service] " + serviceName + " cannot be found in the Topology";
throw new TopologyInConsistentException(msg);
- }
- } else {
- String msg = "[Service] " + serviceName + " cannot be found in the Topology";
- throw new TopologyInConsistentException(msg);
+ }
+ } finally {
+ //release read lock for the service and cluster
+ TopologyManager.releaseReadLockForCluster(clusterId, serviceName);
}
- //TopologyManager.releaseReadLock();
}
}
return true;
@@ -152,22 +159,27 @@ public abstract class Monitor implements EventHandler {
}
protected synchronized void startClusterMonitor(Monitor parent, Cluster cluster) {
- ScheduledExecutorService adder = Executors.newSingleThreadScheduledExecutor();
+ Thread th = null;
if (cluster.isLbCluster()
&& !this.clusterIdToClusterMonitorsMap.containsKey(cluster.getClusterId())) {
- adder.scheduleAtFixedRate(new LBClusterMonitorAdder(
- cluster), 5, 5, TimeUnit.SECONDS);
+ th = new Thread(new LBClusterMonitorAdder(
+ cluster));
} else if (!cluster.isLbCluster() && !this.clusterIdToClusterMonitorsMap.containsKey(cluster.getClusterId())) {
- adder.scheduleAtFixedRate(new ClusterMonitorAdder(parent, cluster), 5, 5, TimeUnit.SECONDS);
-
+ th = new Thread(
+ new ClusterMonitorAdder(parent, cluster));
if (log.isDebugEnabled()) {
log.debug(String
.format("Cluster monitor Adder has been added: [cluster] %s ",
cluster.getClusterId()));
}
}
- if (adder != null) {
- //adderIdToExecutorServiceMap.put(cluster.getClusterId(), adder);
+ if (th != null) {
+ th.start();
+ /*try {
+ th.join();
+ } catch (InterruptedException ignore) {
+ }*/
+
log.info(String
.format("Cluster monitor thread has been started successfully: [cluster] %s ",
cluster.getClusterId()));
@@ -175,25 +187,24 @@ public abstract class Monitor implements EventHandler {
}
protected synchronized void startGroupMonitor(Monitor parent, String dependency, ParentComponent component) {
- ScheduledExecutorService adder = Executors.newSingleThreadScheduledExecutor();
-
+ Thread th = null;
if (!this.aliasToGroupMonitorsMap.containsKey(dependency)) {
if (log.isDebugEnabled()) {
log.debug(String
.format("Group monitor Adder has been added: [group] %s ",
dependency));
}
- adder.scheduleAtFixedRate(new GroupMonitorAdder(parent, dependency, component), 5, 5, TimeUnit.SECONDS);
-
+ th = new Thread(
+ new GroupMonitorAdder(parent, dependency, component));
}
- if (adder != null) {
+ if (th != null) {
+ th.start();
/*try {
- adder.awaitTermination(30, TimeUnit.SECONDS);
- } catch (InterruptedException e) {
- e.printStackTrace();
+ th.join();
+ } catch (InterruptedException ignore) {
}*/
- //adderIdToExecutorServiceMap.put(((Group)component).getAlias(), adder);
+
log.info(String
.format("Group monitor thread has been started successfully: [group] %s ",
dependency));
@@ -236,6 +247,14 @@ public abstract class Monitor implements EventHandler {
return this.clusterIdToClusterMonitorsMap.get(clusterId);
}
+ public String getAppId() {
+ return appId;
+ }
+
+ public void setAppId(String appId) {
+ this.appId = appId;
+ }
+
private class ClusterMonitorAdder implements Runnable {
private Cluster cluster;
private Monitor parent;
@@ -250,10 +269,10 @@ public abstract class Monitor implements EventHandler {
int retries = 5;
boolean success = false;
do {
- /*try {
+ try {
Thread.sleep(5000);
} catch (InterruptedException e1) {
- }*/
+ }
try {
if (log.isDebugEnabled()) {
log.debug("CLuster monitor is going to be started for [cluster] "
http://git-wip-us.apache.org/repos/asf/stratos/blob/dc8067a9/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 90390e0..2ad2a0e 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
@@ -230,7 +230,11 @@ public class ApplicationMonitor extends Monitor {
if(context.getStatusLifeCycle().isEmpty()) {
try {
//if life cycle is empty, need to start the monitor
- startDependency(statusEvent.getId());
+ boolean dependencyStarted = startDependency(statusEvent.getId());
+ if(!dependencyStarted) {
+ //Have to check whether all other dependencies started
+
+ }
//updating the life cycle
context.addStatusToLIfeCycle(statusEvent.getStatus());
} catch (TopologyInConsistentException e) {
http://git-wip-us.apache.org/repos/asf/stratos/blob/dc8067a9/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 99d5305..f9a1a67 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
@@ -29,6 +29,7 @@ import org.apache.stratos.autoscaler.monitor.MonitorStatusEventBuilder;
import org.apache.stratos.autoscaler.monitor.events.ClusterStatusEvent;
import org.apache.stratos.autoscaler.monitor.events.GroupStatusEvent;
import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent;
+import org.apache.stratos.autoscaler.status.checker.StatusChecker;
import org.apache.stratos.messaging.domain.topology.Group;
import org.apache.stratos.messaging.domain.topology.Status;
import org.apache.stratos.messaging.event.application.status.StatusEvent;
@@ -76,16 +77,20 @@ public class GroupMonitor extends Monitor implements EventHandler {
@Override
protected void monitor(MonitorStatusEvent statusEvent) {
+ String id = statusEvent.getId();
ApplicationContext context = this.dependencyTree.
- findApplicationContextWithId(statusEvent.getId());
+ findApplicationContextWithId(id);
if(context.getStatusLifeCycle().isEmpty()) {
try {
//if life cycle is empty, need to start the monitor
boolean startDep = startDependency(statusEvent.getId());
- //updating the life cycle
+ //updating the life cycle and current status
+ context.setStatus(status);
context.addStatusToLIfeCycle(statusEvent.getStatus());
if(!startDep) {
-
+ //Checking in the children whether all are active,
+ // since no dependency found to be started.
+ StatusChecker.getInstance().onChildStatusChange(id, this.component, this.appId);
}
} catch (TopologyInConsistentException e) {
//TODO revert the siblings and notify parent, change a flag for reverting/un-subscription
@@ -103,6 +108,7 @@ public class GroupMonitor extends Monitor implements EventHandler {
public void setParent(Monitor parent) {
this.parent = parent;
+ this.appId = parent.getAppId();
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/dc8067a9/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 bb9c016..78e9793 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
@@ -86,28 +86,28 @@ public class StatusChecker {
}
/**
- * @param groupId
- * @param appId
- */
- public void onGroupStatusChange(final String groupId, final String appId) {
- updateChild(groupId, appId);
- }
-
- /**
- * @param clusterId
- * @param appId
+ * @param idOfChild
+ * @param component
*/
- public void onClusterStatusChange(final String clusterId, final String appId) {
- updateChild(clusterId, appId);
+ public void onChildStatusChange(final String idOfChild, final ParentComponent component,
+ final String appId) {
+ updateChild(idOfChild, component, appId);
}
- private void updateChild(final String clusterId, final String appId) {
+ private void updateChild(final String idOfChild, final ParentComponent component, final String appId) {
Runnable group = new Runnable() {
public void run() {
- Application application = TopologyManager.getTopology().getApplication(appId);
- Map<String, ClusterDataHolder> clusterIds = application.getClusterDataMap();
- Map<String, Group> groups = application.getAliasToGroupMap();
- updateChildStatus(appId, clusterId, groups, clusterIds, application);
+ try {
+ //TODO getting lock
+ TopologyManager.acquireReadLockForApplication(appId);
+ Map<String, ClusterDataHolder> clusterIds = component.getClusterDataMap();
+ Map<String, Group> groups = component.getAliasToGroupMap();
+ updateChildStatus(appId, idOfChild, groups, clusterIds, component);
+ } finally {
+ TopologyManager.releaseReadLockForApplication(appId);
+
+ }
+
}
};
Thread groupThread = new Thread(group);
http://git-wip-us.apache.org/repos/asf/stratos/blob/dc8067a9/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index 5fd74ae..cd8578e 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -336,6 +336,7 @@ public class AutoscalerUtil {
TopologyInConsistentException {
ApplicationMonitor applicationMonitor =
new ApplicationMonitor(application);
+ applicationMonitor.setAppId(application.getUniqueIdentifier());
return applicationMonitor;
}
[2/2] git commit: Merge branch '4.0.0-grouping' of
https://git-wip-us.apache.org/repos/asf/stratos into 4.0.0-grouping
Posted by re...@apache.org.
Merge branch '4.0.0-grouping' of https://git-wip-us.apache.org/repos/asf/stratos into 4.0.0-grouping
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/a13091a6
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/a13091a6
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/a13091a6
Branch: refs/heads/4.0.0-grouping
Commit: a13091a6c017783981d669a3aff56eeb9b61dbc3
Parents: dc8067a cbcb376
Author: reka <rt...@gmail.com>
Authored: Thu Oct 9 15:11:29 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Oct 9 15:11:29 2014 +0530
----------------------------------------------------------------------
.../AutoscalerTopologyEventReceiver.java | 4 +-
.../LoadBalancerTopologyEventReceiver.java | 24 +-
.../ApplicationCreatedMessageProcessor.java | 1 +
.../topology/ClusterActivatedProcessor.java | 4 +-
.../ClusterMaintenanceModeMessageProcessor.java | 4 +-
.../CompleteTopologyMessageProcessor.java | 6 +-
.../stratos/metadataservice/Constants.java | 3 +-
.../definition/CartridgeMetaData.java | 15 +-
.../metadataservice/listener/TopologyAgent.java | 30 ++-
.../listener/TopologyListener.java | 119 +++------
.../registry/CarbonRegistry.java | 192 +++++++++++----
.../metadataservice/registry/DataStore.java | 8 +
.../metadataservice/registry/GRegRegistry.java | 242 ++++++++++++++-----
.../metadataservice/services/MetaDataAdmin.java | 119 ++++++---
.../src/main/conf/metadataservice.xml | 2 +-
.../all/repository/conf/metadataservice.xml | 2 +-
16 files changed, 505 insertions(+), 270 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/a13091a6/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------