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/11/20 19:21:16 UTC
[1/2] stratos git commit: refatoring monitors
Repository: stratos
Updated Branches:
refs/heads/master c8bba8d01 -> 873f0969a
refatoring monitors
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/50244935
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/50244935
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/50244935
Branch: refs/heads/master
Commit: 50244935dd69570b7a1cd45dc6cda0c711ac63ed
Parents: 8769c4b
Author: reka <rt...@gmail.com>
Authored: Thu Nov 20 23:08:23 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Nov 20 23:08:23 2014 +0530
----------------------------------------------------------------------
.../applications/dependency/DependencyTree.java | 20 --
.../autoscaler/monitor/EventHandler.java | 7 -
.../stratos/autoscaler/monitor/Monitor.java | 115 ++++----
.../monitor/ParentComponentMonitor.java | 257 ++++++++++-------
.../monitor/application/ApplicationMonitor.java | 10 +-
.../monitor/cluster/AbstractClusterMonitor.java | 5 -
.../autoscaler/monitor/group/GroupMonitor.java | 73 ++---
.../status/checker/StatusChecker.java | 286 +++++++------------
8 files changed, 320 insertions(+), 453 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/50244935/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
index c8fe80e..d0e35a7 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/dependency/DependencyTree.java
@@ -35,10 +35,6 @@ public class DependencyTree {
private List<ApplicationChildContext> scalingDependencyApplicationContextList;
- private boolean started;
-
- private boolean terminated;
-
private TerminationBehavior terminationBehavior;
private boolean startupOder;
@@ -276,20 +272,4 @@ public class DependencyTree {
this.id = id;
}
- public boolean isStartupOder() {
- return startupOder;
- }
-
- public void setStartupOder(boolean startupOder) {
- this.startupOder = startupOder;
- }
-
- public boolean isReverseStartupOrder() {
- return reverseStartupOrder;
- }
-
- public void setReverseStartupOrder(boolean reverseStartupOrder) {
- this.reverseStartupOrder = reverseStartupOrder;
- }
-
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/50244935/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
index 141e6f9..13fd6b0 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/EventHandler.java
@@ -55,13 +55,6 @@ public interface EventHandler {
public abstract void onParentScalingEvent(MonitorScalingEvent scalingEvent);
/**
- * Triggered when termination decision is made.
- *
- * @param terminateAllEvent
- */
- public abstract void onEvent(MonitorTerminateAllEvent terminateAllEvent);
-
- /**
* Triggered when scaling decision is made.
*
* @param scalingEvent
http://git-wip-us.apache.org/repos/asf/stratos/blob/50244935/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 bb3ba2d..989ba21 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
@@ -18,9 +18,6 @@
*/
package org.apache.stratos.autoscaler.monitor;
-import java.util.List;
-import java.util.Map;
-
/**
* Abstract class for the monitoring functionality in autoscaler.
*/
@@ -31,107 +28,99 @@ public abstract class Monitor implements EventHandler {
protected String appId;
//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> aliasToActiveMonitorsMap;
- //monitors map, stopped monitors
- protected List<String> inactiveMonitorsList;
-
- protected List<String> terminatingMonitorsList;
-
- //flag will get set to true in MonitorTerminateAllEvent when termination of
- // this monitor decided by its parent
- protected boolean terminateChildren = false;
-
+ //has startup dependents
protected boolean hasStartupDependents;
-
+ //has scaling dependents
protected boolean hasScalingDependents;
+ /**
+ * Return the id of the monitor
+ *
+ * @return id
+ */
public String getId() {
return id;
}
+ /**
+ * Set the id of the monitor
+ *
+ * @param id
+ */
public void setId(String id) {
this.id = id;
}
+ /**
+ * To get the appId of the monitor
+ *
+ * @return app id
+ */
public String getAppId() {
return appId;
}
+ /**
+ * To set the app id of the monitor
+ *
+ * @param appId
+ */
public void setAppId(String appId) {
this.appId = appId;
}
- public Map<String, Monitor> getAliasToActiveMonitorsMap() {
- return aliasToActiveMonitorsMap;
- }
-
- public void setAliasToActiveMonitorsMap(Map<String, Monitor> aliasToActiveMonitorsMap) {
- this.aliasToActiveMonitorsMap = aliasToActiveMonitorsMap;
- }
-
+ /**
+ * To get the parent of the monitor
+ *
+ * @return the parent
+ */
public ParentComponentMonitor getParent() {
return parent;
}
+ /**
+ * To set the parent of the monitor
+ *
+ * @param parent
+ */
public void setParent(ParentComponentMonitor parent) {
this.parent = parent;
this.appId = parent.getAppId();
}
- public boolean hasActiveMonitors() {
- boolean hasMonitor = false;
- if ((this.aliasToActiveMonitorsMap != null && !this.aliasToActiveMonitorsMap.isEmpty())) {
- hasMonitor = true;
- }
- return hasMonitor;
- }
-
- public boolean hasMonitors() {
-
- return this.aliasToActiveMonitorsMap != null;
- }
-
+ /**
+ * Return whether this monitor has startup dependencies
+ *
+ * @return hasStartupDependents
+ */
public boolean hasStartupDependents() {
return hasStartupDependents;
}
+ /**
+ * Return whether this monitor has scaling dependencies
+ *
+ * @return startup dependencies exist or not
+ */
public boolean hasScalingDependents() {
return hasScalingDependents;
}
+ /**
+ * To set whether monitor has any startup dependencies
+ *
+ * @param hasDependent
+ */
public void setHasStartupDependents(boolean hasDependent) {
this.hasStartupDependents = hasDependent;
}
+ /**
+ * To set whether monitor has any scaling dependencies
+ *
+ * @param hasDependent
+ */
public void setHasScalingDependents(boolean hasDependent) {
this.hasScalingDependents = hasDependent;
}
-
- public boolean hasIndependentChild() {
- boolean hasInDepChild = false;
- for (Monitor monitor : this.aliasToActiveMonitorsMap.values()) {
- if (!monitor.hasStartupDependents()) {
- hasInDepChild = true;
- break;
- }
- }
- return hasInDepChild;
- }
-
- public List<String> getAliasToInActiveMonitorsMap() {
- return this.inactiveMonitorsList;
- }
-
- public void setAliasToInActiveMonitorsMap(List<String> inactiveMonitorsList) {
- this.inactiveMonitorsList = inactiveMonitorsList;
- }
-
- public List<String> getTerminatingMonitorsList() {
- return terminatingMonitorsList;
- }
-
- public void setTerminatingMonitorsList(List<String> terminatingMonitorsList) {
- this.terminatingMonitorsList = terminatingMonitorsList;
- }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/50244935/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 320773d..bc33c55 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
@@ -24,7 +24,6 @@ import org.apache.stratos.autoscaler.applications.ApplicationHolder;
import org.apache.stratos.autoscaler.applications.dependency.DependencyBuilder;
import org.apache.stratos.autoscaler.applications.dependency.DependencyTree;
import org.apache.stratos.autoscaler.applications.dependency.context.ApplicationChildContext;
-import org.apache.stratos.autoscaler.applications.pojo.ApplicationClusterContext;
import org.apache.stratos.autoscaler.applications.topic.ApplicationBuilder;
import org.apache.stratos.autoscaler.event.publisher.ClusterStatusEventPublisher;
import org.apache.stratos.autoscaler.exception.DependencyBuilderException;
@@ -43,6 +42,7 @@ import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* Monitor is to monitor it's child monitors and
@@ -53,9 +53,14 @@ public abstract class ParentComponentMonitor extends Monitor {
//The monitors dependency tree with all the start-able/kill-able dependencies
protected DependencyTree startupDependencyTree;
-
//The monitors dependency tree with all the scaling dependencies
protected DependencyTree scalingDependencyTree;
+ //monitors map, key=GroupAlias/clusterId and value=GroupMonitor/AbstractClusterMonitor
+ protected Map<String, Monitor> aliasToActiveMonitorsMap;
+ //monitors map, stopped monitors
+ protected List<String> inactiveMonitorsList;
+ //terminating monitors list
+ protected List<String> terminatingMonitorsList;
public ParentComponentMonitor(ParentComponent component) throws DependencyBuilderException {
aliasToActiveMonitorsMap = new HashMap<String, Monitor>();
@@ -65,12 +70,76 @@ public abstract class ParentComponentMonitor extends Monitor {
this.id = component.getUniqueIdentifier();
//Building the startup dependencies for this monitor within the immediate children
startupDependencyTree = DependencyBuilder.getInstance().buildDependency(component);
-
//Building the scaling dependencies for this monitor within the immediate children
scalingDependencyTree = DependencyBuilder.getInstance().buildDependency(component);
}
/**
+ * This will start the parallel dependencies at once from the top level.
+ * it will get invoked when the monitor starts up only.
+ */
+ public void startDependency() throws TopologyInConsistentException {
+ //start the first dependency
+ List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
+ getStarAbleDependencies();
+ startDependency(applicationContexts);
+
+ }
+
+ /**
+ * This will get invoked based on the activation event of its one of the child
+ *
+ * @param id alias/clusterId of which receive the activated event
+ */
+ public boolean startDependency(String id) throws TopologyInConsistentException {
+ List<ApplicationChildContext> applicationContexts = this.startupDependencyTree
+ .getStarAbleDependencies(id);
+ return startDependency(applicationContexts);
+ }
+
+ /**
+ * This will start the parallel dependencies at once from the top level
+ * by traversing to find the terminated dependencies.
+ * it will get invoked when start a child monitor on termination of a sub tree
+ */
+ public void startDependencyOnTermination() throws TopologyInConsistentException {
+ //start the first dependency which went to terminated
+ List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
+ getStarAbleDependenciesByTermination();
+ startDependency(applicationContexts);
+
+ }
+
+
+ /**
+ * To start the dependency of the given application contexts
+ *
+ * @param applicationContexts the found applicationContexts to be started
+ */
+ private boolean startDependency(List<ApplicationChildContext> applicationContexts)
+ throws TopologyInConsistentException {
+ if (applicationContexts != null && applicationContexts.isEmpty()) {
+ //all the groups/clusters have been started and waiting for activation
+ log.info("There is no child found for the [group]: " + this.id);
+ return false;
+
+ }
+ for (ApplicationChildContext context : applicationContexts) {
+ if (log.isDebugEnabled()) {
+ log.debug("Dependency check for the Group " + context.getId() + " started");
+ }
+ if (!this.aliasToActiveMonitorsMap.containsKey(context.getId())) {
+ //to avoid if it is already started
+ context.setTerminated(false);
+ startMonitor(this, context);
+ }
+ }
+
+ return true;
+
+ }
+
+ /**
* This will start the child monitors based on the active of siblings according to start up order
*
* @param eventId parent id of the event which received
@@ -101,24 +170,6 @@ public abstract class ParentComponentMonitor extends Monitor {
}
- // move to inactive monitors list to use in the Terminated event
- protected synchronized void markMonitorAsInactive(String monitorKey) {
-
- if (!this.inactiveMonitorsList.contains(monitorKey)) {
- this.inactiveMonitorsList.add(monitorKey);
- }
- }
-
- // move to inactive monitors list to use in the Terminated event
- protected synchronized void markMonitorAsTerminating(String monitorKey) {
- if (!this.terminatingMonitorsList.contains(monitorKey)) {
- if (this.inactiveMonitorsList.contains(monitorKey)) {
- this.inactiveMonitorsList.remove(monitorKey);
- }
- this.terminatingMonitorsList.add(monitorKey);
- }
- }
-
/**
* @param eventId
*/
@@ -163,7 +214,7 @@ public abstract class ParentComponentMonitor extends Monitor {
get(terminationContext.getId());
//start to kill it
if (monitor != null) {
- if (monitor.hasActiveMonitors()) {
+ if (monitor instanceof GroupMonitor) {
//it is a group, so not sending terminating as it can be in inActive. If group needs terminating,
//it will be handled by the terminating case of its children
if (terminateAll || !notifier.equals(monitor.getId())) {
@@ -189,6 +240,7 @@ public abstract class ParentComponentMonitor extends Monitor {
/**
* Act upon one of its children got terminated
+ *
* @param eventId id of the notifier
*/
@@ -196,28 +248,26 @@ public abstract class ParentComponentMonitor extends Monitor {
List<ApplicationChildContext> terminationList;
boolean allDependentTerminated = false;
- ApplicationChildContext context = this.startupDependencyTree.findApplicationContextWithIdInPrimaryTree(eventId);
+ ApplicationChildContext context = this.startupDependencyTree.
+ findApplicationContextWithIdInPrimaryTree(eventId);
context.setTerminated(true);
-
terminationList = this.startupDependencyTree.getTerminationDependencies(eventId);
-
-
- /**
- * Make sure that all the dependents have been terminated properly to start the recovery
- */
+ //Make sure that all the dependents have been terminated properly to start the recovery
if (terminationList != null) {
allDependentTerminated = allDependentTerminated(terminationList);
}
- List<ApplicationChildContext> parentContexts = this.startupDependencyTree.findAllParentContextWithId(eventId);
+ List<ApplicationChildContext> parentContexts = this.startupDependencyTree.
+ findAllParentContextWithId(eventId);
boolean parentsTerminated = false;
boolean allParentsActive = false;
+ //make sure all the parent contexts got terminated or whether all of them are active
if (parentContexts != null) {
parentsTerminated = allParentTerminated(parentContexts);
allParentsActive = allParentActive(parentContexts);
}
- if (( terminationList.isEmpty() || allDependentTerminated) &&
+ if ((terminationList.isEmpty() || allDependentTerminated) &&
(parentContexts.isEmpty() || parentsTerminated || allParentsActive)) {
//Find the non existent monitor by traversing dependency tree
try {
@@ -228,8 +278,7 @@ public abstract class ParentComponentMonitor extends Monitor {
}
} else {
StatusChecker.getInstance().onChildStatusChange(eventId, this.id, this.appId);
- log.info("" +
- "Checking the status of group/application as no dependent found...");
+ log.info("Checking the status of group/application as no dependent found...");
}
@@ -299,17 +348,17 @@ public abstract class ParentComponentMonitor extends Monitor {
} finally {
ApplicationHolder.releaseReadLock();
}
- } else if(monitor instanceof AbstractClusterMonitor) {
- AbstractClusterMonitor monitor1 = (AbstractClusterMonitor)monitor;
+ } else if (monitor instanceof AbstractClusterMonitor) {
+ AbstractClusterMonitor monitor1 = (AbstractClusterMonitor) monitor;
TopologyManager.acquireReadLockForCluster(monitor1.getServiceId(),
- monitor1.getClusterId());
+ monitor1.getClusterId());
try {
- if(monitor1.getStatus() == ClusterStatus.Active) {
+ if (monitor1.getStatus() == ClusterStatus.Active) {
parentsActive = true;
}
} finally {
TopologyManager.releaseReadLockForCluster(monitor1.getServiceId(),
- monitor1.getClusterId());
+ monitor1.getClusterId());
}
}
@@ -318,83 +367,22 @@ public abstract class ParentComponentMonitor extends Monitor {
return parentsActive;
}
- /**
- * This will start the parallel dependencies at once from the top level.
- * it will get invoked when the monitor starts up only.
- * //TODO restarting the whole group
- */
- public void startDependency() throws TopologyInConsistentException {
- //start the first dependency
- List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.getStarAbleDependencies();
- startDependency(applicationContexts);
-
- }
-
- /**
- * This will start the parallel dependencies at once from the top level
- * by traversing to find the terminated dependencies.
- * it will get invoked when start a child monitor on termination of a sub tree
- */
- public void startDependencyOnTermination() throws TopologyInConsistentException {
- //start the first dependency which went to terminated
- List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.
- getStarAbleDependenciesByTermination();
- startDependency(applicationContexts);
-
- }
+ // move to inactive monitors list to use in the Terminated event
+ protected synchronized void markMonitorAsInactive(String monitorKey) {
- /**
- * This will get invoked based on the activation event of its one of the child
- *
- * @param id alias/clusterId of which receive the activated event
- */
- public boolean startDependency(String id) throws TopologyInConsistentException {
- List<ApplicationChildContext> applicationContexts = this.startupDependencyTree.getStarAbleDependencies(id);
- return startDependency(applicationContexts);
+ if (!this.inactiveMonitorsList.contains(monitorKey)) {
+ this.inactiveMonitorsList.add(monitorKey);
+ }
}
- /**
- * To start the dependency of the given application contexts
- *
- * @param applicationContexts the found applicationContexts to be started
- */
- private boolean startDependency(List<ApplicationChildContext> applicationContexts)
- throws TopologyInConsistentException {
- if (applicationContexts != null && applicationContexts.isEmpty()) {
- //all the groups/clusters have been started and waiting for activation
- log.info("There is no child found for the [group]: " + this.id);
- return false;
-
- }
- for (ApplicationChildContext context : applicationContexts) {
- if (log.isDebugEnabled()) {
- log.debug("Dependency check for the Group " + context.getId() + " started");
- }
- if (!this.aliasToActiveMonitorsMap.containsKey(context.getId())) {
- //to avoid if it is already started
- context.setTerminated(false);
- startMonitor(this, context);
+ // move to inactive monitors list to use in the Terminated event
+ protected synchronized void markMonitorAsTerminating(String monitorKey) {
+ if (!this.terminatingMonitorsList.contains(monitorKey)) {
+ if (this.inactiveMonitorsList.contains(monitorKey)) {
+ this.inactiveMonitorsList.remove(monitorKey);
}
+ this.terminatingMonitorsList.add(monitorKey);
}
-
- return true;
-
- }
-
- public String getId() {
- return this.id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public String getAppId() {
- return appId;
- }
-
- public void setAppId(String appId) {
- this.appId = appId;
}
protected synchronized void startMonitor(ParentComponentMonitor parent, ApplicationChildContext context) {
@@ -481,4 +469,53 @@ public abstract class ParentComponentMonitor extends Monitor {
}
}
+ public Map<String, Monitor> getAliasToActiveMonitorsMap() {
+ return aliasToActiveMonitorsMap;
+ }
+
+ public void setAliasToActiveMonitorsMap(Map<String, Monitor> aliasToActiveMonitorsMap) {
+ this.aliasToActiveMonitorsMap = aliasToActiveMonitorsMap;
+ }
+
+ public boolean hasActiveMonitors() {
+ boolean hasMonitor = false;
+ if ((this.aliasToActiveMonitorsMap != null && !this.aliasToActiveMonitorsMap.isEmpty())) {
+ hasMonitor = true;
+ }
+ return hasMonitor;
+ }
+
+ public boolean hasMonitors() {
+
+ return this.aliasToActiveMonitorsMap != null;
+ }
+
+ public boolean hasIndependentChild() {
+ boolean hasInDepChild = false;
+ for (Monitor monitor : this.aliasToActiveMonitorsMap.values()) {
+ if (!monitor.hasStartupDependents()) {
+ hasInDepChild = true;
+ break;
+ }
+ }
+ return hasInDepChild;
+ }
+
+ public List<String> getAliasToInActiveMonitorsMap() {
+ return this.inactiveMonitorsList;
+ }
+
+ public void setAliasToInActiveMonitorsMap(List<String> inactiveMonitorsList) {
+ this.inactiveMonitorsList = inactiveMonitorsList;
+ }
+
+ public List<String> getTerminatingMonitorsList() {
+ return terminatingMonitorsList;
+ }
+
+ public void setTerminatingMonitorsList(List<String> terminatingMonitorsList) {
+ this.terminatingMonitorsList = terminatingMonitorsList;
+ }
+
+
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/stratos/blob/50244935/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 f8b463e..f230918 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
@@ -123,8 +123,9 @@ public class ApplicationMonitor extends ParentComponentMonitor {
return monitor;
} else {
// check if this Group has nested sub Groups. If so, traverse them as well
- if (monitor.getAliasToActiveMonitorsMap() != null) {
- return findGroupMonitor(id, monitor.getAliasToActiveMonitorsMap().values());
+ if (monitor instanceof ParentComponentMonitor) {
+ return findGroupMonitor(id, ((ParentComponentMonitor)monitor).
+ getAliasToActiveMonitorsMap().values());
}
}
}
@@ -200,11 +201,6 @@ public class ApplicationMonitor extends ParentComponentMonitor {
}
@Override
- public void onEvent(MonitorTerminateAllEvent terminateAllEvent) {
-
- }
-
- @Override
public void onEvent(MonitorScalingEvent scalingEvent) {
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/50244935/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
index a201a44..6101082 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/AbstractClusterMonitor.java
@@ -313,11 +313,6 @@ public abstract class AbstractClusterMonitor extends Monitor implements Runnable
}
@Override
- public void onEvent(MonitorTerminateAllEvent terminateAllEvent) {
-
- }
-
- @Override
public void onEvent(MonitorScalingEvent scalingEvent) {
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/50244935/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 a0f0c8e..81c5b3c 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
@@ -67,6 +67,28 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler
startDependency();
}
+ /**
+ * Will set the status of the monitor based on Topology Group status/child status like scaling
+ *
+ * @param status status of the group
+ */
+ public void setStatus(GroupStatus status) {
+
+ //if(this.status != status) {
+ this.status = status;
+ //notifying the parent
+ if (status == GroupStatus.Inactive && !this.hasStartupDependents) {
+ log.info("[Group] " + this.id + "is not notifying the parent, " +
+ "since it is identified as the independent unit");
+ } else {
+ // notify parent
+ log.info("[Group] " + this.id + "is notifying the [parent] " + this.parent.getId());
+ MonitorStatusEventBuilder.handleGroupStatusEvent(this.parent, this.status, this.id);
+ }
+ //notify the children about the state change
+ MonitorStatusEventBuilder.notifyChildren(this, new GroupStatusEvent(status, getId()));
+ }
+
@Override
public void onChildStatusEvent(MonitorStatusEvent statusEvent) {
String id = statusEvent.getId();
@@ -151,63 +173,12 @@ public class GroupMonitor extends ParentComponentMonitor implements EventHandler
}
@Override
- public void onEvent(MonitorTerminateAllEvent terminateAllEvent) {
- this.terminateChildren = true;
-
- }
-
- @Override
public void onEvent(MonitorScalingEvent scalingEvent) {
}
- public ParentComponentMonitor getParent() {
- return parent;
- }
-
- public void setParent(ParentComponentMonitor parent) {
- this.parent = parent;
- }
-
- public String getAppId() {
- return appId;
- }
-
- public void setAppId(String appId) {
- this.appId = appId;
- }
-
- private boolean isParent(String id) {
- if (this.parent.getId().equals(id)) {
- return true;
- } else {
- return false;
- }
- }
-
public GroupStatus getStatus() {
return status;
}
- /**
- * Will set the status of the monitor based on Topology Group status/child status like scaling
- *
- * @param status
- */
- public void setStatus(GroupStatus status) {
-
- //if(this.status != status) {
- this.status = status;
- //notifying the parent
- if (status == GroupStatus.Inactive && !this.hasStartupDependents) {
- log.info("[Group] " + this.id + "is not notifying the parent, " +
- "since it is identified as the independent unit");
- } else {
- // notify parent
- log.info("[Group] " + this.id + "is notifying the [parent] " + this.parent.getId());
- MonitorStatusEventBuilder.handleGroupStatusEvent(this.parent, this.status, this.id);
- }
- //notify the children about the state change
- MonitorStatusEventBuilder.notifyChildren(this, new GroupStatusEvent(status, getId()));
- }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/50244935/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 b5729c2..c1dc547 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
@@ -49,7 +49,6 @@ public class StatusChecker {
}
public static StatusChecker getInstance() {
- //TODO synchronized
return Holder.INSTANCE;
}
@@ -110,7 +109,6 @@ public class StatusChecker {
cluster = service.getCluster(monitor.getClusterId());
if (cluster != null) {
try {
-
ApplicationHolder.acquireReadLock();
Application application = ApplicationHolder.getApplications().getApplication(appId);
//if all members removed from the cluster and cluster is in terminating,
@@ -188,6 +186,12 @@ public class StatusChecker {
return clusterActive;
}
+ /**
+ * Find out whether cluster monitor has any non terminated members
+ *
+ * @param monitor the cluster monitor
+ * @return whether has members or not
+ */
private boolean clusterMonitorHasMembers(VMClusterMonitor monitor) {
boolean hasMember = false;
for (NetworkPartitionContext networkPartitionContext : monitor.getNetworkPartitionCtxts().values()) {
@@ -244,6 +248,14 @@ public class StatusChecker {
groupThread.start();
}
+ /**
+ * This will calculate whether all the minimum of partition in a cluster satisfy in order
+ * to decide on the cluster status.
+ *
+ * @param monitor Cluster monitor of which the status needs to be calculated
+ * @param partitionId partition which got the faulty member
+ * @return whether cluster inActive or not
+ */
private boolean getClusterInactive(VMClusterMonitor monitor, String partitionId) {
boolean clusterInActive = false;
for (NetworkPartitionContext networkPartitionContext : monitor.getNetworkPartitionCtxts().values()) {
@@ -260,85 +272,52 @@ public class StatusChecker {
}
/**
- * @param idOfChild
- * @param groupId
- * @param appId
+ * This will use to calculate whether all children of a particular component is active by traversing Top
+ *
+ * @param appId application id
+ * @param idOfComponent id of the component to which calculate the status
+ * @param idOfChild children of the component as groups
*/
- public void onChildStatusChange(final String idOfChild, final String groupId,
- final String appId) {
- updateChild(idOfChild, groupId, appId);
- }
-
- private void updateChild(final String idOfChild, final String groupId, final String appId) {
- Runnable group = new Runnable() {
- public void run() {
- try {
- ApplicationHolder.acquireWriteLock();
- ParentComponent component;
- if (groupId.equals(appId)) {
- //it is an application
- component = ApplicationHolder.getApplications().
- getApplication(appId);
- } else {
- //it is a group
- component = ApplicationHolder.getApplications().
- getApplication(appId).getGroupRecursively(groupId);
- }
- Map<String, ClusterDataHolder> clusterIds = component.getClusterDataMap();
- Map<String, Group> groups = component.getAliasToGroupMap();
- updateChildStatus(appId, idOfChild, groups, clusterIds, component);
- } finally {
- ApplicationHolder.releaseWriteLock();
+ public void onChildStatusChange(String idOfChild, String idOfComponent, String appId) {
+ ParentComponent component;
+ Map<String, Group> groups;
+ Map<String, ClusterDataHolder> clusterData;
- }
+ if (log.isInfoEnabled()) {
+ log.info("StatusChecker calculating the status for the group [ " + idOfChild + " ]");
+ }
+ try {
+ ApplicationHolder.acquireWriteLock();
+ if (idOfComponent.equals(appId)) {
+ //it is an application
+ component = ApplicationHolder.getApplications().
+ getApplication(appId);
+ } else {
+ //it is a group
+ component = ApplicationHolder.getApplications().
+ getApplication(appId).getGroupRecursively(idOfComponent);
}
- };
- Thread groupThread = new Thread(group);
- groupThread.start();
- }
+ clusterData = component.getClusterDataMap();
+ groups = component.getAliasToGroupMap();
- /**
- * This will use to calculate whether all children of a particular component is active by travesing Top
- *
- * @param appId
- * @param id
- * @param groups
- * @param clusterData
- * @param parent
- * @return
- */
- private boolean updateChildStatus(String appId, String id, Map<String, Group> groups,
- Map<String, ClusterDataHolder> clusterData, ParentComponent parent) {
- boolean childFound = false;
- boolean clusterFound = false;
-
- for (ClusterDataHolder clusterDataHolder : clusterData.values()) {
- if (clusterDataHolder.getClusterId().equals(id)) {
- clusterFound = true;
- }
- }
- log.info("StatusChecker calculating the status for the group [ " + id + " ]");
- if (clusterFound || groups.containsKey(id)) {
- childFound = true;
- Application application = ApplicationHolder.getApplications().getApplication(appId);
if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Active) ||
clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Active) ||
getAllClusterInSameState(clusterData, ClusterStatus.Active) &&
getAllGroupInSameState(groups, GroupStatus.Active)) {
//send activation event
- if (parent instanceof Application) {
+ if (component instanceof Application) {
//send application activated event
- if (((Application) parent).getStatus() != ApplicationStatus.Active) {
+ if (((Application) component).getStatus() != ApplicationStatus.Active) {
log.info("sending app activate: " + appId);
ApplicationBuilder.handleApplicationActivatedEvent(appId);
}
- } else if (parent instanceof Group) {
+ } else if (component instanceof Group) {
//send activation to the parent
- if (((Group) parent).getStatus() != GroupStatus.Active) {
- log.info("sending group activate: " + parent.getUniqueIdentifier());
- ApplicationBuilder.handleGroupActivatedEvent(appId, parent.getUniqueIdentifier());
+ if (((Group) component).getStatus() != GroupStatus.Active) {
+ log.info("sending group activate: " + component.getUniqueIdentifier());
+ ApplicationBuilder.handleGroupActivatedEvent(appId, component.getUniqueIdentifier());
}
}
} else if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Terminated) ||
@@ -346,73 +325,70 @@ public class StatusChecker {
getAllClusterInSameState(clusterData, ClusterStatus.Terminated) &&
getAllGroupInSameState(groups, GroupStatus.Terminated)) {
//send the terminated event
- if (parent instanceof Application) {
- //validating the life cycle
- //if (application.getStatus() != ApplicationStatus.Terminated) {
- log.info("sending app terminated: " + appId);
- ApplicationBuilder.handleApplicationTerminatedEvent(appId);
-// } else {
-// log.info("[Application] " + appId + " is in the [status] " +
-// application.getStatus().toString() + ". Hence not sending terminated event");
-// }
- //StatusEventPublisher.sendApp(appId);
- } else if (parent instanceof Group) {
+ if (component instanceof Application) {
+ log.info("sending app terminated: " + appId);
+ ApplicationBuilder.handleApplicationTerminatedEvent(appId);
+ } else if (component instanceof Group) {
//send activation to the parent
- if (((Group) parent).getStatus() != GroupStatus.Terminated) {
- log.info("sending group terminated : " + parent.getUniqueIdentifier());
- ApplicationBuilder.handleGroupTerminatedEvent(appId, parent.getUniqueIdentifier());
+ if (((Group) component).getStatus() != GroupStatus.Terminated) {
+ log.info("sending group terminated : " + component.getUniqueIdentifier());
+ ApplicationBuilder.handleGroupTerminatedEvent(appId, component.getUniqueIdentifier());
}
}
} else if (groups.isEmpty() && getAllClusterInSameState(clusterData, ClusterStatus.Created) ||
clusterData.isEmpty() && getAllGroupInSameState(groups, GroupStatus.Created) ||
getAllClusterInSameState(clusterData, ClusterStatus.Created) &&
getAllGroupInSameState(groups, GroupStatus.Created)) {
- if (parent instanceof Application) {
+ if (component instanceof Application) {
log.info("[Application] " + appId + "couldn't change to Created, since it is" +
- "already in " + application.getStatus().toString());
- } else if (parent instanceof Group) {
+ "already in " + ((Application) component).getStatus().toString());
+ } else if (component instanceof Group) {
//send activation to the parent
- if (((Group) parent).getStatus() != GroupStatus.Created) {
- log.info("sending group created : " + parent.getUniqueIdentifier());
- ApplicationBuilder.handleGroupCreatedEvent(appId, parent.getUniqueIdentifier());
+ if (((Group) component).getStatus() != GroupStatus.Created) {
+ log.info("sending group created : " + component.getUniqueIdentifier());
+ ApplicationBuilder.handleGroupCreatedEvent(appId, component.getUniqueIdentifier());
}
}
} else if (groups.isEmpty() && getAllClusterInactive(clusterData) ||
clusterData.isEmpty() && getAllGroupInActive(groups) ||
getAllClusterInactive(clusterData) || getAllGroupInActive(groups)) {
//send the in activation event
- if (parent instanceof Application) {
+ if (component instanceof Application) {
//send application activated event
log.warn("Application can't be in in-active : " + appId);
//StatusEventPublisher.sendApplicationInactivatedEvent(appId);
- } else if (parent instanceof Group) {
+ } else if (component instanceof Group) {
//send activation to the parent
- if (((Group) parent).getStatus() != GroupStatus.Inactive) {
- log.info("sending group in-active: " + parent.getUniqueIdentifier());
- ApplicationBuilder.handleGroupInActivateEvent(appId, parent.getUniqueIdentifier());
+ if (((Group) component).getStatus() != GroupStatus.Inactive) {
+ log.info("sending group in-active: " + component.getUniqueIdentifier());
+ ApplicationBuilder.handleGroupInActivateEvent(appId, component.getUniqueIdentifier());
}
}
} else {
- if (parent instanceof Application) {
+ if (component instanceof Application) {
//send application activated event
log.warn("Application can't be in in-active : " + appId);
//StatusEventPublisher.sendApplicationInactivatedEvent(appId);
- } else if (parent instanceof Group) {
+ } else if (component instanceof Group) {
//send activation to the parent
- if (((Group) parent).getStatus() != GroupStatus.Inactive) {
- log.info("sending group in-active: " + parent.getUniqueIdentifier());
- ApplicationBuilder.handleGroupInActivateEvent(appId, parent.getUniqueIdentifier());
+ if (((Group) component).getStatus() != GroupStatus.Inactive) {
+ log.info("sending group in-active: " + component.getUniqueIdentifier());
+ ApplicationBuilder.handleGroupInActivateEvent(appId, component.getUniqueIdentifier());
}
}
}
- return childFound;
- } else {
- log.warn("There is no child found in the [group/cluster] " + id + " found in the " +
- "[component]" + parent.getUniqueIdentifier());
+ } finally {
+ ApplicationHolder.releaseWriteLock();
+
}
- return childFound;
}
+ /**
+ * Find out whether all the any group is inActive
+ *
+ * @param groups groups of a group/application
+ * @return whether inActive or not
+ */
private boolean getAllGroupInActive(Map<String, Group> groups) {
boolean groupStat = false;
for (Group group : groups.values()) {
@@ -426,6 +402,13 @@ public class StatusChecker {
return groupStat;
}
+ /**
+ * Find out whether all the groups of a group in the same state or not
+ *
+ * @param groups groups of a group/application
+ * @param status the state to check in all groups
+ * @return whether groups in the given state or not
+ */
private boolean getAllGroupInSameState(Map<String, Group> groups, GroupStatus status) {
boolean groupStat = false;
for (Group group : groups.values()) {
@@ -440,6 +423,12 @@ public class StatusChecker {
}
+ /**
+ * Find out whether any of the clusters of a group in the InActive state
+ *
+ * @param clusterData clusters of the group
+ * @return whether inActive or not
+ */
private boolean getAllClusterInactive(Map<String, ClusterDataHolder> clusterData) {
boolean clusterStat = false;
for (Map.Entry<String, ClusterDataHolder> clusterDataHolderEntry : clusterData.entrySet()) {
@@ -456,6 +445,13 @@ public class StatusChecker {
return clusterStat;
}
+ /**
+ * Find out whether all the clusters of a group are in the same state
+ *
+ * @param clusterData clusters of the group
+ * @param status the status to check of the group
+ * @return whether all groups in the same state or not
+ */
private boolean getAllClusterInSameState(Map<String, ClusterDataHolder> clusterData,
ClusterStatus status) {
boolean clusterStat = false;
@@ -480,96 +476,6 @@ public class StatusChecker {
return clusterStat;
}
- /*private GroupStatus getGroupStatus(Map<String, Group> groups) {
- GroupStatus status = null;
- boolean groupActive = true;
- boolean groupTerminated = true;
- boolean groupCreated = true;
-
- for (Group group : groups.values()) {
- if (group.getStatus() == GroupStatus.Active) {
- groupActive = groupActive && true;
- groupTerminated = false;
- groupCreated = false;
- } else if (group.getStatus() == GroupStatus.Inactive) {
- status = GroupStatus.Inactive;
- groupActive = false;
- groupTerminated = false;
- groupCreated = false;
- break;
- } else if (group.getStatus() == GroupStatus.Terminated) {
- groupActive = false;
- groupCreated = false;
- groupTerminated = groupTerminated && true;
- } else if (group.getStatus() == GroupStatus.Created) {
- groupActive = false;
- groupTerminated = false;
- groupCreated = groupCreated && true;
- }
- }
-
- if (groups == null || groups != null && groups.isEmpty()) {
- groupActive = false;
- groupTerminated = false;
- groupCreated = false;
- }
-
- if (groupActive) {
- status = GroupStatus.Active;
- } else if (groupTerminated) {
- status = GroupStatus.Terminated;
- } else if (groupCreated) {
- status = GroupStatus.Created;
- }
- return status;
-
- }
-
- private ClusterStatus getClusterStatus(Map<String, ClusterDataHolder> clusterData) {
- ClusterStatus status = null;
- boolean clusterActive = true;
- boolean clusterTerminated = true;
- boolean clusterCreated = true;
- for (Map.Entry<String, ClusterDataHolder> clusterDataHolderEntry : clusterData.entrySet()) {
- Service service = TopologyManager.getTopology().getService(clusterDataHolderEntry.getValue().getServiceType());
- Cluster cluster = service.getCluster(clusterDataHolderEntry.getValue().getClusterId());
- if (cluster.getStatus() == ClusterStatus.Active) {
- clusterActive = clusterActive && true;
- clusterTerminated = false;
- clusterCreated = false;
- } else if (cluster.getStatus() == ClusterStatus.Inactive) {
- status = ClusterStatus.Inactive;
- clusterActive = false;
- clusterTerminated = false;
- clusterCreated = false;
- break;
- } else if (cluster.getStatus() == ClusterStatus.Terminated) {
- clusterActive = false;
- clusterCreated = false;
- clusterTerminated = clusterTerminated && true;
- } else if (cluster.getStatus() == ClusterStatus.Created) {
- clusterActive = false;
- clusterTerminated = false;
- clusterCreated = clusterCreated && true;
- }
- }
-
- if (clusterData == null || clusterData != null && clusterData.isEmpty()) {
- clusterActive = false;
- clusterTerminated = false;
- clusterCreated = false;
- }
-
- if (clusterActive) {
- status = ClusterStatus.Active;
- } else if (clusterTerminated) {
- status = ClusterStatus.Terminated;
- } else if (clusterCreated) {
- status = ClusterStatus.Created;
- }
- return status;
- }*/
-
private static class Holder {
private static final StatusChecker INSTANCE = new StatusChecker();
}
[2/2] stratos git commit: fixing merge issue
Posted by re...@apache.org.
fixing merge issue
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/873f0969
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/873f0969
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/873f0969
Branch: refs/heads/master
Commit: 873f0969a8faebb18bed98929028cfa96f0090ef
Parents: 5024493 c8bba8d
Author: reka <rt...@gmail.com>
Authored: Thu Nov 20 23:50:57 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Thu Nov 20 23:50:57 2014 +0530
----------------------------------------------------------------------
.../dependency/DependencyBuilder.java | 2 +-
.../context/ApplicationChildContext.java | 10 +-
.../parser/DefaultApplicationParser.java | 61 +-
.../stratos/autoscaler/monitor/Monitor.java | 10 +-
.../application/ApplicationMonitorFactory.java | 6 +-
.../cluster/VMServiceClusterMonitor.java | 2 +-
.../autoscaler/monitor/group/GroupMonitor.java | 6 +-
.../stratos/autoscaler/pojo/Dependencies.java | 4 +-
.../stratos/autoscaler/pojo/ServiceGroup.java | 10 +
.../console/applications_form.jag | 5 +-
.../console/configure_form.jag | 11 +
.../console/controllers/rest/rest_calls.jag | 4 +
.../console/errorhtml/error-404.html | 16 +-
.../console/errorhtml/error.html | 18 +-
.../console/themes/theme0/css/custom.css | 2 +-
.../theme0/partials/applications_form.hbs | 11 +
.../themes/theme0/partials/configure_form.hbs | 8 +-
.../themes/theme0/renderers/configure_form.js | 1 +
.../definitions/ServiceGroupDefinition.java | 10 +
.../deployer/DefaultServiceGroupDeployer.java | 2 +-
.../domain/applications/ClusterDataHolder.java | 26 -
.../messaging/domain/applications/Group.java | 36 +-
.../applications/GroupInstanceContext.java | 55 -
.../cartridgeagent/cartridgeagent/agent.conf | 2 -
.../config/cartridgeagentconfiguration.py | 8 +
.../cartridgeagent/modules/databridge/agent.py | 6 +-
.../exception/parameternotfoundexception.py | 1 +
.../exception/thriftreceiverofflineexception.py | 35 +
.../modules/healthstatspublisher/healthstats.py | 20 +-
.../publisher/cartridgeagentpublisher.py | 2 +-
.../src/main/webapp/api/WEB-INF/cxf-servlet.xml | 2 +
.../src/main/resources/AutoScalerService.wsdl | 1584 +++++++++---------
32 files changed, 1008 insertions(+), 968 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/873f0969/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
----------------------------------------------------------------------
diff --cc components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/Monitor.java
index 989ba21,6880e77..30b015d
--- 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
@@@ -28,16 -31,21 +28,16 @@@ public abstract class Monitor implement
protected String appId;
//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> aliasToActiveMonitorsMap;
- //monitors map, stopped monitors
- protected List<String> inactiveMonitorsList;
-
- protected List<String> terminatingMonitorsList;
-
- //flag will get set to true in MonitorTerminateAllEvent when termination of
- // this monitor decided by its parent
- protected boolean terminateChildren = false;
-
+ //has startup dependents
protected boolean hasStartupDependents;
-
+ //has scaling dependents
- protected boolean hasScalingDependents;
+ protected boolean isGroupScalingEnabled;
+ /**
+ * Return the id of the monitor
+ *
+ * @return id
+ */
public String getId() {
return id;
}
@@@ -97,30 -96,42 +97,30 @@@
return hasStartupDependents;
}
+ /**
+ * Return whether this monitor has scaling dependencies
+ *
+ * @return startup dependencies exist or not
+ */
- public boolean hasScalingDependents() {
- return hasScalingDependents;
+ public boolean isGroupScalingEnabled() {
+ return isGroupScalingEnabled;
}
+ /**
+ * To set whether monitor has any startup dependencies
+ *
+ * @param hasDependent
+ */
public void setHasStartupDependents(boolean hasDependent) {
this.hasStartupDependents = hasDependent;
}
+ /**
+ * To set whether monitor has any scaling dependencies
+ *
+ * @param hasDependent
+ */
- public void setHasScalingDependents(boolean hasDependent) {
- this.hasScalingDependents = hasDependent;
+ public void setGroupScalingEnabled(boolean hasDependent) {
+ this.isGroupScalingEnabled = hasDependent;
}
-
- public boolean hasIndependentChild() {
- boolean hasInDepChild = false;
- for (Monitor monitor : this.aliasToActiveMonitorsMap.values()) {
- if (!monitor.hasStartupDependents()) {
- hasInDepChild = true;
- break;
- }
- }
- return hasInDepChild;
- }
-
- public List<String> getAliasToInActiveMonitorsMap() {
- return this.inactiveMonitorsList;
- }
-
- public void setAliasToInActiveMonitorsMap(List<String> inactiveMonitorsList) {
- this.inactiveMonitorsList = inactiveMonitorsList;
- }
-
- public List<String> getTerminatingMonitorsList() {
- return terminatingMonitorsList;
- }
-
- public void setTerminatingMonitorsList(List<String> terminatingMonitorsList) {
- this.terminatingMonitorsList = terminatingMonitorsList;
- }
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/873f0969/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/group/GroupMonitor.java
----------------------------------------------------------------------