You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2011/11/16 22:44:54 UTC

svn commit: r1202892 - /cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/Ec2Snitch.java

Author: brandonwilliams
Date: Wed Nov 16 21:44:54 2011
New Revision: 1202892

URL: http://svn.apache.org/viewvc?rev=1202892&view=rev
Log:
Set default rack/dc in ec2snitch to avoid NPEs.
Patch by Alex Araujo, reviewed by brandonwilliams for CASSANDRA-3186.

Modified:
    cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/Ec2Snitch.java

Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/Ec2Snitch.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/Ec2Snitch.java?rev=1202892&r1=1202891&r2=1202892&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/Ec2Snitch.java (original)
+++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/Ec2Snitch.java Wed Nov 16 21:44:54 2011
@@ -44,6 +44,8 @@ public class Ec2Snitch extends AbstractN
 {
     protected static Logger logger = LoggerFactory.getLogger(Ec2Snitch.class);
     protected static final String ZONE_NAME_QUERY_URL = "http://169.254.169.254/latest/meta-data/placement/availability-zone";
+    private static final String DEFAULT_DC = "UNKNOWN-DC";
+    private static final String DEFAULT_RACK = "UNKNOWN-RACK";
     protected String ec2zone;
     protected String ec2region;
 
@@ -83,14 +85,20 @@ public class Ec2Snitch extends AbstractN
     {
         if (endpoint.equals(FBUtilities.getLocalAddress()))
             return ec2zone;
-        return Gossiper.instance.getEndpointStateForEndpoint(endpoint).getApplicationState(ApplicationState.RACK).value;
+        EndpointState state = Gossiper.instance.getEndpointStateForEndpoint(endpoint);
+        if (null == state || null == state.getApplicationState(ApplicationState.RACK))
+            return DEFAULT_RACK;
+        return state.getApplicationState(ApplicationState.RACK).value;
     }
 
     public String getDatacenter(InetAddress endpoint)
     {
         if (endpoint.equals(FBUtilities.getLocalAddress()))
             return ec2region;
-        return Gossiper.instance.getEndpointStateForEndpoint(endpoint).getApplicationState(ApplicationState.DC).value;
+        EndpointState state = Gossiper.instance.getEndpointStateForEndpoint(endpoint);
+        if (null == state || null == state.getApplicationState(ApplicationState.DC))
+            return DEFAULT_DC;
+        return state.getApplicationState(ApplicationState.DC).value;
     }
 
     @Override