Updated Branches:
  refs/heads/master 0c012936e -> 314a58993

Fixing NPE due to LB cluster monitor setter


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/314a5899
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/314a5899
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/314a5899

Branch: refs/heads/master
Commit: 314a58993fa38c601fc358b255320c70bd00ca33
Parents: 0c01293
Author: Lahiru Sandaruwan <[email protected]>
Authored: Wed Dec 18 17:04:44 2013 +0530
Committer: Lahiru Sandaruwan <[email protected]>
Committed: Wed Dec 18 17:04:44 2013 +0530

----------------------------------------------------------------------
 .../stratos/autoscaler/AutoscalerContext.java   |  4 ++
 .../autoscaler/monitor/AbstractMonitor.java     |  5 +-
 .../topology/AutoscalerTopologyReceiver.java    | 53 ++++++++++++++++----
 3 files changed, 50 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/314a5899/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
index b8111d7..5f59dcc 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/AutoscalerContext.java
@@ -63,6 +63,10 @@ public class AutoscalerContext {
        log.info("Remove moniter clusterid" + clusterId);
         return monitors.remove(clusterId);
     }
+    public LbClusterMonitor removeLbMonitor(String clusterId) {
+       log.info("Remove moniter clusterid" + clusterId);
+        return lbMonitors.remove(clusterId);
+    }
 
     public Map<String, ClusterMonitor> getMonitors() {
         return monitors;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/314a5899/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractMonitor.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractMonitor.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractMonitor.java
index c02cc68..740db07 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractMonitor.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/AbstractMonitor.java
@@ -40,5 +40,8 @@ import 
org.apache.stratos.autoscaler.deployment.policy.DeploymentPolicy;
        public abstract boolean memberExist(String memberId);
        public abstract NetworkPartitionContext findNetworkPartition(String 
memberId);
 
-       
+
+    public abstract NetworkPartitionContext getNetworkPartitionCtxt(String 
networkPartitionId);
+
+    public abstract void destroy();
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/314a5899/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/AutoscalerTopologyReceiver.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/AutoscalerTopologyReceiver.java
 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/AutoscalerTopologyReceiver.java
index 9372fe0..b81a209 100644
--- 
a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/AutoscalerTopologyReceiver.java
+++ 
b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/topology/AutoscalerTopologyReceiver.java
@@ -21,9 +21,13 @@ package org.apache.stratos.autoscaler.topology;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.autoscaler.*;
+import org.apache.stratos.autoscaler.AutoscalerContext;
+import org.apache.stratos.autoscaler.MemberStatsContext;
+import org.apache.stratos.autoscaler.NetworkPartitionContext;
+import org.apache.stratos.autoscaler.PartitionContext;
 import org.apache.stratos.autoscaler.exception.PartitionValidationException;
 import org.apache.stratos.autoscaler.exception.PolicyValidationException;
+import org.apache.stratos.autoscaler.monitor.AbstractMonitor;
 import org.apache.stratos.autoscaler.monitor.ClusterMonitor;
 import org.apache.stratos.autoscaler.monitor.LbClusterMonitor;
 import org.apache.stratos.autoscaler.util.AutoscalerUtil;
@@ -132,8 +136,22 @@ public class AutoscalerTopologyReceiver implements 
Runnable {
                 try {
                     ClusterRemovedEvent e = (ClusterRemovedEvent) event;
                     TopologyManager.acquireReadLock();
-                    
-                    removeClusterFromContext(e.getClusterId());
+                    String serviceName = e.getServiceName();
+                    String clusterId = e.getClusterId();
+
+                    AbstractMonitor monitor;
+
+                    
if(TopologyManager.getTopology().getService(serviceName).getCluster(clusterId).isLbCluster()){
+                        monitor = 
AutoscalerContext.getInstance().removeLbMonitor(clusterId);
+
+                    } else {
+                        monitor = 
AutoscalerContext.getInstance().removeMonitor(clusterId);
+                    }
+
+                    monitor.destroy();
+                    if(log.isDebugEnabled()) {
+                        log.debug(String.format("Cluster monitor has been 
removed: [cluster] %s ", clusterId));
+                    }
                 }
                 finally {
                     TopologyManager.releaseReadLock();
@@ -158,8 +176,19 @@ public class AutoscalerTopologyReceiver implements 
Runnable {
                        TopologyManager.acquireReadLock();
                                        MemberTerminatedEvent e = 
(MemberTerminatedEvent) event;
                     String networkPartitionId = e.getNetworkPartitionId();
-                                       NetworkPartitionContext 
networkPartitionContext = 
AutoscalerContext.getInstance().getMonitor(e.getClusterId())
-                            .getNetworkPartitionCtxt(networkPartitionId);
+                    String clusterId = e.getClusterId();
+                    AbstractMonitor monitor;
+
+                    
if(AutoscalerContext.getInstance().moniterExist(clusterId)){
+
+                        monitor = 
AutoscalerContext.getInstance().getMonitor(clusterId);
+                    } else {
+
+                        //This is LB member
+                        monitor = 
AutoscalerContext.getInstance().getLBMonitor(clusterId);
+                    }
+
+                                       NetworkPartitionContext 
networkPartitionContext = monitor.getNetworkPartitionCtxt(networkPartitionId);
 
                     
networkPartitionContext.getPartitionCtxt(e.getPartitionId())
                             .removeMemberStatsContext(e.getMemberId());
@@ -190,15 +219,17 @@ public class AutoscalerTopologyReceiver implements 
Runnable {
                     String partitionId = e.getPartitionId();
                     String networkPartitionId = e.getNetworkPartitionId();
 
+                    String serviceName = e.getServiceName();
                     PartitionContext partitionContext;
                                        String clusterId = e.getClusterId();
-                    ClusterMonitor monitor = 
AutoscalerContext.getInstance().getMonitor(clusterId);
+                    AbstractMonitor monitor;
                     
-                                       if(monitor != null) {
+                                       
if(AutoscalerContext.getInstance().moniterExist(clusterId)) {
+                        monitor = 
AutoscalerContext.getInstance().getMonitor(clusterId);
                                            partitionContext = 
monitor.getNetworkPartitionCtxt(networkPartitionId).getPartitionCtxt(partitionId);
                                        } else {
-                                           LbClusterMonitor lbMonitor = 
AutoscalerContext.getInstance().getLBMonitor(clusterId);
-                                           partitionContext = 
lbMonitor.getNetworkPartitionCtxt(networkPartitionId).getPartitionCtxt(partitionId);
+                                           monitor = 
AutoscalerContext.getInstance().getLBMonitor(clusterId);
+                                           partitionContext = 
monitor.getNetworkPartitionCtxt(networkPartitionId).getPartitionCtxt(partitionId);
                                        }
 //                                     ClusterContext clusCtx = 
monitor.getClusterCtxt();
 //                    
monitor.getNetworkPartitionCtxt(e.getId()).getPartitionCtxt(partitionId);
@@ -226,7 +257,7 @@ public class AutoscalerTopologyReceiver implements Runnable 
{
 //                    ServiceRemovedEvent serviceRemovedEvent = 
(ServiceRemovedEvent)event;
 //                    for(Service service : 
TopologyManager.getTopology().getServices()) {
 //                        for(Cluster cluster : service.getClusters()) {
-//                            removeClusterFromContext(cluster.getHostName());
+//                            removeMonitor(cluster.getHostName());
 //                        }
 //                    }
 //                }
@@ -330,7 +361,7 @@ public class AutoscalerTopologyReceiver implements Runnable 
{
 //        }
 //    }
 
-    private void removeClusterFromContext(String clusterId) {
+    private void removeMonitor(String clusterId) {
         ClusterMonitor monitor = 
AutoscalerContext.getInstance().removeMonitor(clusterId);
 //        monitor.unsubscribe();
         monitor.destroy();

Reply via email to