Repository: stratos Updated Branches: refs/heads/4.0.0-grouping 1b7064dae -> d474b1367 Updated Tags: refs/tags/merge-point-grouping-and-docker [created] 0d5c14c90
moving force termination to a separate thread Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/d474b136 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/d474b136 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/d474b136 Branch: refs/heads/4.0.0-grouping Commit: d474b13671ccdfc4fdff31d15795dc71f5ad62f9 Parents: 1b7064d Author: Isuru Haththotuwa <[email protected]> Authored: Wed Oct 29 11:51:16 2014 +0530 Committer: Isuru Haththotuwa <[email protected]> Committed: Wed Oct 29 11:51:27 2014 +0530 ---------------------------------------------------------------------- .../AutoscalerTopologyEventReceiver.java | 14 ++--- .../monitor/cluster/ClusterMonitor.java | 57 ++++++++++++++++---- 2 files changed, 55 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/d474b136/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java index 7b411b8..608100a 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/topology/AutoscalerTopologyEventReceiver.java @@ -389,12 +389,14 @@ public class AutoscalerTopologyEventReceiver implements Runnable { } else { // if not active, forcefully terminate clusterMonitor.setStatus(ClusterStatus.Terminating); - try { - CloudControllerClient.getInstance().terminateAllInstances(clusterData.getClusterId()); - } catch (TerminationException e) { - log.error("Unable to terminate instances for [ cluster id ] " + - clusterData.getClusterId(), e); - } + clusterMonitor.terminateAllMembers(); +// try { +// // TODO: introduce a task to do this cleanup +// CloudControllerClient.getInstance().terminateAllInstances(clusterData.getClusterId()); +// } catch (TerminationException e) { +// log.error("Unable to terminate instances for [ cluster id ] " + +// clusterData.getClusterId(), e); +// } } } else { log.warn("No Cluster Monitor found for cluster id " + clusterData.getClusterId()); http://git-wip-us.apache.org/repos/asf/stratos/blob/d474b136/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java index d67b4f4..69dac23 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java @@ -22,7 +22,9 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.autoscaler.NetworkPartitionContext; import org.apache.stratos.autoscaler.PartitionContext; +import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient; import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy; +import org.apache.stratos.autoscaler.exception.TerminationException; import org.apache.stratos.autoscaler.monitor.AbstractClusterMonitor; import org.apache.stratos.autoscaler.monitor.events.MonitorStatusEvent; import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy; @@ -101,17 +103,52 @@ public class ClusterMonitor extends AbstractClusterMonitor { @Override public void terminateAllMembers() { - for (NetworkPartitionContext networkPartitionContext : networkPartitionCtxts.values()) { - for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) { - //if (log.isDebugEnabled()) { - log.info("Starting to terminate all members in Network Partition [ " + - networkPartitionContext.getId() + " ], Partition [ " + - partitionContext.getPartitionId() + " ]"); - // } - - terminateAllFactHandle = AutoscalerRuleEvaluator.evaluateTerminateAll - (terminateAllKnowledgeSession, terminateAllFactHandle, partitionContext); + Thread memberTerminator = new Thread(new Runnable(){ + public void run(){ + + for (NetworkPartitionContext networkPartitionContext : networkPartitionCtxts.values()) { + for (PartitionContext partitionContext : networkPartitionContext.getPartitionCtxts().values()) { + //if (log.isDebugEnabled()) { + log.info("Starting to terminate all members in Network Partition [ " + + networkPartitionContext.getId() + " ], Partition [ " + + partitionContext.getPartitionId() + " ]"); + // } + // need to terminate active, pending and obsolete members + + // active members + for (MemberContext activeMemberCtxt : partitionContext.getActiveMembers()) { + log.info("Terminating active member [member id] " + activeMemberCtxt.getMemberId()); + terminateMember(activeMemberCtxt.getMemberId()); + } + + // pending members + for (MemberContext pendingMemberCtxt : partitionContext.getPendingMembers()) { + log.info("Terminating pending member [member id] " + pendingMemberCtxt.getMemberId()); + terminateMember(pendingMemberCtxt.getMemberId()); + } + + // obsolete members + for (String obsoleteMemberId : partitionContext.getObsoletedMembers()) { + log.info("Terminating obsolete member [member id] " + obsoleteMemberId); + terminateMember(obsoleteMemberId); + } + +// terminateAllFactHandle = AutoscalerRuleEvaluator.evaluateTerminateAll +// (terminateAllKnowledgeSession, terminateAllFactHandle, partitionContext); + } + } } + }, "Member Terminator - [cluster id] " + this.clusterId); + + memberTerminator.start(); + } + + private static void terminateMember (String memberId) { + try { + CloudControllerClient.getInstance().terminate(memberId); + + } catch (TerminationException e) { + log.error("Unable to terminate member [member id ] " + memberId, e); } }
