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

Reply via email to