Backport MultiSliceRequest

Patch by Ed Capriolo; Reviewed by tjake for CASSANDRA-7027


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

Branch: refs/heads/trunk
Commit: 7f63b1f958f0f502f04d24f8d820d29bd484786d
Parents: 4a295b6
Author: Jake Luciani <j...@apache.org>
Authored: Tue May 27 11:27:17 2014 -0400
Committer: Jake Luciani <j...@apache.org>
Committed: Wed May 28 12:50:35 2014 -0400

----------------------------------------------------------------------
 CHANGES.txt                                     |    1 +
 interface/cassandra.thrift                      |   35 +-
 .../org/apache/cassandra/thrift/Cassandra.java  | 3071 +++++++++++++-----
 .../org/apache/cassandra/thrift/CfDef.java      |  298 +-
 .../apache/cassandra/thrift/ColumnSlice.java    |  551 ++++
 .../org/apache/cassandra/thrift/CqlRow.java     |    7 +-
 .../cassandra/thrift/MultiSliceRequest.java     | 1042 ++++++
 .../cassandra/thrift/CassandraServer.java       |   68 +
 .../apache/cassandra/thrift/MultiSliceTest.java |  149 +
 9 files changed, 4174 insertions(+), 1048 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/7f63b1f9/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index a71867a..a7cc872 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -25,6 +25,7 @@
  * Fix broken paging state with prepared statement (CASSANDRA-7120)
  * Fix IllegalArgumentException in CqlStorage (CASSANDRA-7287)
  * Allow nulls/non-existant fields in UDT (CASSANDRA-7206)
+ * Backport Thrift MultiSliceRequest (CASSANDRA-7027)
 Merged from 2.0:
  * Copy compaction options to make sure they are reloaded (CASSANDRA-7290)
  * Add option to do more aggressive tombstone compactions (CASSANDRA-6563)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/7f63b1f9/interface/cassandra.thrift
----------------------------------------------------------------------
diff --git a/interface/cassandra.thrift b/interface/cassandra.thrift
index 4beb2eb..2484a5d 100644
--- a/interface/cassandra.thrift
+++ b/interface/cassandra.thrift
@@ -117,7 +117,6 @@ struct ColumnOrSuperColumn {
     4: optional CounterSuperColumn counter_super_column
 }
 
-
 #
 # Exceptions
 # (note that internal server errors will raise a TApplicationException, 
courtesy of Thrift)
@@ -571,6 +570,35 @@ struct CfSplit {
     3: required i64 row_count
 }
 
+/** The ColumnSlice is used to select a set of columns from inside a row.
+ * If start or finish are unspecified they will default to the start-of
+ * end-of value.
+ * @param start. The start of the ColumnSlice inclusive
+ * @param finish. The end of the ColumnSlice inclusive
+ */
+struct ColumnSlice {
+    1: optional binary start,
+    2: optional binary finish
+}
+
+/**
+ * Used to perform multiple slices on a single row key in one rpc operation
+ * @param key. The row key to be multi sliced
+ * @param column_parent. The column family (super columns are unsupported)
+ * @param column_slices. 0 to many ColumnSlice objects each will be used to 
select columns
+ * @param reversed. Direction of slice
+ * @param count. Maximum number of columns
+ * @param consistency_level. Level to perform the operation at
+ */
+struct MultiSliceRequest {
+    1: optional binary key,
+    2: optional ColumnParent column_parent,
+    3: optional list<ColumnSlice> column_slices,
+    4: optional bool reversed=false,
+    5: optional i32 count=1000,
+    6: optional ConsistencyLevel consistency_level=ConsistencyLevel.ONE
+}
+
 service Cassandra {
   # auth methods
   void login(1: required AuthenticationRequest auth_request) throws 
(1:AuthenticationException authnx, 2:AuthorizationException authzx),
@@ -749,6 +777,11 @@ service Cassandra {
   void truncate(1:required string cfname)
        throws (1: InvalidRequestException ire, 2: UnavailableException ue, 3: 
TimedOutException te),
 
+  /**
+  * Select multiple slices of a key in a single RPC operation
+  */
+  list<ColumnOrSuperColumn> get_multi_slice(1:required MultiSliceRequest 
request)
+       throws (1:InvalidRequestException ire, 2:UnavailableException ue, 
3:TimedOutException te),
 
     
   // Meta-APIs -- APIs to get information about the node or cluster,

Reply via email to