Repository: incubator-stratos Updated Branches: refs/heads/master 5db10fe85 -> 302244d28
listening on memeber meaintenance mode in AS Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/302244d2 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/302244d2 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/302244d2 Branch: refs/heads/master Commit: 302244d28d693f8abdcd491e1dd7b43ee59f77bb Parents: 5db10fe Author: rekathiru <[email protected]> Authored: Fri Feb 21 18:59:13 2014 +0530 Committer: rekathiru <[email protected]> Committed: Fri Feb 21 18:59:13 2014 +0530 ---------------------------------------------------------------------- .../topology/AutoscalerTopologyReceiver.java | 52 +++++++++++++++----- .../autoscaler/rule/RuleTasksDelegator.java | 2 +- 2 files changed, 42 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/302244d2/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 ffbbbb3..fae2307 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 @@ -19,15 +19,9 @@ package org.apache.stratos.autoscaler.message.receiver.topology; -import java.util.List; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.autoscaler.AutoscalerContext; -import org.apache.stratos.autoscaler.MemberStatsContext; -import org.apache.stratos.autoscaler.NetworkPartitionContext; -import org.apache.stratos.autoscaler.NetworkPartitionLbHolder; -import org.apache.stratos.autoscaler.PartitionContext; +import org.apache.stratos.autoscaler.*; import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy; import org.apache.stratos.autoscaler.exception.PartitionValidationException; import org.apache.stratos.autoscaler.exception.PolicyValidationException; @@ -41,10 +35,7 @@ import org.apache.stratos.autoscaler.util.AutoscalerUtil; import org.apache.stratos.messaging.domain.topology.Cluster; import org.apache.stratos.messaging.domain.topology.Service; import org.apache.stratos.messaging.event.Event; -import org.apache.stratos.messaging.event.topology.ClusterCreatedEvent; -import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent; -import org.apache.stratos.messaging.event.topology.MemberActivatedEvent; -import org.apache.stratos.messaging.event.topology.MemberTerminatedEvent; +import org.apache.stratos.messaging.event.topology.*; import org.apache.stratos.messaging.listener.topology.*; import org.apache.stratos.messaging.message.processor.topology.TopologyMessageProcessorChain; import org.apache.stratos.messaging.message.receiver.topology.TopologyEventMessageDelegator; @@ -53,6 +44,8 @@ import org.apache.stratos.messaging.message.receiver.topology.TopologyReceiver; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.runtime.rule.FactHandle; +import java.util.List; + /** * Load balancer topology receiver. */ @@ -306,6 +299,43 @@ public class AutoscalerTopologyReceiver implements Runnable { } } }); + + + processorChain.addEventListener(new MemberMaintenanceListener() { + @Override + protected void onEvent(Event event) { + + try { + TopologyManager.acquireReadLock(); + + MemberMaintenanceModeEvent e = (MemberMaintenanceModeEvent)event; + String memberId = e.getMemberId(); + String partitionId = e.getPartitionId(); + String networkPartitionId = e.getNetworkPartitionId(); + + PartitionContext partitionContext; + String clusterId = e.getClusterId(); + AbstractMonitor monitor; + + if(AutoscalerContext.getInstance().moniterExist(clusterId)) { + monitor = AutoscalerContext.getInstance().getMonitor(clusterId); + partitionContext = monitor.getNetworkPartitionCtxt(networkPartitionId).getPartitionCtxt(partitionId); + } else { + monitor = AutoscalerContext.getInstance().getLBMonitor(clusterId); + partitionContext = monitor.getNetworkPartitionCtxt(networkPartitionId).getPartitionCtxt(partitionId); + } + partitionContext.addMemberStatsContext(new MemberStatsContext(memberId)); + if(log.isDebugEnabled()){ + log.debug(String.format("Member has been moved as pending termination: [member] %s", memberId)); + } + partitionContext.moveActiveMemberToTerminationPendingMembers(memberId); + + } + finally{ + TopologyManager.releaseReadLock(); + } + } + }); processorChain.addEventListener(new ServiceRemovedEventListener() { @Override http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/302244d2/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java index 9f8262d..c086b35 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/rule/RuleTasksDelegator.java @@ -130,7 +130,7 @@ public class RuleTasksDelegator { public void terminateObsoleteInstance(String memberId) { try { - CloudControllerClient.getInstance().terminate(memberId); +n CloudControllerClient.getInstance().terminate(memberId); } catch (Throwable e) { log.error("Cannot terminate instance", e); }
