Ec2Snitch - use systemtable when gossip info is not available Patch by Vijay, reviewed by Brandon Williams for CASSANDRA-5171
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a71e526e Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a71e526e Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a71e526e Branch: refs/heads/trunk Commit: a71e526e3d1f69e46f25f3822341e631690b40a2 Parents: 26fdab3 Author: Vijay Parthasarathy <[email protected]> Authored: Fri Jan 18 10:57:14 2013 -0800 Committer: Vijay Parthasarathy <[email protected]> Committed: Fri Jan 18 10:57:14 2013 -0800 ---------------------------------------------------------------------- .../org/apache/cassandra/locator/Ec2Snitch.java | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/a71e526e/src/java/org/apache/cassandra/locator/Ec2Snitch.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/locator/Ec2Snitch.java b/src/java/org/apache/cassandra/locator/Ec2Snitch.java index a28e2a6..f36449d 100644 --- a/src/java/org/apache/cassandra/locator/Ec2Snitch.java +++ b/src/java/org/apache/cassandra/locator/Ec2Snitch.java @@ -23,11 +23,13 @@ import java.io.IOException; import java.net.HttpURLConnection; import java.net.InetAddress; import java.net.URL; +import java.util.Map; import com.google.common.base.Charsets; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.apache.cassandra.db.SystemTable; import org.apache.cassandra.exceptions.ConfigurationException; import org.apache.cassandra.gms.ApplicationState; import org.apache.cassandra.gms.EndpointState; @@ -44,6 +46,7 @@ public class Ec2Snitch extends AbstractNetworkTopologySnitch 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"; + private Map<InetAddress, Map<String, String>> savedEndpoints; protected String ec2zone; protected String ec2region; @@ -93,7 +96,13 @@ public class Ec2Snitch extends AbstractNetworkTopologySnitch return ec2zone; EndpointState state = Gossiper.instance.getEndpointStateForEndpoint(endpoint); if (state == null || state.getApplicationState(ApplicationState.RACK) == null) + { + if (savedEndpoints == null) + savedEndpoints = SystemTable.loadDcRackInfo(); + if (savedEndpoints.containsKey(endpoint)) + return savedEndpoints.get(endpoint).get("rack"); return DEFAULT_RACK; + } return state.getApplicationState(ApplicationState.RACK).value; } @@ -103,7 +112,13 @@ public class Ec2Snitch extends AbstractNetworkTopologySnitch return ec2region; EndpointState state = Gossiper.instance.getEndpointStateForEndpoint(endpoint); if (state == null || state.getApplicationState(ApplicationState.DC) == null) + { + if (savedEndpoints == null) + savedEndpoints = SystemTable.loadDcRackInfo(); + if (savedEndpoints.containsKey(endpoint)) + return savedEndpoints.get(endpoint).get("data_center"); return DEFAULT_DC; + } return state.getApplicationState(ApplicationState.DC).value; } }
