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;
     }