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/23 09:35:29 UTC
git commit: Fixing possible NPE if the cluster monitor/ memeber stat
objects are not in the in memory model
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 <la...@apache.org>
Authored: Mon Dec 23 14:10:10 2013 +0530
Committer: Lahiru Sandaruwan <la...@apache.org>
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;
}