Updated Branches: refs/heads/master 26be402c7 -> 442be445f
Removing the active member when instance is terminated by fault member event Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/442be445 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/442be445 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/442be445 Branch: refs/heads/master Commit: 442be445f74e5bc14af6bbe1beaf12bb9ffc57a4 Parents: 26be402 Author: Lahiru Sandaruwan <[email protected]> Authored: Wed Jan 15 00:14:12 2014 +0530 Committer: Lahiru Sandaruwan <[email protected]> Committed: Wed Jan 15 00:14:12 2014 +0530 ---------------------------------------------------------------------- .../apache/stratos/autoscaler/PartitionContext.java | 15 +++++++++++++++ .../health/AutoscalerHealthStatReceiver.java | 8 ++++++++ .../topology/AutoscalerTopologyReceiver.java | 14 +++++++++----- 3 files changed, 32 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/442be445/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java index 3ea8d80..36c3e97 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/PartitionContext.java @@ -329,6 +329,21 @@ public class PartitionContext implements Serializable{ return activeMembers.size() + pendingMembers.size(); } + public void removeActiveMemberById(String memberId) { + + synchronized (activeMembers) { + + for (Iterator<MemberContext> iterator = activeMembers.listIterator(); iterator.hasNext();) { + String currentMemberId = ((MemberContext) iterator).getMemberId(); + if(memberId.equals(currentMemberId)){ + + iterator.remove(); + break; + } + } + } + } + private class PendingMemberWatcher implements Runnable { private PartitionContext ctxt; http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/442be445/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/AutoscalerHealthStatReceiver.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/AutoscalerHealthStatReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/AutoscalerHealthStatReceiver.java index c2f1097..aee9d31 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/AutoscalerHealthStatReceiver.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/AutoscalerHealthStatReceiver.java @@ -380,6 +380,10 @@ public class AutoscalerHealthStatReceiver implements Runnable { log.error("Member id not found in received message"); } } else { + + if (log.isDebugEnabled()) { + log.debug(String.format("Member fault event: [member] %s ", e.getMemberId())); + } handleMemberFaultEvent(clusterId, memberId); } } @@ -734,12 +738,16 @@ public class AutoscalerHealthStatReceiver implements Runnable { CloudControllerClient ccClient = CloudControllerClient.getInstance(); ccClient.terminate(memberId); + // start a new member in the same Partition String partitionId = monitor.getPartitionOfMember(memberId); Partition partition = monitor.getDeploymentPolicy().getPartitionById(partitionId); PartitionContext partitionCtxt = nwPartitionCtxt.getPartitionCtxt(partitionId); + + partitionCtxt.removeActiveMemberById(memberId); String lbClusterId = AutoscalerRuleEvaluator.getLbClusterId(partitionCtxt, nwPartitionCtxt); + partitionCtxt.addPendingMember(ccClient.spawnAnInstance(partition, clusterId, lbClusterId, nwPartitionCtxt.getId())); if (log.isInfoEnabled()) { log.info(String.format("Instance spawned for fault member: [partition] %s [cluster] %s [lb cluster] %s ", http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/442be445/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 9906a96..7162826 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 @@ -105,6 +105,10 @@ public class AutoscalerTopologyReceiver implements Runnable { } th.start(); + if(log.isDebugEnabled()) { + log.debug(String.format("Cluster monitor thread has been started successfully: [cluster] %s " + , cluster.getClusterId())); + } } } } @@ -157,7 +161,7 @@ public class AutoscalerTopologyReceiver implements Runnable { // runTerminateAllRule(monitor); monitor.destroy(); if(log.isDebugEnabled()) { - log.debug(String.format("Cluster monitor has been removed: [cluster] %s ", clusterId)); + log.debug(String.format("Cluster monitor has been removed successfully: [cluster] %s ", clusterId)); } } finally { @@ -206,7 +210,7 @@ public class AutoscalerTopologyReceiver implements Runnable { log.error(String.format("Member is not available in termination pending list: [member] %s", e.getMemberId())); } } else if(log.isInfoEnabled()){ - log.info(String.format("Member stat context has been removed: [member] %s", e.getMemberId())); + log.info(String.format("Member stat context has been removed successfully: [member] %s", e.getMemberId())); } // partitionContext.decrementCurrentActiveMemberCount(1); @@ -243,7 +247,7 @@ public class AutoscalerTopologyReceiver implements Runnable { } partitionContext.addMemberStatsContext(new MemberStatsContext(memberId)); if(log.isInfoEnabled()){ - log.info(String.format("Member stat context has been added: [member] %s", memberId)); + log.info(String.format("Member stat context has been added successfully: [member] %s", memberId)); } // partitionContext.incrementCurrentActiveMemberCount(1); partitionContext.movePendingMemberToActiveMembers(memberId); @@ -304,7 +308,7 @@ public class AutoscalerTopologyReceiver implements Runnable { th.start(); AutoscalerContext.getInstance().addLbMonitor(monitor); if(log.isInfoEnabled()){ - log.info(String.format("LB Cluster monitor has been added: [cluster] %s", + log.info(String.format("LB Cluster monitor has been added successfully: [cluster] %s", cluster.getClusterId())); } } @@ -337,7 +341,7 @@ public class AutoscalerTopologyReceiver implements Runnable { th.start(); AutoscalerContext.getInstance().addMonitor(monitor); if(log.isInfoEnabled()){ - log.info(String.format("Cluster monitor has been added: [cluster] %s", + log.info(String.format("Cluster monitor has been added successfully: [cluster] %s", cluster.getClusterId())); } }
