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();
