Repository: stratos
Updated Branches:
  refs/heads/4.0.0-grouping d3a1e64b5 -> f1ccd9b04


fixing issues while starting group monitors


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/f1ccd9b0
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/f1ccd9b0
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/f1ccd9b0

Branch: refs/heads/4.0.0-grouping
Commit: f1ccd9b049989501d6c1a8c0cb6ff4d5a2bd69ab
Parents: d3a1e64
Author: reka <[email protected]>
Authored: Wed Sep 24 22:57:04 2014 +0530
Committer: reka <[email protected]>
Committed: Wed Sep 24 22:57:04 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/grouping/DependencyBuilder.java  | 30 ++++++--
 .../AutoscalerTopologyEventReceiver.java        | 18 +++--
 .../stratos/autoscaler/monitor/Monitor.java     | 78 +++++++-------------
 .../monitor/application/ApplicationMonitor.java | 35 +++++++++
 .../autoscaler/monitor/group/GroupMonitor.java  | 50 +++++++++++++
 5 files changed, 143 insertions(+), 68 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/f1ccd9b0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/DependencyBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/DependencyBuilder.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/DependencyBuilder.java
index 6b43c37..afec818 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/DependencyBuilder.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/grouping/DependencyBuilder.java
@@ -60,22 +60,36 @@ public class DependencyBuilder {
             }
         }
         //TODO adding all the missed groups or clusters as the top child to 
