You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ud...@apache.org on 2014/12/18 07:38:22 UTC
[20/50] [abbrv] stratos git commit: Make the Group monitor as a
schedular executor service
Make the Group monitor as a schedular executor service
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/eaa92e9f
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/eaa92e9f
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/eaa92e9f
Branch: refs/heads/master
Commit: eaa92e9fe5b8c53a7157655a3fc59f5825718c30
Parents: caa24ff
Author: gayan <ga...@puppet.gayan.org>
Authored: Tue Dec 16 13:08:43 2014 +0530
Committer: Udara Liyanage <ud...@wso2.com>
Committed: Thu Dec 18 12:06:57 2014 +0530
----------------------------------------------------------------------
.../autoscaler/monitor/MonitorFactory.java | 1 +
.../monitor/component/GroupMonitor.java | 74 +++++++++++++-------
2 files changed, 48 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/eaa92e9f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
index 3291ea9..12e0794 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/MonitorFactory.java
@@ -125,6 +125,7 @@ public class MonitorFactory {
} else {
groupMonitor.setHasStartupDependents(false);
}
+ groupMonitor.startScheduler();
}
} finally {
ApplicationHolder.releaseReadLock();
http://git-wip-us.apache.org/repos/asf/stratos/blob/eaa92e9f/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
index f69a05a..43a385b 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/component/GroupMonitor.java
@@ -48,10 +48,10 @@ import org.apache.stratos.messaging.domain.instance.Instance;
import org.apache.stratos.messaging.domain.topology.ClusterStatus;
import org.apache.stratos.messaging.domain.topology.lifecycle.LifeCycleState;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
/**
* This is GroupMonitor to monitor the group which consists of
@@ -66,11 +66,16 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
private boolean groupScalingEnabled;
//Network partition contexts
private Map<String, GroupLevelNetworkPartitionContext> networkPartitionCtxts;
+
+ private Map<String, ScalingEvent> mapScalingEvent;
+
//Indicates whether the monitor is destroyed or not
private boolean isDestroyed;
//Monitoring interval of the monitor
private int monitoringIntervalMilliseconds = 60000; //TODO get this from config file
+ private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+
/**
* Constructor of GroupMonitor
*
@@ -85,38 +90,50 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
this.appId = appId;
networkPartitionCtxts = new HashMap<String, GroupLevelNetworkPartitionContext>();
this.hasScalingDependents = hasScalingDependents;
- }
+ }
@Override
public void run() {
- while (!isDestroyed) {
- try {
+ try {
- if (log.isDebugEnabled()) {
- log.debug("Group monitor is running : " + this.toString());
- }
- monitor();
- } catch (Exception e) {
- log.error("Group monitor failed : " + this.toString(), e);
- }
- try {
- Thread.sleep(monitoringIntervalMilliseconds);
- } catch (InterruptedException ignore) {
- }
- }
+ if (log.isDebugEnabled()) {
+ log.debug("Group monitor is running : " + this.toString());
+ }
+ monitor();
+ } catch (Exception e) {
+ log.error("Group monitor failed : " + this.toString(), e);
+ }
}
- public void monitor() {
+ public void startScheduler() {
+ scheduler.scheduleAtFixedRate(this, 0, monitoringIntervalMilliseconds, TimeUnit.MILLISECONDS);
+ }
- Runnable monitoringRunnable = new Runnable() {
- @Override
- public void run() {
- //TODO implement group monitor
- }
- };
- monitoringRunnable.run();
+ protected void stopScheduler() {
+ scheduler.shutdownNow();
}
+ public void monitor() {
+
+ Runnable monitoringRunnable = new Runnable() {
+ @Override
+ public void run() {
+ float finalFactor = 1;
+ if (log.isInfoEnabled()) {
+ log.info("Group monitor is running====== : " + this.toString());
+ }
+
+ Collection<ScalingEvent> events = mapScalingEvent.values();
+ for (ScalingEvent event : events) {
+ log.info("Monitor Scaling Event"+event.getId());
+ }
+ //TODO : call the on demand group scaling
+ mapScalingEvent.clear();
+ }
+ };
+ monitoringRunnable.run();
+ }
+
/**
* Will set the status of the monitor based on Topology Group status/child status like scaling
*
@@ -309,6 +326,9 @@ public class GroupMonitor extends ParentComponentMonitor implements Runnable {
}
}
}
+ if (scalingEvent.getId().equals(appId)) {
+ mapScalingEvent.put(scalingEvent.getInstanceId(), scalingEvent);
+ }
}
@Override