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 2013/01/16 01:43:35 UTC
[2/3] git commit: GPFS loads dc/rack info from saved state if needed.
Patch by brandonwilliams, reviewed by vijay for CASSANDRA-5133
GPFS loads dc/rack info from saved state if needed.
Patch by brandonwilliams, reviewed by vijay for CASSANDRA-5133
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1108ede0
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1108ede0
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1108ede0
Branch: refs/heads/trunk
Commit: 1108ede0ff459d62add74487aa949139ed11d3ab
Parents: fac299f
Author: Brandon Williams <br...@apache.org>
Authored: Tue Jan 15 18:41:54 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Tue Jan 15 18:43:15 2013 -0600
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/db/SystemTable.java | 20 +++++++++++++++
.../locator/GossipingPropertyFileSnitch.java | 15 +++++++++++
3 files changed, 36 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1108ede0/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index f57f656..e3e40b6 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
1.2.1
+ * GossipingPropertyFileSnitch loads saved dc/rack info if needed (CASSANDRA-5133)
* drain should flush system CFs too (CASSANDRA-4446)
* add inter_dc_tcp_nodelay setting (CASSANDRA-5148)
* re-allow wrapping ranges for start_token/end_token range pairing (CASSANDRA-5106)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1108ede0/src/java/org/apache/cassandra/db/SystemTable.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SystemTable.java b/src/java/org/apache/cassandra/db/SystemTable.java
index 18a2666..84d6e78 100644
--- a/src/java/org/apache/cassandra/db/SystemTable.java
+++ b/src/java/org/apache/cassandra/db/SystemTable.java
@@ -395,6 +395,26 @@ public class SystemTable
}
/**
+ * Return a map of IP addresses containing a map of dc and rack info
+ */
+ public static Map<InetAddress, Map<String,String>> loadDcRackInfo()
+ {
+ Map<InetAddress, Map<String, String>> result = new HashMap<InetAddress, Map<String, String>>();
+ for (UntypedResultSet.Row row : processInternal("SELECT peer, data_center, rack from system." + PEERS_CF))
+ {
+ InetAddress peer = row.getInetAddress("peer");
+ if (row.has("data_center"))
+ {
+ Map<String, String> dcRack = new HashMap<String, String>();
+ dcRack.put("data_center", row.getString("data_center"));
+ dcRack.put("rack", row.getString("rack"));
+ result.put(peer, dcRack);
+ }
+ }
+ return result;
+ }
+
+ /**
* One of three things will happen if you try to read the system table:
* 1. files are present and you can read them: great
* 2. no files are there: great (new node is assumed)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1108ede0/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java b/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java
index aa4c4e6..b16c136 100644
--- a/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java
+++ b/src/java/org/apache/cassandra/locator/GossipingPropertyFileSnitch.java
@@ -19,7 +19,9 @@
package org.apache.cassandra.locator;
import java.net.InetAddress;
+import java.util.Map;
+import org.apache.cassandra.db.SystemTable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -36,6 +38,7 @@ public class GossipingPropertyFileSnitch extends AbstractNetworkTopologySnitch
private PropertyFileSnitch psnitch;
private String myDC;
private String myRack;
+ private Map<InetAddress, Map<String, String>> savedEndpoints;
public GossipingPropertyFileSnitch() throws ConfigurationException
{
@@ -69,7 +72,13 @@ public class GossipingPropertyFileSnitch extends AbstractNetworkTopologySnitch
if (epState == null || epState.getApplicationState(ApplicationState.DC) == null)
{
if (psnitch == null)
+ {
+ if (savedEndpoints == null)
+ savedEndpoints = SystemTable.loadDcRackInfo();
+ if (savedEndpoints.containsKey(endpoint))
+ return savedEndpoints.get(endpoint).get("data_center");
throw new RuntimeException("Could not retrieve DC for " + endpoint + " from gossip and PFS compatibility is disabled");
+ }
else
return psnitch.getDatacenter(endpoint);
}
@@ -91,7 +100,13 @@ public class GossipingPropertyFileSnitch extends AbstractNetworkTopologySnitch
if (epState == null || epState.getApplicationState(ApplicationState.RACK) == null)
{
if (psnitch == null)
+ {
+ if (savedEndpoints == null)
+ savedEndpoints = SystemTable.loadDcRackInfo();
+ if (savedEndpoints.containsKey(endpoint))
+ return savedEndpoints.get(endpoint).get("rack");
throw new RuntimeException("Could not retrieve rack for " + endpoint + " from gossip and PFS compatibility is disabled");
+ }
else
return psnitch.getRack(endpoint);
}