You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by vi...@apache.org on 2013/01/18 19:57:43 UTC

git commit: Ec2Snitch - use systemtable when gossip info is not available Patch by Vijay, reviewed by Brandon Williams for CASSANDRA-5171

Updated Branches:
  refs/heads/cassandra-1.2 26fdab378 -> a71e526e3


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/cassandra-1.2
Commit: a71e526e3d1f69e46f25f3822341e631690b40a2
Parents: 26fdab3
Author: Vijay Parthasarathy <vi...@gmail.com>
Authored: Fri Jan 18 10:57:14 2013 -0800
Committer: Vijay Parthasarathy <vi...@gmail.com>
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;
     }
 }