Repository: stratos Updated Branches: refs/heads/4.0.0-grouping 67b00b93d -> 4e64f18bd
adding kill behavior to the dependency tree Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/4e64f18b Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/4e64f18b Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/4e64f18b Branch: refs/heads/4.0.0-grouping Commit: 4e64f18bdb861939a2eb49845e2ac480f137139f Parents: 67b00b9 Author: reka <[email protected]> Authored: Mon Oct 6 11:47:25 2014 +0530 Committer: reka <[email protected]> Committed: Mon Oct 6 11:47:25 2014 +0530 ---------------------------------------------------------------------- .../grouping/dependency/DependencyBuilder.java | 2 +- .../grouping/dependency/DependencyTree.java | 38 ++++++++- .../stratos/autoscaler/monitor/Monitor.java | 84 +++++++++++--------- .../monitor/application/ApplicationMonitor.java | 7 -- .../autoscaler/monitor/group/GroupMonitor.java | 9 --- 5 files changed, 80 insertions(+), 60 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/4e64f18b/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 7d8ff2d..6d1eee3 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 @@ -142,7 +142,7 @@ public class DependencyBuilder { } } - return null; + return dependencyTree; } /*public static Queue<String> getStartupOrder(ParentBehavior component) { http://git-wip-us.apache.org/repos/asf/stratos/blob/4e64f18b/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 1c6b28f..c17aef0 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 @@ -21,6 +21,7 @@ package org.apache.stratos.autoscaler.grouping.dependency; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.grouping.dependency.context.ApplicationContext; +import org.apache.stratos.messaging.domain.topology.Application; import org.apache.stratos.messaging.domain.topology.Status; import java.util.ArrayList; @@ -51,6 +52,9 @@ public class DependencyTree { public DependencyTree(String id) { applicationContextList = new ArrayList<ApplicationContext>(); this.setId(id); + if(log.isDebugEnabled()) { + log.debug("Starting a dependency tree for the [group/application] " + id); + } } public List<ApplicationContext> getApplicationContextList() { @@ -120,16 +124,42 @@ public class DependencyTree { * When one group/cluster terminates/in_maintenance, need to consider about other * dependencies * @param id the alias/id of group/cluster in which terminated event received - * @return + * @return all the kill able children dependencies */ public List<ApplicationContext> getKillDependencies(String id) { - ApplicationContext applicationContext = findApplicationContextWithId(id); + List<ApplicationContext> allChildrenOfAppContext = new ArrayList<ApplicationContext>(); + if(killDependent) { - return applicationContext.getApplicationContextList(); + //finding the ApplicationContext of the given id + ApplicationContext applicationContext = findApplicationContextWithId(id); + //finding all the children of the found application context + findAllChildrenOfAppContext(applicationContext.getApplicationContextList(), + allChildrenOfAppContext); + return allChildrenOfAppContext; + } else if(killAll) { + //killall will be killed by the monitor from it's list. + findAllChildrenOfAppContext(this.applicationContextList, + allChildrenOfAppContext); + } - return null; + //return empty for the kill-none case + return allChildrenOfAppContext; } + /** + * + * @param applicationContexts + * @param childContexts + * @return + */ + public List<ApplicationContext> findAllChildrenOfAppContext(List<ApplicationContext> applicationContexts, + List<ApplicationContext> childContexts) { + for(ApplicationContext context : applicationContexts) { + childContexts.add(context); + findAllChildrenOfAppContext(context.getApplicationContextList(), childContexts); + } + return childContexts; + } public boolean isKillAll() { http://git-wip-us.apache.org/repos/asf/stratos/blob/4e64f18b/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 122c815..a75df54 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 @@ -36,7 +36,9 @@ 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; /** * Monitor is to monitor it's child monitors and @@ -55,8 +57,6 @@ public abstract class Monitor extends Observable implements Observer { private Map<String, ScheduledExecutorService> adderIdToExecutorServiceMap; - //protected Queue<String> preOrderTraverse; - protected DependencyTree dependencyTree; protected ParentBehavior component; @@ -73,29 +73,25 @@ public abstract class Monitor extends Observable implements Observer { dependencyTree = DependencyBuilder.getInstance().buildDependency(component); } - public abstract void monitor(); - - public Map<String, GroupMonitor> getAliasToGroupMonitorsMap() { - return aliasToGroupMonitorsMap; - } - - public String getId() { - return this.id; - } - - public void setId(String id) { - this.id = id; - } + /** + * 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() { //start the first dependency - List<ApplicationContext> applicationContexts = dependencyTree.getStarAbleDependencies(); + List<ApplicationContext> applicationContexts = this.dependencyTree.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 void startDependency(String id) { - List<ApplicationContext> applicationContexts = dependencyTree.getStarAbleDependencies(id); + List<ApplicationContext> applicationContexts = this.dependencyTree.getStarAbleDependencies(id); startDependency(applicationContexts); } @@ -139,26 +135,22 @@ public abstract class Monitor extends Observable implements Observer { } protected synchronized void startClusterMonitor(Monitor parent, Cluster cluster) { - Thread th = null; + ScheduledExecutorService adder = Executors.newSingleThreadScheduledExecutor(); if (cluster.isLbCluster() && !this.clusterIdToClusterMonitorsMap.containsKey(cluster.getClusterId())) { - th = new Thread(new LBClusterMonitorAdder( - cluster)); + adder.scheduleAtFixedRate(new LBClusterMonitorAdder( + cluster), 5, 5, TimeUnit.SECONDS); } else if (!cluster.isLbCluster() && !this.clusterIdToClusterMonitorsMap.containsKey(cluster.getClusterId())) { - th = new Thread( - new ClusterMonitorAdder(parent, cluster)); + adder.scheduleAtFixedRate(new ClusterMonitorAdder(parent, cluster), 5, 5, TimeUnit.SECONDS); + if (log.isDebugEnabled()) { log.debug(String .format("Cluster monitor Adder has been added: [cluster] %s ", cluster.getClusterId())); } } - if (th != null) { - th.start(); - /*try { - th.join(); - } catch (InterruptedException ignore) { - }*/ + if (adder != null) { + adderIdToExecutorServiceMap.put(cluster.getClusterId(), adder); log.info(String .format("Cluster monitor thread has been started successfully: [cluster] %s ", cluster.getClusterId())); @@ -166,25 +158,26 @@ public abstract class Monitor extends Observable implements Observer { } protected synchronized void startGroupMonitor(Monitor parent, String dependency, ParentBehavior component) { - Thread th = null; + ScheduledExecutorService adder = Executors.newSingleThreadScheduledExecutor(); + if (!this.aliasToGroupMonitorsMap.containsKey(dependency)) { if (log.isDebugEnabled()) { log.debug(String .format("Group monitor Adder has been added: [group] %s ", dependency)); } - th = new Thread( - new GroupMonitorAdder(parent, dependency, component)); + adder.scheduleAtFixedRate(new GroupMonitorAdder(parent, dependency, component), 5, 5, TimeUnit.SECONDS); + } - if (th != null) { - th.start(); + if (adder != null) { /*try { - th.join(); - } catch (InterruptedException ignore) { + adder.awaitTermination(30, TimeUnit.SECONDS); + } catch (InterruptedException e) { + e.printStackTrace(); }*/ - - log.info(String + adderIdToExecutorServiceMap.put(((Group)component).getAlias(), adder); + log.info(String .format("Group monitor thread has been started successfully: [group] %s ", dependency)); } @@ -216,10 +209,10 @@ public abstract class Monitor extends Observable implements Observer { 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] " @@ -372,6 +365,19 @@ public abstract class Monitor extends Observable implements Observer { } } + + public Map<String, GroupMonitor> getAliasToGroupMonitorsMap() { + return aliasToGroupMonitorsMap; + } + + public String getId() { + return this.id; + } + + public void setId(String id) { + this.id = id; + } + public void setAliasToGroupMonitorsMap(Map<String, GroupMonitor> aliasToGroupMonitorsMap) { this.aliasToGroupMonitorsMap = aliasToGroupMonitorsMap; } http://git-wip-us.apache.org/repos/asf/stratos/blob/4e64f18b/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 eeef1d4..d3b9faa 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 @@ -170,13 +170,6 @@ public class ApplicationMonitor extends Monitor { } - @Override - public void monitor() { - startDependency(); - - //evaluate dependency - } - public void setStatus(Status status) { log.info(String.format("[ApplicationMonitor] %s " + "state changes from %s to %s", id, this.status, status)); http://git-wip-us.apache.org/repos/asf/stratos/blob/4e64f18b/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 376d5d4..eae7ed6 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 @@ -71,13 +71,4 @@ public class GroupMonitor extends Monitor { setChanged(); notifyObservers(new MonitorStatusEvent(status, id)); } - - @Override - - - //monitor the status of the cluster and the groups - public void monitor() { - - - } }
