Repository: stratos Updated Branches: refs/heads/docker-grouping-merge 52481bbf4 -> 44fd12546
fixing autoscaler topology event receiver logic Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/44fd1254 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/44fd1254 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/44fd1254 Branch: refs/heads/docker-grouping-merge Commit: 44fd12546831fa5f16fbf0bfead35548f1511d71 Parents: 52481bb Author: R-Rajkumar <[email protected]> Authored: Sat Nov 1 21:24:02 2014 +0530 Committer: R-Rajkumar <[email protected]> Committed: Sat Nov 1 21:24:02 2014 +0530 ---------------------------------------------------------------------- .../AutoscalerTopologyEventReceiver.java | 457 +++++++------------ .../monitor/cluster/VMClusterMonitor.java | 4 + 2 files changed, 179 insertions(+), 282 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/44fd1254/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 d6a140a..fedeab9 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 @@ -19,37 +19,76 @@ package org.apache.stratos.autoscaler.message.receiver.topology; +import java.util.Set; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.autoscaler.*; -import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient; -import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy; -import org.apache.stratos.autoscaler.exception.*; +import org.apache.stratos.autoscaler.AutoscalerContext; +import org.apache.stratos.autoscaler.NetworkPartitionContext; +import org.apache.stratos.autoscaler.exception.DependencyBuilderException; +import org.apache.stratos.autoscaler.exception.PartitionValidationException; +import org.apache.stratos.autoscaler.exception.PolicyValidationException; +import org.apache.stratos.autoscaler.exception.TopologyInConsistentException; import org.apache.stratos.autoscaler.grouping.topic.InstanceNotificationPublisher; import org.apache.stratos.autoscaler.grouping.topic.StatusEventPublisher; import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitor; import org.apache.stratos.autoscaler.monitor.application.ApplicationMonitorFactory; import org.apache.stratos.autoscaler.monitor.cluster.AbstractClusterMonitor; import org.apache.stratos.autoscaler.monitor.cluster.ClusterMonitorFactory; -import org.apache.stratos.autoscaler.monitor.cluster.KubernetesClusterMonitor; import org.apache.stratos.autoscaler.monitor.cluster.VMClusterMonitor; import org.apache.stratos.autoscaler.monitor.group.GroupMonitor; -import org.apache.stratos.autoscaler.partition.PartitionManager; -import org.apache.stratos.autoscaler.policy.PolicyManager; import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator; -import org.apache.stratos.autoscaler.status.checker.StatusChecker; -import org.apache.stratos.messaging.domain.topology.*; +import org.apache.stratos.messaging.domain.topology.Application; +import org.apache.stratos.messaging.domain.topology.ApplicationStatus; +import org.apache.stratos.messaging.domain.topology.Cluster; +import org.apache.stratos.messaging.domain.topology.ClusterDataHolder; +import org.apache.stratos.messaging.domain.topology.ClusterStatus; +import org.apache.stratos.messaging.domain.topology.GroupStatus; import org.apache.stratos.messaging.event.Event; -import org.apache.stratos.messaging.event.topology.*; -import org.apache.stratos.messaging.listener.topology.*; +import org.apache.stratos.messaging.event.topology.ApplicationActivatedEvent; +import org.apache.stratos.messaging.event.topology.ApplicationCreatedEvent; +import org.apache.stratos.messaging.event.topology.ApplicationTerminatedEvent; +import org.apache.stratos.messaging.event.topology.ApplicationTerminatingEvent; +import org.apache.stratos.messaging.event.topology.ApplicationUndeployedEvent; +import org.apache.stratos.messaging.event.topology.ClusterActivatedEvent; +import org.apache.stratos.messaging.event.topology.ClusterCreatedEvent; +import org.apache.stratos.messaging.event.topology.ClusterInactivateEvent; +import org.apache.stratos.messaging.event.topology.ClusterRemovedEvent; +import org.apache.stratos.messaging.event.topology.ClusterTerminatedEvent; +import org.apache.stratos.messaging.event.topology.ClusterTerminatingEvent; +import org.apache.stratos.messaging.event.topology.GroupActivatedEvent; +import org.apache.stratos.messaging.event.topology.GroupInactivateEvent; +import org.apache.stratos.messaging.event.topology.GroupTerminatedEvent; +import org.apache.stratos.messaging.event.topology.GroupTerminatingEvent; +import org.apache.stratos.messaging.event.topology.MemberActivatedEvent; +import org.apache.stratos.messaging.event.topology.MemberMaintenanceModeEvent; +import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent; +import org.apache.stratos.messaging.event.topology.MemberTerminatedEvent; +import org.apache.stratos.messaging.listener.topology.ApplicationActivatedEventListener; +import org.apache.stratos.messaging.listener.topology.ApplicationCreatedEventListener; +import org.apache.stratos.messaging.listener.topology.ApplicationTerminatedEventListener; +import org.apache.stratos.messaging.listener.topology.ApplicationTerminatingEventListener; +import org.apache.stratos.messaging.listener.topology.ApplicationUndeployedEventListener; +import org.apache.stratos.messaging.listener.topology.ClusterActivatedEventListener; +import org.apache.stratos.messaging.listener.topology.ClusterCreatedEventListener; +import org.apache.stratos.messaging.listener.topology.ClusterInActivateEventListener; +import org.apache.stratos.messaging.listener.topology.ClusterRemovedEventListener; +import org.apache.stratos.messaging.listener.topology.ClusterTerminatedEventListener; +import org.apache.stratos.messaging.listener.topology.ClusterTerminatingEventListener; +import org.apache.stratos.messaging.listener.topology.CompleteTopologyEventListener; +import org.apache.stratos.messaging.listener.topology.GroupActivatedEventListener; +import org.apache.stratos.messaging.listener.topology.GroupInActivateEventListener; +import org.apache.stratos.messaging.listener.topology.GroupTerminatedEventListener; +import org.apache.stratos.messaging.listener.topology.GroupTerminatingEventListener; +import org.apache.stratos.messaging.listener.topology.MemberActivatedEventListener; +import org.apache.stratos.messaging.listener.topology.MemberMaintenanceListener; +import org.apache.stratos.messaging.listener.topology.MemberReadyToShutdownEventListener; +import org.apache.stratos.messaging.listener.topology.MemberTerminatedEventListener; import org.apache.stratos.messaging.message.receiver.topology.TopologyEventReceiver; import org.apache.stratos.messaging.message.receiver.topology.TopologyManager; import org.drools.runtime.StatefulKnowledgeSession; import org.drools.runtime.rule.FactHandle; -import java.util.List; -import java.util.Set; - /** * Autoscaler topology receiver. */ @@ -464,297 +503,151 @@ public class AutoscalerTopologyEventReceiver implements Runnable { } }); - topologyEventReceiver.addEventListener(new MemberReadyToShutdownEventListener() { - @Override - protected void onEvent(Event event) { - try { - MemberReadyToShutdownEvent memberReadyToShutdownEvent = - (MemberReadyToShutdownEvent) event; - AutoscalerContext asCtx = AutoscalerContext.getInstance(); - AbstractClusterMonitor monitor; - String clusterId = memberReadyToShutdownEvent.getClusterId(); - String memberId = memberReadyToShutdownEvent.getMemberId(); - - if (asCtx.clusterMonitorExist(clusterId)) { - monitor = asCtx.getClusterMonitor(clusterId); - } else { - if (log.isDebugEnabled()) { - log.debug(String.format("A cluster monitor is not found " + - "in autoscaler context [cluster] %s", clusterId)); - } - return; - } - - if(monitor instanceof VMClusterMonitor) { - VMClusterMonitor vmClusterMonitor = (VMClusterMonitor) monitor; - NetworkPartitionContext nwPartitionCtxt; - nwPartitionCtxt = vmClusterMonitor.getNetworkPartitionCtxt( - memberReadyToShutdownEvent.getNetworkPartitionId()); - - String partitionId = vmClusterMonitor.getPartitionOfMember(memberId); - PartitionContext partitionCtxt = nwPartitionCtxt.getPartitionCtxt(partitionId); - - // terminate the member - CloudControllerClient ccClient = CloudControllerClient.getInstance(); - ccClient.terminate(memberId); - // remove from active member list - partitionCtxt.removeActiveMemberById(memberId); - - - if (log.isInfoEnabled()) { - log.info(String.format("Member is terminated and removed from the active " + - "members list: [member] %s [partition] %s [cluster] %s ", - memberId, partitionId, clusterId)); - } - } else if(monitor instanceof KubernetesClusterMonitor) { - KubernetesClusterMonitor kubernetesClusterMonitor = (KubernetesClusterMonitor) monitor; - kubernetesClusterMonitor.handleMemberReadyToShutdownEvent(memberReadyToShutdownEvent); - } - } catch (TerminationException e) { - log.error(e); - } - } - - }); + topologyEventReceiver.addEventListener(new MemberReadyToShutdownEventListener() { + @Override + protected void onEvent(Event event) { + try { + MemberReadyToShutdownEvent memberReadyToShutdownEvent = (MemberReadyToShutdownEvent) event; + String clusterId = memberReadyToShutdownEvent.getClusterId(); + AutoscalerContext asCtx = AutoscalerContext.getInstance(); + AbstractClusterMonitor monitor; + monitor = asCtx.getClusterMonitor(clusterId); + if (null == monitor) { + if (log.isDebugEnabled()) { + log.debug(String.format("A cluster monitor is not found in autoscaler context " + + "[cluster] %s", clusterId)); + } + return; + } + monitor.handleMemberReadyToShutdownEvent(memberReadyToShutdownEvent); + } catch (Exception e) { + String msg = "Error processing event " + + e.getLocalizedMessage(); + log.error(msg, e); + } + } + }); topologyEventReceiver.addEventListener(new ClusterRemovedEventListener() { - @Override - protected void onEvent(Event event) { - - ClusterRemovedEvent clusterRemovedEvent = null; - try { - clusterRemovedEvent = (ClusterRemovedEvent) event; - //TopologyManager.acquireReadLock(); + @Override + protected void onEvent(Event event) { + ClusterRemovedEvent clusterRemovedEvent = (ClusterRemovedEvent) event; + try { + //TopologyManager.acquireReadLock(); TopologyManager.acquireReadLockForCluster(clusterRemovedEvent.getServiceName(), clusterRemovedEvent.getClusterId()); - - String clusterId = clusterRemovedEvent.getClusterId(); - String deploymentPolicy = clusterRemovedEvent.getDeploymentPolicy(); - - AbstractClusterMonitor monitor; - - if (clusterRemovedEvent.isLbCluster()) { - DeploymentPolicy depPolicy = PolicyManager.getInstance(). - getDeploymentPolicy(deploymentPolicy); - if (depPolicy != null) { - List<NetworkPartitionLbHolder> lbHolders = PartitionManager.getInstance() - .getNetworkPartitionLbHolders(depPolicy); - - for (NetworkPartitionLbHolder networkPartitionLbHolder : lbHolders) { - // removes lb cluster ids - boolean isRemoved = networkPartitionLbHolder.removeLbClusterId(clusterId); - if (isRemoved) { - log.info("Removed the lb cluster [id]:" - + clusterId - + " reference from Network Partition [id]: " - + networkPartitionLbHolder - .getNetworkPartitionId()); - - } - if (log.isDebugEnabled()) { - log.debug(networkPartitionLbHolder); - } - - } - } - monitor = AutoscalerContext.getInstance() - .removeClusterMonitor(clusterId); - - } else { - monitor = (AbstractClusterMonitor) AutoscalerContext.getInstance() - .removeClusterMonitor(clusterId); - } - - // runTerminateAllRule(monitor); - if (monitor != null) { - monitor.destroy(); - log.info(String.format("Cluster monitor has been removed successfully: [cluster] %s ", - clusterId)); - } - } catch (Exception e) { - log.error("Error processing event", e); - } finally { + String clusterId = clusterRemovedEvent.getClusterId(); + AutoscalerContext asCtx = AutoscalerContext.getInstance(); + AbstractClusterMonitor monitor; + monitor = asCtx.getClusterMonitor(clusterId); + if (null == monitor) { + if (log.isDebugEnabled()) { + log.debug(String.format("A cluster monitor is not found in autoscaler context " + + "[cluster] %s", clusterId)); + } + return; + } + monitor.handleClusterRemovedEvent(clusterRemovedEvent); + asCtx.removeClusterMonitor(clusterId); + monitor.destroy(); + log.info(String.format("Cluster monitor has been removed successfully: [cluster] %s ", + clusterId)); + } catch (Exception e) { + String msg = "Error processing event " + e.getLocalizedMessage(); + log.error(msg, e); + } finally { //TopologyManager.releaseReadLock(); TopologyManager.releaseReadLockForCluster(clusterRemovedEvent.getServiceName(), clusterRemovedEvent.getClusterId()); } - } + } + }); topologyEventReceiver.addEventListener(new MemberTerminatedEventListener() { - @Override - protected void onEvent(Event event) { - - MemberTerminatedEvent memberTerminatedEvent = null; - try { - //TopologyManager.acquireReadLock(); - - memberTerminatedEvent = (MemberTerminatedEvent) event; - String networkPartitionId = memberTerminatedEvent.getNetworkPartitionId(); - String clusterId = memberTerminatedEvent.getClusterId(); - String partitionId = memberTerminatedEvent.getPartitionId(); - - TopologyManager.acquireReadLockForCluster(memberTerminatedEvent.getServiceName(), - memberTerminatedEvent.getClusterId()); - - AbstractClusterMonitor monitor = AutoscalerContext.getInstance().getClusterMonitor(clusterId); - if(monitor == null) { - log.error(String.format("Cluster monitor not found in autoscaler context: [clusterId] %s ", clusterId)); - return; - } - - if(monitor instanceof VMClusterMonitor) { - VMClusterMonitor vmClusterMonitor = (VMClusterMonitor) monitor; - NetworkPartitionContext networkPartitionContext = vmClusterMonitor. - getNetworkPartitionCtxt(networkPartitionId); - - PartitionContext partitionContext = networkPartitionContext. - getPartitionCtxt(partitionId); - String memberId = memberTerminatedEvent.getMemberId(); - partitionContext.removeMemberStatsContext(memberId); - - - if (partitionContext.removeTerminationPendingMember(memberId)) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member is removed from termination pending " + - "members list: [member] %s", memberId)); - } - } else if (partitionContext.removePendingMember(memberId)) { - if (log.isDebugEnabled()) { - log.debug(String.format("Member is removed from pending members list: " + - "[member] %s", memberId)); - } - } else if (partitionContext.removeActiveMemberById(memberId)) { - log.warn(String.format("Member is in the wrong list and it is removed " + - "from active members list", memberId)); - } else { - log.warn(String.format("Member is not available in any of the list " + - "active, pending and termination pending", memberId)); - } - - if (log.isInfoEnabled()) { - log.info(String.format("Member stat context has been removed " + - " successfully: [member] %s", memberId)); - } - //Checking whether the cluster state can be changed either from in_active to created/terminating to terminated - StatusChecker.getInstance().onMemberTermination(clusterId); - } else if(monitor instanceof KubernetesClusterMonitor) { - KubernetesClusterMonitor kubernetesClusterMonitor = (KubernetesClusterMonitor) monitor; - kubernetesClusterMonitor.handleMemberTerminatedEvent(memberTerminatedEvent); - } - - } catch (Exception e) { - log.error("Error processing event", e); - } finally { - //TopologyManager.releaseReadLock(); - TopologyManager.releaseReadLockForCluster(memberTerminatedEvent.getServiceName(), - memberTerminatedEvent.getClusterId()); - } - } - }); + @Override + protected void onEvent(Event event) { + try { + MemberTerminatedEvent memberTerminatedEvent = (MemberTerminatedEvent) event; + String clusterId = memberTerminatedEvent.getClusterId(); + AbstractClusterMonitor monitor; + AutoscalerContext asCtx = AutoscalerContext.getInstance(); + monitor = asCtx.getClusterMonitor(clusterId); + if (null == monitor) { + if (log.isDebugEnabled()) { + log.debug(String.format("A cluster monitor is not found in autoscaler context " + + "[cluster] %s", clusterId)); + } + return; + } + monitor.handleMemberTerminatedEvent(memberTerminatedEvent); + } catch (Exception e) { + String msg = "Error processing event " + e.getLocalizedMessage(); + log.error(msg, e); + } + } + }); topologyEventReceiver.addEventListener(new MemberActivatedEventListener() { - @Override - protected void onEvent(Event event) { - - MemberActivatedEvent memberActivatedEvent = (MemberActivatedEvent) event; - - //TopologyManager.acquireReadLock(); - TopologyManager.acquireReadLockForCluster(memberActivatedEvent.getServiceName(), - memberActivatedEvent.getClusterId()); - - try { - - String networkPartitionId = memberActivatedEvent.getNetworkPartitionId(); - String clusterId = memberActivatedEvent.getClusterId(); - String partitionId = memberActivatedEvent.getPartitionId(); - String memberId = memberActivatedEvent.getMemberId(); - - AbstractClusterMonitor monitor = AutoscalerContext.getInstance().getClusterMonitor(clusterId); - if(monitor == null) { - log.error(String.format("Cluster monitor not found in autoscaler context: [clusterId] %s ", clusterId)); - return; - } - - if(monitor instanceof VMClusterMonitor) { - VMClusterMonitor vmClusterMonitor = (VMClusterMonitor) monitor; - NetworkPartitionContext networkPartitionContext = vmClusterMonitor. - getNetworkPartitionCtxt(networkPartitionId); - PartitionContext partitionContext = networkPartitionContext. - getPartitionCtxt(partitionId); - - partitionContext.addMemberStatsContext(new MemberStatsContext(memberId)); - // TODO starting the pending clusters which are waiting for this member activation in a cluster - if (log.isInfoEnabled()) { - log.info(String.format("Member stat context has been added " + - "successfully: [member] %s", memberId)); - } - partitionContext.movePendingMemberToActiveMembers(memberId); - //triggering the status checker - StatusChecker.getInstance().onMemberStatusChange(memberActivatedEvent.getClusterId()); - } else if(monitor instanceof KubernetesClusterMonitor) { - KubernetesClusterMonitor kubernetesClusterMonitor = (KubernetesClusterMonitor) monitor; - kubernetesClusterMonitor.handleMemberActivatedEvent(memberActivatedEvent); - } - - } catch (Exception e) { - log.error("Error processing event", e); - } finally { + @Override + protected void onEvent(Event event) { + MemberActivatedEvent memberActivatedEvent = (MemberActivatedEvent) event; + try { + //TopologyManager.acquireReadLock(); + TopologyManager.acquireReadLockForCluster(memberActivatedEvent.getServiceName(), + memberActivatedEvent.getClusterId()); + String clusterId = memberActivatedEvent.getClusterId(); + AbstractClusterMonitor monitor; + AutoscalerContext asCtx = AutoscalerContext.getInstance(); + monitor = asCtx.getClusterMonitor(clusterId); + if (null == monitor) { + if (log.isDebugEnabled()) { + log.debug(String.format("A cluster monitor is not found in autoscaler context " + + "[cluster] %s", clusterId)); + } + return; + } + monitor.handleMemberActivatedEvent(memberActivatedEvent); + } catch (Exception e) { + String msg = "Error processing event " + e.getLocalizedMessage(); + log.error(msg, e); + } finally { //TopologyManager.releaseReadLock(); TopologyManager.releaseReadLockForCluster(memberActivatedEvent.getServiceName(), memberActivatedEvent.getClusterId()); } - } + } }); - + topologyEventReceiver.addEventListener(new MemberMaintenanceListener() { - @Override - protected void onEvent(Event event) { - - MemberMaintenanceModeEvent memberMaintenanceModeEvent = (MemberMaintenanceModeEvent) event; - - //TopologyManager.acquireReadLock(); - TopologyManager.acquireReadLockForCluster(memberMaintenanceModeEvent.getServiceName(), - memberMaintenanceModeEvent.getClusterId()); - - try { - - String memberId = memberMaintenanceModeEvent.getMemberId(); - String partitionId = memberMaintenanceModeEvent.getPartitionId(); - String networkPartitionId = memberMaintenanceModeEvent.getNetworkPartitionId(); - - PartitionContext partitionContext; - String clusterId = memberMaintenanceModeEvent.getClusterId(); - - AbstractClusterMonitor monitor = AutoscalerContext.getInstance().getClusterMonitor(clusterId); - if(monitor == null) { - log.error(String.format("Cluster monitor not found in autoscaler context: [clusterId] %s ", clusterId)); - return; - } - - if(monitor instanceof VMClusterMonitor) { - VMClusterMonitor vmClusterMonitor = (VMClusterMonitor) monitor; - partitionContext = vmClusterMonitor.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); - } else if(monitor instanceof KubernetesClusterMonitor) { - KubernetesClusterMonitor kubernetesClusterMonitor = (KubernetesClusterMonitor) monitor; - kubernetesClusterMonitor.handleMemberMaintenanceModeEvent(memberMaintenanceModeEvent); - } - - } catch (Exception e) { - log.error("Error processing event", e); - } finally { + @Override + protected void onEvent(Event event) { + MemberMaintenanceModeEvent memberMaintenanceModeEvent = (MemberMaintenanceModeEvent) event; + //TopologyManager.acquireReadLock(); + TopologyManager.acquireReadLockForCluster(memberMaintenanceModeEvent.getServiceName(), + memberMaintenanceModeEvent.getClusterId()); + try { + String clusterId = memberMaintenanceModeEvent.getClusterId(); + AbstractClusterMonitor monitor; + AutoscalerContext asCtx = AutoscalerContext.getInstance(); + monitor = asCtx.getClusterMonitor(clusterId); + if (null == monitor) { + if (log.isDebugEnabled()) { + log.debug(String.format("A cluster monitor is not found in autoscaler context " + + "[cluster] %s", clusterId)); + } + return; + } + monitor.handleMemberMaintenanceModeEvent(memberMaintenanceModeEvent); + } catch (Exception e) { + String msg = "Error processing event " + e.getLocalizedMessage(); + log.error(msg, e); + } finally { TopologyManager.releaseReadLockForCluster(memberMaintenanceModeEvent.getServiceName(), memberMaintenanceModeEvent.getClusterId()); } - } + } }); } http://git-wip-us.apache.org/repos/asf/stratos/blob/44fd1254/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 d4b6a25..3365503 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 @@ -30,6 +30,7 @@ import org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy; import org.apache.stratos.autoscaler.exception.TerminationException; import org.apache.stratos.autoscaler.policy.model.AutoscalePolicy; import org.apache.stratos.autoscaler.rule.AutoscalerRuleEvaluator; +import org.apache.stratos.autoscaler.status.checker.StatusChecker; import org.apache.stratos.cloud.controller.stub.pojo.MemberContext; import org.apache.stratos.messaging.domain.topology.Cluster; import org.apache.stratos.messaging.domain.topology.Member; @@ -511,6 +512,7 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor { String networkPartitionId = memberTerminatedEvent.getNetworkPartitionId(); String memberId = memberTerminatedEvent.getMemberId(); + String clusterId = memberTerminatedEvent.getClusterId(); String partitionId = memberTerminatedEvent.getPartitionId(); NetworkPartitionContext networkPartitionContext = getNetworkPartitionCtxt(networkPartitionId); PartitionContext partitionContext = networkPartitionContext.getPartitionCtxt(partitionId); @@ -541,6 +543,8 @@ abstract public class VMClusterMonitor extends AbstractClusterMonitor { log.info(String.format("Member stat context has been removed successfully: " + "[member] %s", memberId)); } + //Checking whether the cluster state can be changed either from in_active to created/terminating to terminated + StatusChecker.getInstance().onMemberTermination(clusterId); } @Override
