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

[1/3] git commit: Move consistency level to the protocol level

Updated Branches:
  refs/heads/trunk 771005e99 -> 297f530c2


Move consistency level to the protocol level

patch by slebresne; reviewed by jbellis for CASSANDRA-4734


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

Branch: refs/heads/trunk
Commit: 297f530c246a8dcfa3372d33204f17c2edee7b45
Parents: 771005e
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Mon Oct 1 16:28:41 2012 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Tue Oct 16 18:00:36 2012 +0200

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 NEWS.txt                                           |    2 +
 doc/native_protocol.spec                           |   32 +-
 interface/cassandra.thrift                         |   24 +-
 .../org/apache/cassandra/thrift/Cassandra.java     | 3772 ++++++++++++++-
 .../org/apache/cassandra/thrift/Constants.java     |    2 +-
 .../apache/cassandra/thrift/TimedOutException.java |    2 -
 .../org/apache/cassandra/config/CFMetaData.java    |   39 +-
 src/java/org/apache/cassandra/cql3/Attributes.java |    1 -
 src/java/org/apache/cassandra/cql3/CFPropDefs.java |   24 -
 .../org/apache/cassandra/cql3/CQLStatement.java    |    3 +-
 src/java/org/apache/cassandra/cql3/Cql.g           |   14 +-
 .../org/apache/cassandra/cql3/QueryProcessor.java  |   12 +-
 .../cassandra/cql3/statements/BatchStatement.java  |   40 +-
 .../cassandra/cql3/statements/DeleteStatement.java |   16 +-
 .../cql3/statements/ModificationStatement.java     |   57 +-
 .../statements/PermissionAlteringStatement.java    |   12 +
 .../cql3/statements/SchemaAlteringStatement.java   |   13 +-
 .../cassandra/cql3/statements/SelectStatement.java |   25 +-
 .../cql3/statements/TruncateStatement.java         |    3 +-
 .../cassandra/cql3/statements/UpdateStatement.java |   23 +-
 .../cassandra/cql3/statements/UseStatement.java    |    3 +-
 .../apache/cassandra/thrift/CassandraServer.java   |  126 +-
 .../org/apache/cassandra/transport/CBUtil.java     |   25 +
 .../org/apache/cassandra/transport/Client.java     |    7 +-
 .../apache/cassandra/transport/SimpleClient.java   |    9 +-
 .../cassandra/transport/messages/ErrorMessage.java |    8 +-
 .../transport/messages/ExecuteMessage.java         |   19 +-
 .../cassandra/transport/messages/QueryMessage.java |   14 +-
 29 files changed, 3984 insertions(+), 344 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/297f530c/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index ddd21ab..5a8dbd9 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -30,6 +30,7 @@
  * Run leveled compaction in parallel (CASSANDRA-4310)
  * Fix potential NPE during CFS reload (CASSANDRA-4786)
  * Composite indexes may miss results (CASSANDRA-4796)
+ * Move consistency level to the protocol level (CASSANDRA-4734)
 
 
 1.2-beta1

http://git-wip-us.apache.org/repos/asf/cassandra/blob/297f530c/NEWS.txt
----------------------------------------------------------------------
diff --git a/NEWS.txt b/NEWS.txt
index f1649ad..920940f 100644
--- a/NEWS.txt
+++ b/NEWS.txt
@@ -63,6 +63,8 @@ Upgrading
       syntax to create a keyspace is now:
         CREATE KEYSPACE ks WITH replication = { 'class' : 'SimpleStrategy',
                                                 'replication_factor' : 2 };
+      Also, the consistency level cannot be set in the language anymore, but is
+      at the protocol level.
       Please refer to the CQL3 documentation for details.
 
 Features

http://git-wip-us.apache.org/repos/asf/cassandra/blob/297f530c/doc/native_protocol.spec
----------------------------------------------------------------------
diff --git a/doc/native_protocol.spec b/doc/native_protocol.spec
index a7fa7cb..b8152bc 100644
--- a/doc/native_protocol.spec
+++ b/doc/native_protocol.spec
@@ -174,6 +174,15 @@ Table of Contents
                    [byte] repesenting the IP address (in practice n can only be
                    either 4 (IPv4) or 16 (IPv6)), following by one [int]
                    representing the port.
+    [consistency]  A consistency level specification. This is a [string] having
+                   one of the following value: "", "ANY", "ONE", "TWO", "THREE",
+                   "QUORUM", "ALL", "LOCAL_QUORUM", "EACH_QUORUM". It is
+                   possible to provide an empty string, in which case a default
+                   consistency will be used server side. Providing an empty
+                   consistency level can also be useful to save bytes for cases
+                   where a [consistency] is required by the protocol but not
+                   strictly by the operation. The server never sends an empty
+                   [consistency] however.
 
     [string map]      A [short] n, followed by n pair <k><v> where <k> and <v>
                       are [string].