the list
-        for(String grpAlias: component.getAliasToGroupMap().keySet()) {
-            if(!startup.contains("group." + grpAlias)) {
-                startup.add("group." + grpAlias);
+        //TODO handle by application and group itself groupName and serviceName
+
+        if(component instanceof Application) {
+            for(Group group: component.getAliasToGroupMap().values()) {
+                if(!startup.contains("group." + group.getAlias())) {
+                    startup.add("group." + group.getAlias());
+                }
             }
-        }
 
-        Set<String> cartridgeAliases = component.getClusterDataMap().keySet();
+            Set<String> cartridgeAliases = 
component.getClusterDataMap().keySet();
 
-        for(String carAlias : cartridgeAliases) {
+            for(String carAlias : cartridgeAliases) {
                 if(!startup.contains("cartridge." + carAlias)) {
                     startup.add("cartridge." + carAlias);
 
+                }
             }
-        }
-
+        } else if(component instanceof Group) {
+            for(Group group: component.getAliasToGroupMap().values()) {
+                if(!startup.contains("group." + group.getName())) {
+                    startup.add("group." + group.getName());
+                }
+            }
+            for(ClusterDataHolder dataHolder : 
component.getClusterDataMap().values()) {
+                if(!startup.contains("cartridge." + 
dataHolder.getServiceType())) {
+                    startup.add("cartridge." + dataHolder.getServiceType());
 
+                }
+            }
+        }
         return startup;
 
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/f1ccd9b0/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 f056de2..575e1a5 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
@@ -90,9 +90,9 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
             @Override
             protected void onEvent(Event event) {
                 try {
+                    TopologyManager.acquireReadLock();
                     if(!topologyInitialized) {
                         topologyInitialized = true;
-                        TopologyManager.acquireReadLock();
                         for (Application application : 
TopologyManager.getTopology().getApplications()) {
                             startApplicationMonitor(application);
                         }
@@ -500,9 +500,16 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
             ApplicationMonitor applicationMonitor = null;
             int retries = 5;
             boolean success = false;
-            while (!success && retries != 0) {
+             do {
+                 try {
+                     Thread.sleep(5000);
+                 } catch (InterruptedException e1) {
+                 }
                 try {
+                    long start = System.currentTimeMillis();
                     applicationMonitor = 
AutoscalerUtil.getApplicationMonitor(application);
+                    long end = System.currentTimeMillis();
+                    log.info("***********************time taken to start app 
mon: " + (end - start)/1000);
                     success = true;
                     //TODO exception handling
                 } catch (Exception e) {
@@ -510,13 +517,10 @@ public class AutoscalerTopologyEventReceiver implements 
Runnable {
                                     application.getId();
                     log.debug(msg, e);
                     retries--;
-                    try {
-                        Thread.sleep(5000);
-                    } catch (InterruptedException e1) {
-                    }
+
 
                 }
-            }
+            } while (!success && retries != 0);
 
             if (applicationMonitor == null) {
                 String msg = "Application monitor creation failed, even after 
retrying for 5 times, "

http://git-wip-us.apache.org/repos/asf/stratos/blob/f1ccd9b0/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 9a47600..a584584 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
@@ -60,6 +60,8 @@ public abstract class Monitor extends Observable implements 
Observer {
         startDependency();
     }
 
+    protected abstract void startDependency();
+
 
     public Map<String, GroupMonitor> getGroupMonitors() {
         return groupMonitors;
@@ -112,38 +114,7 @@ public abstract class Monitor extends Observable 
implements Observer {
         this.id = id;
     }
 
-    public void startDependency() {
-        //Need to get the order every time as group/cluster might already been 
started
-        //TODO breadth first search in a tree and find the parallel one
-        //TODO build up the tree with ordered manner
-
-        preOrderTraverse = DependencyBuilder.getStartupOrder(component);
-
-        //start the first dependency
-        if(!preOrderTraverse.isEmpty()) {
-            String dependency = preOrderTraverse.poll();
-            if (dependency.contains("group")) {
-                startGroupMonitor(this, dependency.substring(6), component);
-            } else if (dependency.contains("cartridge")) {
-                ClusterDataHolder clusterDataHolder = 
component.getClusterData(dependency.substring(10));
-                String clusterId = clusterDataHolder.getClusterId();
-                String serviceName = clusterDataHolder.getServiceType();
-                Cluster cluster = null;
-                TopologyManager.acquireReadLock();
-                cluster = 
TopologyManager.getTopology().getService(serviceName).getCluster(clusterId);
-                TopologyManager.releaseReadLock();
-                if (cluster != null) {
-                    startClusterMonitor(cluster);
-                } else {
-                    //TODO throw exception since Topology is inconsistent
-                }
-
-            }
-        } else {
-            //all the groups/clusters have been started and waiting for 
activation
-            log.info("All the groups/clusters of the [group]: " + this.id + " 
have been started.");
-        }
-    }
+    
     protected synchronized void startClusterMonitor(Cluster cluster) {
         Thread th = null;
         if (cluster.isLbCluster()
@@ -156,10 +127,10 @@ public abstract class Monitor extends Observable 
implements Observer {
         }
         if (th != null) {
             th.start();
-            try {
+            /*try {
                 th.join();
             } catch (InterruptedException ignore) {
-            }
+            }*/
 
             if (log.isDebugEnabled()) {
                 log.debug(String
@@ -178,10 +149,10 @@ public abstract class Monitor extends Observable 
implements Observer {
 
         if (th != null) {
             th.start();
-            try {
+            /*try {
                 th.join();
             } catch (InterruptedException ignore) {
-            }
+            }*/
 
             if (log.isDebugEnabled()) {
                 log.debug(String
@@ -203,7 +174,11 @@ public abstract class Monitor extends Observable 
implements Observer {
             ClusterMonitor monitor = null;
             int retries = 5;
             boolean success = false;
-            while (!success && retries != 0) {
+            do {
+                try {
+                    Thread.sleep(5000);
+                } catch (InterruptedException e1) {
+                }
                 try {
                     monitor = AutoscalerUtil.getClusterMonitor(cluster);
                     success = true;
@@ -212,24 +187,19 @@ public abstract class Monitor extends Observable 
implements Observer {
                     String msg = "Cluster monitor creation failed for cluster: 
" + cluster.getClusterId();
                     log.debug(msg, e);
                     retries--;
-                    try {
-                        Thread.sleep(5000);
-                    } catch (InterruptedException e1) {
-                    }
+
 
                 } catch (PartitionValidationException e) {
                     String msg = "Cluster monitor creation failed for cluster: 
" + cluster.getClusterId();
                     log.debug(msg, e);
                     retries--;
-                    try {
-                        Thread.sleep(5000);
-                    } catch (InterruptedException e1) {
-                    }
+
                 }
 
-            }
+            } while (!success && retries != 0);
 
-            if (monitor == null) {
+
+                    if (monitor == null) {
                 String msg = "Cluster monitor creation failed, even after 
retrying for 5 times, "
                         + "for cluster: " + cluster.getClusterId();
                 log.error(msg);
@@ -263,7 +233,12 @@ public abstract class Monitor extends Observable 
implements Observer {
             GroupMonitor monitor = null;
             int retries = 5;
             boolean success = false;
-            while (!success && retries != 0) {
+             do {
+                 try {
+                     Thread.sleep(5000);
+                 } catch (InterruptedException e1) {
+                 }
+
                 try {
                     monitor = 
AutoscalerUtil.getGroupMonitor(group.getGroup(dependency));
                     monitor.addObserver(parent);
@@ -273,13 +248,10 @@ public abstract class Monitor extends Observable 
implements Observer {
                     String msg = "Group monitor creation failed for group: " + 
dependency;
                     log.debug(msg, e);
                     retries--;
-                    try {
-                        Thread.sleep(5000);
-                    } catch (InterruptedException e1) {
-                    }
+
 
                 }
-            }
+            } while (!success && retries != 0);
 
             if (monitor == null) {
                 String msg = "Group monitor creation failed, even after 
retrying for 5 times, "

http://git-wip-us.apache.org/repos/asf/stratos/blob/f1ccd9b0/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 d3c4113..b5dcbdb 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
@@ -56,6 +56,41 @@ public class ApplicationMonitor extends Monitor {
 
     }
 
+    @Override
+    protected void startDependency() {
+        //Need to get the order every time as group/cluster might already been 
started
+        //TODO breadth first search in a tree and find the parallel one
+        //TODO build up the tree with ordered manner
+
+        preOrderTraverse = DependencyBuilder.getStartupOrder(component);
+
+        //start the first dependency
+        if(!preOrderTraverse.isEmpty()) {
+            String dependency = preOrderTraverse.poll();
+            if (dependency.contains("group")) {
+                startGroupMonitor(this, dependency.substring(6), component);
+            } else if (dependency.contains("cartridge")) {
+                ClusterDataHolder clusterDataHolder = 
component.getClusterData(dependency.substring(10));
+                String clusterId = clusterDataHolder.getClusterId();
+                String serviceName = clusterDataHolder.getServiceType();
+                Cluster cluster = null;
+                TopologyManager.acquireReadLock();
+                cluster = 
TopologyManager.getTopology().getService(serviceName).getCluster(clusterId);
+                TopologyManager.releaseReadLock();
+                if (cluster != null) {
+                    startClusterMonitor(cluster);
+                } else {
+                    //TODO throw exception since Topology is inconsistent
+                }
+
+            }
+        } else {
+            //all the groups/clusters have been started and waiting for 
activation
+            log.info("All the groups/clusters of the [group]: " + this.id + " 
have been started.");
+        }
+
+
+    }
 
 
     /**

http://git-wip-us.apache.org/repos/asf/stratos/blob/f1ccd9b0/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 28662c6..2f297bb 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
@@ -18,9 +18,15 @@
  */
 package org.apache.stratos.autoscaler.monitor.group;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.autoscaler.grouping.DependencyBuilder;
 import org.apache.stratos.autoscaler.monitor.Monitor;
+import org.apache.stratos.messaging.domain.topology.Cluster;
+import org.apache.stratos.messaging.domain.topology.ClusterDataHolder;
 import org.apache.stratos.messaging.domain.topology.Group;
 import org.apache.stratos.messaging.event.Event;
+import org.apache.stratos.messaging.message.receiver.topology.TopologyManager;
 
 import java.util.List;
 import java.util.Map;
@@ -30,6 +36,8 @@ import java.util.Map;
  * groups and clusters
  */
 public class GroupMonitor extends Monitor {
+    private static final Log log = LogFactory.getLog(GroupMonitor.class);
+
 
 
 
@@ -39,6 +47,48 @@ public class GroupMonitor extends Monitor {
 
     }
 
+    @Override
+    public void startDependency() {
+        //Need to get the order every time as group/cluster might already been 
started
+        //TODO breadth first search in a tree and find the parallel one
+        //TODO build up the tree with ordered manner
+
+        preOrderTraverse = DependencyBuilder.getStartupOrder(component);
+
+        //start the first dependency
+        if(!preOrderTraverse.isEmpty()) {
+            String dependency = preOrderTraverse.poll();
+            if (dependency.contains("group")) {
+                for(Group group: component.getAliasToGroupMap().values()) {
+                    if(group.getName().equals(dependency.substring(6))) {
+                        startGroupMonitor(this, group.getAlias(), component);
+                    }
+                }
+            } else if (dependency.contains("cartridge")) {
+                for(ClusterDataHolder dataHolder : 
component.getClusterDataMap().values()) {
+                    
if(dataHolder.getServiceType().equals(dependency.substring(10))) {
+                        String clusterId = dataHolder.getClusterId();
+                        String serviceName = dataHolder.getServiceType();
+                        Cluster cluster = null;
+                        TopologyManager.acquireReadLock();
+                        cluster = 
TopologyManager.getTopology().getService(serviceName).getCluster(clusterId);
+                        TopologyManager.releaseReadLock();
+                        if (cluster != null) {
+                            startClusterMonitor(cluster);
+                        } else {
+                            //TODO throw exception since Topology is 
inconsistent
+                        }
+                    }
+                }
+
+
+            }
+        } else {
+            //all the groups/clusters have been started and waiting for 
activation
+            log.info("All the groups/clusters of the [group]: " + this.id + " 
have been started.");
+        }
+    }
+
     //monitor the status of the cluster and the groups
     public void monitor() {
 

Reply via email to