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