@@ -232,7 +241,10 @@ Table of Contents
 4.1.4. QUERY
 
   Performs a CQL query. The body of the message consists of a CQL query as a [long
-  string].
+  string] followed by the [consistency] for the operation.
+
+  Note that the consistency is ignored by some queries (USE, CREATE, ALTER,
+  TRUNCATE, ...).
 
   The server will respond to a QUERY message with a RESULT message, the content
   of which depends on the query.
@@ -250,13 +262,17 @@ Table of Contents
 4.1.6. EXECUTE
 
   Executes a prepared query. The body of the message must be:
-    <id><n><value_1>....<value_n>
+    <id><n><value_1>....<value_n><consistency>
   where:
     - <id> is the prepared query ID. It's the [short bytes] returned as a
       response to a PREPARE message.
     - <n> is a [short] indicating the number of following values.
     - <value_1>...<value_n> are the [bytes] to use for bound variables in the
       prepared query.
+    - <consistency> is the [consistency] level for the operation.
+
+  Note that the consistency is ignored by some (prepared) queries (USE, CREATE,
+  ALTER, TRUNCATE, ...).
 
   The response from the server will be a RESULT message.
 
@@ -509,8 +525,8 @@ Table of Contents
     0x1000    Unavailable exception. The rest of the ERROR message body will be
                 <cl><required><alive>
               where:
-                <cl> is a [string] representing the consistency level of the
-                     query having triggered the exception.
+                <cl> is the [consistency] level of the query having triggered
+                     the exception.
                 <required> is an [int] representing the number of node that
                            should be alive to respect <cl>
                 <alive> is an [int] representing the number of replica that
@@ -526,8 +542,8 @@ Table of Contents
               of the ERROR message body will be
                 <cl><received><blockfor><writeType>
               where:
-                <cl> is a [string] representing the consistency level of the
-                     query having triggered the exception.
+                <cl> is the [consistency] level of the query having triggered
+                     the exception.
                 <received> is an [int] representing the number of nodes having
                            acknowledged the request.
                 <blockfor> is the number of replica whose acknowledgement is
@@ -552,8 +568,8 @@ Table of Contents
               of the ERROR message body will be
                 <cl><received><blockfor><data_present>
               where:
-                <cl> is a [string] representing the consistency level of the
-                     query having triggered the exception.
+                <cl> is the [consistency] level of the query having triggered
+                     the exception.
                 <received> is an [int] representing the number of nodes having
                            answered the request.
                 <blockfor> is the number of replica whose response is

http://git-wip-us.apache.org/repos/asf/cassandra/blob/297f530c/interface/cassandra.thrift
----------------------------------------------------------------------
diff --git a/interface/cassandra.thrift b/interface/cassandra.thrift
index a2d0294..237d2bf 100644
--- a/interface/cassandra.thrift
+++ b/interface/cassandra.thrift
@@ -55,7 +55,7 @@ namespace rb CassandraThrift
 # An effort should be made not to break forward-client-compatibility either
 # (e.g. one should avoid removing obsolete fields from the IDL), but no
 # guarantees in this respect are made by the Cassandra project.
-const string VERSION = "19.34.0"
+const string VERSION = "19.35.0"
 
 
 #
@@ -772,8 +772,14 @@ service Cassandra {
             2:UnavailableException ue,
             3:TimedOutException te,
             4:SchemaDisagreementException sde)
-            
-            
+
+  CqlResult execute_cql3_query(1:required binary query, 2:required Compression compression, 3:required ConsistencyLevel consistency)
+    throws (1:InvalidRequestException ire,
+            2:UnavailableException ue,
+            3:TimedOutException te,
+            4:SchemaDisagreementException sde)
+
+
   /**
    * Prepare a CQL (Cassandra Query Language) statement by compiling and returning
    * - the type of CQL statement
@@ -783,6 +789,9 @@ service Cassandra {
   CqlPreparedResult prepare_cql_query(1:required binary query, 2:required Compression compression)
     throws (1:InvalidRequestException ire)
 
+  CqlPreparedResult prepare_cql3_query(1:required binary query, 2:required Compression compression)
+    throws (1:InvalidRequestException ire)
+
              
   /**
    * Executes a prepared CQL (Cassandra Query Language) statement by passing an id token and  a list of variables
@@ -794,5 +803,14 @@ service Cassandra {
             3:TimedOutException te,
             4:SchemaDisagreementException sde)
 
+  CqlResult execute_prepared_cql3_query(1:required i32 itemId, 2:required list<binary> values, 3:required ConsistencyLevel consistency)
+    throws (1:InvalidRequestException ire,
+            2:UnavailableException ue,
+            3:TimedOutException te,
+            4:SchemaDisagreementException sde)
+
+  /**
+   * @Deprecated This is now a no-op. Please use the CQL3 specific methods instead.
+   */
   void set_cql_version(1: required string version) throws (1:InvalidRequestException ire)
 }