Updated Branches:
  refs/heads/master 375bd1699 -> 58b06ce91

Fixing possible NPEs when health stat come before member activated


Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/58b06ce9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/58b06ce9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/58b06ce9

Branch: refs/heads/master
Commit: 58b06ce9193aa1bb2551db9097b6063cf1ac98a1
Parents: 375bd16
Author: Lahiru Sandaruwan <[email protected]>
Authored: Fri Dec 20 08:49:24 2013 +0530
Committer: Lahiru Sandaruwan <[email protected]>
Committed: Fri Dec 20 08:49:24 2013 +0530

----------------------------------------------------------------------
 .../health/HealthEventMessageDelegator.java     | 31 ++++++++++++++++----
 .../autoscaler/monitor/AbstractMonitor.java     | 12 --------
 2 files changed, 26 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58b06ce9/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 d8171e7..cab71e6 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
@@ -22,10 +22,7 @@ import com.google.gson.stream.JsonReader;
 
 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;
@@ -213,6 +210,14 @@ public class HealthEventMessageDelegator implements 
Runnable {
     private LoadAverage findLoadAverage(Event event) {
         String memberId = event.getProperties().get("member_id");
         Member member = findMember(memberId);
+
+        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));
+            }
+            return null;
+        }
         if(member != null) {
             String networkPartitionId = findNetworkPartitionId(memberId);
             LoadAverage loadAverage = 
AutoscalerContext.getInstance().getMonitor(member.getClusterId())
@@ -240,6 +245,15 @@ public class HealthEventMessageDelegator implements 
Runnable {
     private MemoryConsumption findMemoryConsumption(Event event) {
         String memberId = event.getProperties().get("member_id");
         Member member = findMember(memberId);
+
+        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;
+        }
+
         if(member != null) {
             String networkPartitionId = findNetworkPartitionId(memberId);
             MemoryConsumption memoryConsumption = 
AutoscalerContext.getInstance().getMonitor(member.getClusterId())
@@ -333,7 +347,14 @@ public class HealthEventMessageDelegator implements 
Runnable {
                NetworkPartitionContext nwPartitionCtxt;
             try{
                TopologyManager.acquireReadLock();
-               Member member = monitor.getMember(memberId);
+               Member member = findMember(memberId);
+                if(!member.isActive()){
+                    if(log.isDebugEnabled()){
+                        log.debug(String.format("Member activated event has 
not received for the member %s. Therefore ignoring" +
+                                " the member fault health stat", memberId));
+                    }
+                    return;
+                }
                    if (null == member) {
                        // member has already terminated. So no action required
                        return;

http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/58b06ce9/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 aa2bb8c..30ed61a 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
@@ -88,18 +88,6 @@ import org.drools.runtime.rule.FactHandle;
         }
         return null;
        }
-        
-    public Member getMember(String memberId){
-       
-        for(Service service: TopologyManager.getTopology().getServices()){
-            for(Cluster cluster: service.getClusters()){
-                if(cluster.memberExists(memberId)){
-                    return cluster.getMember(memberId);
-                }
-            }
-        }
-        return null;
-       }
     
     public void destroy() {
         minCheckKnowledgeSession.dispose();

Reply via email to