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() {
-
-
-    }
 }

Reply via email to