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

[9/15] git commit: Fallback to old describe_splits if d_s_ex is not available patch by Piotr Kołaczkowski; reviewed by jbellis for CASSANDRA-4803

Fallback to old describe_splits if d_s_ex is not available
patch by Piotr Kołaczkowski; reviewed by jbellis for CASSANDRA-4803


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/37067495
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/37067495
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/37067495

Branch: refs/heads/trunk
Commit: 37067495cfa818b9adeea0c6a08898dbec088c80
Parents: 2f4b6d8
Author: Jonathan Ellis <jb...@apache.org>
Authored: Wed Nov 28 00:01:32 2012 +0900
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Wed Nov 28 00:01:32 2012 +0900

----------------------------------------------------------------------
 CHANGES.txt                                        |    4 ++
 .../cassandra/hadoop/ColumnFamilyInputFormat.java  |   27 ++++++++++++++-
 .../apache/cassandra/thrift/CassandraServer.java   |    1 -
 3 files changed, 30 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/37067495/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 6401cd0..066065d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,3 +1,7 @@
+1.1.8
+ * Fall back to old describe_splits if d_s_ex is not available (CASSANDRA-4803)
+
+
 1.1.7
  * cqlsh: improve COPY FROM performance (CASSANDRA-4921)
  * add basic authentication support for Pig CassandraStorage (CASSANDRA-3042)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/37067495/src/java/org/apache/cassandra/hadoop/ColumnFamilyInputFormat.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/hadoop/ColumnFamilyInputFormat.java b/src/java/org/apache/cassandra/hadoop/ColumnFamilyInputFormat.java
index 4de6984..eda9898 100644
--- a/src/java/org/apache/cassandra/hadoop/ColumnFamilyInputFormat.java
+++ b/src/java/org/apache/cassandra/hadoop/ColumnFamilyInputFormat.java
@@ -35,7 +35,9 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Lists;
 import org.apache.commons.lang.StringUtils;
+import org.apache.thrift.TApplicationException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -253,7 +255,21 @@ public class ColumnFamilyInputFormat extends InputFormat<ByteBuffer, SortedMap<B
             {
                 Cassandra.Client client = ConfigHelper.createConnection(conf, host, ConfigHelper.getInputRpcPort(conf));
                 client.set_keyspace(keyspace);
-                return client.describe_splits_ex(cfName, range.start_token, range.end_token, splitsize);
+
+                try
+                {
+                    return client.describe_splits_ex(cfName, range.start_token, range.end_token, splitsize);
+                }
+                catch (TApplicationException e)
+                {
+                    // fallback to guessing split size if talking to a server without describe_splits_ex method
+                    if (e.getType() == TApplicationException.UNKNOWN_METHOD)
+                    {
+                        List<String> splitPoints = client.describe_splits(cfName, range.start_token, range.end_token, splitsize);
+                        return tokenListToSplits(splitPoints, splitsize);
+                    }
+                    throw e;
+                }
             }
             catch (IOException e)
             {
@@ -272,6 +288,15 @@ public class ColumnFamilyInputFormat extends InputFormat<ByteBuffer, SortedMap<B
     }
 
 
+    private List<CfSplit> tokenListToSplits(List<String> splitTokens, int splitsize)
+    {
+        List<CfSplit> splits = Lists.newArrayListWithExpectedSize(splitTokens.size() - 1);
+        for (int j = 0; j < splitTokens.size() - 1; j++)
+            splits.add(new CfSplit(splitTokens.get(j), splitTokens.get(j + 1), splitsize));
+        return splits;
+    }
+
+
     private List<TokenRange> getRangeMap(Configuration conf) throws IOException
     {
         Cassandra.Client client = ConfigHelper.getClientFromInputAddressList(conf);

http://git-wip-us.apache.org/repos/asf/cassandra/blob/37067495/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java
index b196b2f..6c0a295 100644
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@ -905,7 +905,6 @@ public class CassandraServer implements Cassandra.Iface
         return result;
     }
 
-    @Override
     public List<CfSplit> describe_splits_ex(String cfName, String start_token, String end_token, int keys_per_split)
     throws InvalidRequestException, TException
     {