Repository: incubator-stratos Updated Branches: refs/heads/master 24cc743d4 -> db1d1e4f6
should wait till the cluster monitor added to the datastructures, before creating a new cluster monitor Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/db1d1e4f Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/db1d1e4f Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/db1d1e4f Branch: refs/heads/master Commit: db1d1e4f6c177b18cf21571d86e3bb577ed5f49f Parents: 24cc743 Author: Nirmal Fernando <[email protected]> Authored: Sat Apr 5 12:28:04 2014 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Sat Apr 5 12:28:04 2014 +0530 ---------------------------------------------------------------------- .../topology/AutoscalerTopologyReceiver.java | 57 ++++++++++---------- 1 file changed, 30 insertions(+), 27 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/db1d1e4f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java index 2062268..fd1fe8e 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyReceiver.java @@ -101,26 +101,7 @@ public class AutoscalerTopologyReceiver implements Runnable { TopologyManager.acquireReadLock(); for(Service service : TopologyManager.getTopology().getServices()) { for (Cluster cluster : service.getClusters()) { - Thread th = null; - if (cluster.isLbCluster() - && !AutoscalerContext.getInstance() - .lbMonitorExist( - cluster.getClusterId())) { - th = new Thread(new LBClusterMonitorAdder( - cluster)); - } else if (!AutoscalerContext.getInstance() - .monitorExist(cluster.getClusterId())) { - th = new Thread( - new ClusterMonitorAdder(cluster)); - } - if (th != null) { - th.start(); - if (log.isDebugEnabled()) { - log.debug(String - .format("Cluster monitor thread has been started successfully: [cluster] %s ", - cluster.getClusterId())); - } - } + startClusterMonitor(cluster); } } } @@ -129,6 +110,7 @@ public class AutoscalerTopologyReceiver implements Runnable { } } + }); processorChain.addEventListener(new ClusterCreatedEventListener() { @@ -140,13 +122,7 @@ public class AutoscalerTopologyReceiver implements Runnable { TopologyManager.acquireReadLock(); Service service = TopologyManager.getTopology().getService(e.getServiceName()); Cluster cluster = service.getCluster(e.getClusterId()); - if (cluster.isLbCluster()) { - Thread th = new Thread(new LBClusterMonitorAdder(cluster)); - th.start(); - } else { - Thread th = new Thread(new ClusterMonitorAdder(cluster)); - th.start(); - } + startClusterMonitor(cluster); } finally { TopologyManager.releaseReadLock(); } @@ -486,4 +462,31 @@ public class AutoscalerTopologyReceiver implements Runnable { topologyReceiver.terminate(); terminated = true; } + + protected synchronized void startClusterMonitor(Cluster cluster) { + Thread th = null; + if (cluster.isLbCluster() + && !AutoscalerContext.getInstance() + .lbMonitorExist( + cluster.getClusterId())) { + th = new Thread(new LBClusterMonitorAdder( + cluster)); + } else if (!AutoscalerContext.getInstance() + .monitorExist(cluster.getClusterId())) { + th = new Thread( + new ClusterMonitorAdder(cluster)); + } + if (th != null) { + th.start(); + try { + th.join(); + } catch (InterruptedException ignore) {} + + if (log.isDebugEnabled()) { + log.debug(String + .format("Cluster monitor thread has been started successfully: [cluster] %s ", + cluster.getClusterId())); + } + } + } }
