You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by re...@apache.org on 2014/12/09 19:27:19 UTC
[2/2] stratos git commit: fixing concurrent modification issue and
destroying cluster monitor upon the termianted event
fixing concurrent modification issue and destroying cluster monitor upon the termianted event
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/9157af8d
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/9157af8d
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/9157af8d
Branch: refs/heads/4.1.0-test
Commit: 9157af8d17c9350ad37aea0f7caa573c1218003f
Parents: 5d6b680
Author: reka <rt...@gmail.com>
Authored: Tue Dec 9 23:57:06 2014 +0530
Committer: reka <rt...@gmail.com>
Committed: Tue Dec 9 23:57:06 2014 +0530
----------------------------------------------------------------------
.../AutoscalerTopologyEventReceiver.java | 5 +++-
.../stratos/autoscaler/monitor/Monitor.java | 4 ++--
.../monitor/cluster/VMClusterMonitor.java | 24 ++++++++++++++------
3 files changed, 23 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/9157af8d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
index 1b92a1d..ddbe1a6 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/event/receiver/topology/AutoscalerTopologyEventReceiver.java
@@ -283,13 +283,16 @@ public class AutoscalerTopologyEventReceiver {
AbstractClusterMonitor monitor;
ApplicationMonitor appMonitor = null;
monitor = asCtx.getClusterMonitor(clusterId);
+ appMonitor = AutoscalerContext.getInstance().
+ getAppMonitor(clusterTerminatedEvent.getAppId());
if (null == monitor) {
if (log.isDebugEnabled()) {
log.debug(String.format("A cluster monitor is not found in autoscaler context "
+ "[cluster] %s", clusterId));
}
// if the cluster monitor is null, assume that its termianted
- appMonitor = AutoscalerContext.getInstance().getAppMonitor(clusterTerminatedEvent.getAppId());
+ appMonitor = AutoscalerContext.getInstance().
+ getAppMonitor(clusterTerminatedEvent.getAppId());
if (appMonitor != null) {
appMonitor.onChildStatusEvent(
new ClusterStatusEvent(ClusterStatus.Terminated,
http://git-wip-us.apache.org/repos/asf/stratos/blob/9157af8d/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 7f17a07..5656b19 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
@@ -190,9 +190,9 @@ public abstract class Monitor implements EventHandler {
*/
public boolean hasInstance() {
if (this.instanceIdToInstanceMap.isEmpty()) {
- return true;
- } else {
return false;
+ } else {
+ return true;
}
}
}
http://git-wip-us.apache.org/repos/asf/stratos/blob/9157af8d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
index 103dbe5..459eb7c 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/VMClusterMonitor.java
@@ -1040,20 +1040,30 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
partitionContext.getPartitionId() + " ]");
// }
// need to terminate active, pending and obsolete members
-
+ //FIXME to traverse concurrent
// active members
+ List<String> activeMembers = new ArrayList<String>();
Iterator<MemberContext> iterator = partitionContext.getActiveMembers().listIterator();
- while(iterator.hasNext()) {
+ while (iterator.hasNext()) {
MemberContext activeMemberCtxt = iterator.next();
- String memberId = activeMemberCtxt.getMemberId();
+ activeMembers.add(activeMemberCtxt.getMemberId());
+
+ }
+ for (String memberId : activeMembers) {
log.info("Sending instance cleanup for the active member [member id] " + memberId);
partitionContext.moveActiveMemberToTerminationPendingMembers(memberId);
InstanceNotificationPublisher.getInstance().
sendInstanceCleanupEventForMember(memberId);
}
-
Iterator<MemberContext> pendingIterator = partitionContext.getPendingMembers().listIterator();
- while(pendingIterator.hasNext()) {
+
+ List<String> pendingMembers = new ArrayList<String>();
+ while (pendingIterator.hasNext()) {
+ MemberContext activeMemberCtxt = pendingIterator.next();
+ pendingMembers.add(activeMemberCtxt.getMemberId());
+
+ }
+ for (String memberId : pendingMembers) {
MemberContext pendingMemberCtxt = pendingIterator.next();
// pending members
String memeberId = pendingMemberCtxt.getMemberId();
@@ -1170,7 +1180,7 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
members.add(activeMember.getMemberId());
}
- for(String memberId: members) {
+ for (String memberId : members) {
partitionContext.moveActiveMemberToTerminationPendingMembers(
memberId);
}
@@ -1181,7 +1191,7 @@ public class VMClusterMonitor extends AbstractClusterMonitor {
MemberContext activeMember = pendingIterator.next();
pendingMembers.add(activeMember.getMemberId());
}
- for(String memberId: members) {
+ for (String memberId : members) {
// pending members
log.info("Moving pending member [member id] " + memberId +
" obsolete list");