Updated Branches: refs/heads/master 43a6f85f8 -> 61e1f8c04
Fixing possible NPE if the cluster monitor/ memeber stat objects are not in the in memory model Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/61e1f8c0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/61e1f8c0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/61e1f8c0 Branch: refs/heads/master Commit: 61e1f8c0465edb74d9053854157b0e9db36fdd78 Parents: 43a6f85 Author: Lahiru Sandaruwan <[email protected]> Authored: Mon Dec 23 14:10:10 2013 +0530 Committer: Lahiru Sandaruwan <[email protected]> Committed: Mon Dec 23 14:10:10 2013 +0530 ---------------------------------------------------------------------- .../health/HealthEventMessageDelegator.java | 77 +++++++++++--------- 1 file changed, 44 insertions(+), 33 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/61e1f8c0/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java index 0fa4ccd..6f6286a 100644 --- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java +++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/message/receiver/health/HealthEventMessageDelegator.java @@ -28,10 +28,7 @@ import javax.jms.TextMessage; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.apache.stratos.autoscaler.AutoscalerContext; -import org.apache.stratos.autoscaler.Constants; -import org.apache.stratos.autoscaler.NetworkPartitionContext; -import org.apache.stratos.autoscaler.PartitionContext; +import org.apache.stratos.autoscaler.*; import org.apache.stratos.autoscaler.client.cloud.controller.CloudControllerClient; import org.apache.stratos.autoscaler.exception.SpawningException; import org.apache.stratos.autoscaler.exception.TerminationException; @@ -214,33 +211,40 @@ public class HealthEventMessageDelegator implements Runnable { private LoadAverage findLoadAverage(Event event) { String memberId = event.getProperties().get("member_id"); Member member = findMember(memberId); - - if(null == member){ + AbstractMonitor monitor = AutoscalerContext.getInstance().getMonitor(member.getClusterId()); + if(null == monitor){ + if(log.isErrorEnabled()) { + log.error(String.format("Cluster monitor is not available for : [member] %s", memberId)); + } + return null; + } + String networkPartitionId = findNetworkPartitionId(memberId); + MemberStatsContext memberStatsContext = monitor.getNetworkPartitionCtxt(networkPartitionId) + .getPartitionCtxt(member.getPartitionId()) + .getMemberStatsContext(memberId); + if(null == memberStatsContext){ + if(log.isErrorEnabled()) { + log.error(String.format("Member context is not available for : [member] %s", memberId)); + } + return null; + } else if(null == member){ if(log.isErrorEnabled()) { log.error(String.format("Member not found: [member] %s", memberId)); } return null; - } - if(!member.isActive()){ + } else if(!member.isActive()){ if(log.isDebugEnabled()){ log.debug(String.format("Member activated event has not received for the member %s. Therefore ignoring" + - " the load average health stat", memberId)); + " the health stat", memberId)); } return null; } - - String networkPartitionId = findNetworkPartitionId(memberId); - LoadAverage loadAverage = AutoscalerContext.getInstance().getMonitor(member.getClusterId()) - .getNetworkPartitionCtxt(networkPartitionId) - .getPartitionCtxt(member.getPartitionId()) - .getMemberStatsContext(memberId).getLoadAverage(); + + LoadAverage loadAverage = memberStatsContext.getLoadAverage(); if(loadAverage == null) { loadAverage = new LoadAverage(); - AutoscalerContext.getInstance().getMonitor(member.getClusterId()) - .getNetworkPartitionCtxt(networkPartitionId) - .getPartitionCtxt(member.getPartitionId()) - .getMemberStatsContext(memberId).setLoadAverage(loadAverage); + memberStatsContext.setLoadAverage(loadAverage); } return loadAverage; } @@ -248,32 +252,39 @@ public class HealthEventMessageDelegator implements Runnable { private MemoryConsumption findMemoryConsumption(Event event) { String memberId = event.getProperties().get("member_id"); Member member = findMember(memberId); - - if(null == member){ + AbstractMonitor monitor = AutoscalerContext.getInstance().getMonitor(member.getClusterId()); + if(null == monitor){ + if(log.isErrorEnabled()) { + log.error(String.format("Cluster monitor is not available for : [member] %s", memberId)); + } + return null; + } + String networkPartitionId = findNetworkPartitionId(memberId); + MemberStatsContext memberStatsContext = monitor.getNetworkPartitionCtxt(networkPartitionId) + .getPartitionCtxt(member.getPartitionId()) + .getMemberStatsContext(memberId); + if(null == memberStatsContext){ + if(log.isErrorEnabled()) { + log.error(String.format("Member context is not available for : [member] %s", memberId)); + } + return null; + } else if(null == member){ if(log.isErrorEnabled()) { log.error(String.format("Member not found: [member] %s", memberId)); } return null; - } - if(!member.isActive()){ + } else if(!member.isActive()){ if(log.isDebugEnabled()){ log.debug(String.format("Member activated event has not received for the member %s. Therefore ignoring" + " the health stat", memberId)); } return null; - } - String networkPartitionId = findNetworkPartitionId(memberId); - MemoryConsumption memoryConsumption = AutoscalerContext.getInstance().getMonitor(member.getClusterId()) - .getNetworkPartitionCtxt(networkPartitionId) - .getPartitionCtxt(member.getPartitionId()) - .getMemberStatsContext(memberId).getMemoryConsumption(); + } + MemoryConsumption memoryConsumption = memberStatsContext.getMemoryConsumption(); if(memoryConsumption == null) { memoryConsumption = new MemoryConsumption(); - AutoscalerContext.getInstance().getMonitor(member.getClusterId()) - .getNetworkPartitionCtxt(networkPartitionId) - .getPartitionCtxt(member.getPartitionId()) - .getMemberStatsContext(memberId).setMemoryConsumption(memoryConsumption); + memberStatsContext.setMemoryConsumption(memoryConsumption); } return memoryConsumption; }
