You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2013/12/18 12:30:05 UTC

git commit: Fixing NPE due to LB cluster monitor setter

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 <la...@apache.org>
Authored: Wed Dec 18 17:04:44 2013 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
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();