Author: jbellis
Date: Mon Mar 21 14:45:14 2011
New Revision: 1083809

URL: http://svn.apache.org/viewvc?rev=1083809&view=rev
Log:
add consistencylevel command to CLI
patch by Ed Capriolo; reviewed by Pavel Yaskevich for CASSANDRA-2354

Modified:
    cassandra/branches/cassandra-0.7/CHANGES.txt
    cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/Cli.g
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliCompleter.java
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUserHelp.java

Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1083809&r1=1083808&r2=1083809&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Mon Mar 21 14:45:14 2011
@@ -13,6 +13,7 @@
  * ensure size calculation and write phase of large-row compaction use
    the same threshold for TTL expiration (CASSANDRA-2349)
  * fix race when iterating CFs during add/drop (CASSANDRA-2350)
+ * add ConsistencyLevel command to CLI (CASSANDRA-2354)
 
 
 0.7.4

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/Cli.g
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/Cli.g?rev=1083809&r1=1083808&r2=1083809&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/Cli.g 
(original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/Cli.g 
Mon Mar 21 14:45:14 2011
@@ -58,6 +58,7 @@ tokens {
     NODE_LIST;
     NODE_TRUNCATE;
     NODE_ASSUME;
+    NODE_CONSISTENCY_LEVEL;
 
     // Internal Nodes.
     NODE_COLUMN_ACCESS;
@@ -155,6 +156,7 @@ statement
     | listStatement
     | truncateStatement
     | assumeStatement
+    | consistencyLevelStatement
     | -> ^(NODE_NO_OP)
     ;
 
@@ -212,6 +214,8 @@ helpStatement
         -> ^(NODE_HELP NODE_TRUNCATE)
     | HELP ASSUME
         -> ^(NODE_HELP NODE_ASSUME)
+    | HELP CONSISTENCYLEVEL
+        -> ^(NODE_HELP NODE_CONSISTENCY_LEVEL)
     | HELP 
         -> ^(NODE_HELP)
     | '?'    
@@ -279,6 +283,11 @@ assumeStatement
         -> ^(NODE_ASSUME columnFamily $assumptionElement $defaultType)
     ;
 
+consistencyLevelStatement
+    : CONSISTENCYLEVEL 'AS' defaultType=Identifier
+        -> ^(NODE_CONSISTENCY_LEVEL $defaultType)
+    ;
+
 showClusterName
     : SHOW 'CLUSTER NAME'
         -> ^(NODE_SHOW_CLUSTER_NAME)
@@ -533,6 +542,7 @@ LIMIT:       'LIMIT';
 TRUNCATE:    'TRUNCATE';
 ASSUME:      'ASSUME';
 TTL:         'TTL';
+CONSISTENCYLEVEL:   'CONSISTENCYLEVEL';
 
 IP_ADDRESS 
     : IntegerLiteral '.' IntegerLiteral '.' IntegerLiteral '.' IntegerLiteral

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java?rev=1083809&r1=1083808&r2=1083809&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliClient.java
 Mon Mar 21 14:45:14 2011
@@ -103,8 +103,8 @@ public class CliClient extends CliUserHe
     private String username = null;
     private Map<String, KsDef> keyspacesMap = new HashMap<String, KsDef>();
     private Map<String, AbstractType> cfKeysComparators;
-    
-    
+    private ConsistencyLevel consistencyLevel = ConsistencyLevel.ONE;   
+ 
     public CliClient(CliSessionState cliSessionState, Cassandra.Client 
thriftClient)
     {
         this.sessionState = cliSessionState;
@@ -190,6 +190,9 @@ public class CliClient extends CliUserHe
                 case CliParser.NODE_ASSUME:
                     executeAssumeStatement(tree);
                     break;
+                case CliParser.NODE_CONSISTENCY_LEVEL:
+                    executeConsistencyLevelStatement(tree);
+                    break;
                 case CliParser.NODE_NO_OP:
                     // comment lines come here; they are treated as no ops.
                     break;
@@ -249,7 +252,7 @@ public class CliClient extends CliUserHe
         SliceRange range = new SliceRange(ByteBufferUtil.EMPTY_BYTE_BUFFER, 
ByteBufferUtil.EMPTY_BYTE_BUFFER, false, Integer.MAX_VALUE);
         SlicePredicate predicate = new 
SlicePredicate().setColumn_names(null).setSlice_range(range);
 
-        int count = 
thriftClient.get_count(ByteBuffer.wrap(key.getBytes(Charsets.UTF_8)), 
colParent, predicate, ConsistencyLevel.ONE);
+        int count = 
thriftClient.get_count(ByteBuffer.wrap(key.getBytes(Charsets.UTF_8)), 
colParent, predicate, consistencyLevel);
         sessionState.out.printf("%d columns%n", count);
     }
     
@@ -299,7 +302,7 @@ public class CliClient extends CliUserHe
             path.setColumn(columnName);
 
         thriftClient.remove(ByteBuffer.wrap(key.getBytes(Charsets.UTF_8)), 
path,
-                             FBUtilities.timestampMicros(), 
ConsistencyLevel.ONE);
+                             FBUtilities.timestampMicros(), consistencyLevel);
         sessionState.out.println(String.format("%s removed.", (columnSpecCnt 
== 0) ? "row" : "column"));
     }
 
@@ -312,7 +315,7 @@ public class CliClient extends CliUserHe
             parent.setSuper_column(superColumnName);
 
         SliceRange range = new SliceRange(ByteBufferUtil.EMPTY_BYTE_BUFFER, 
ByteBufferUtil.EMPTY_BYTE_BUFFER, false, 1000000);
-        List<ColumnOrSuperColumn> columns = thriftClient.get_slice(key, 
parent, new SlicePredicate().setColumn_names(null).setSlice_range(range), 
ConsistencyLevel.ONE);
+        List<ColumnOrSuperColumn> columns = thriftClient.get_slice(key, 
parent, new SlicePredicate().setColumn_names(null).setSlice_range(range), 
consistencyLevel);
 
         AbstractType validator;
         CfDef cfDef = getCfDef(columnFamily);
@@ -438,7 +441,7 @@ public class CliClient extends CliUserHe
         Column column;
         try
         {
-            column = thriftClient.get(key, path, ConsistencyLevel.ONE).column;
+            column = thriftClient.get(key, path, consistencyLevel).column;
         }
         catch (NotFoundException e)
         {
@@ -564,7 +567,7 @@ public class CliClient extends CliUserHe
         try
         {
             ColumnParent parent = new ColumnParent(columnFamily);
-            slices = thriftClient.get_indexed_slices(parent, clause, 
predicate, ConsistencyLevel.ONE);
+            slices = thriftClient.get_indexed_slices(parent, clause, 
predicate, consistencyLevel);
             printSliceList(columnFamilyDef, slices);
         }
         catch (InvalidRequestException e)
@@ -661,7 +664,7 @@ public class CliClient extends CliUserHe
         }
 
         // do the insert
-        thriftClient.insert(getKeyAsBytes(columnFamily, keyTree), parent, 
columnToInsert, ConsistencyLevel.ONE);
+        thriftClient.insert(getKeyAsBytes(columnFamily, keyTree), parent, 
columnToInsert, consistencyLevel);
         sessionState.out.println("Value inserted.");
     }
 
@@ -1025,7 +1028,7 @@ public class CliClient extends CliUserHe
         range.setStart_key(startKey).setEnd_key(endKey);
 
         ColumnParent columnParent = new ColumnParent(columnFamily);
-        List<KeySlice> keySlices = thriftClient.get_range_slices(columnParent, 
predicate, range, ConsistencyLevel.ONE);
+        List<KeySlice> keySlices = thriftClient.get_range_slices(columnParent, 
predicate, range, consistencyLevel);
         printSliceList(columnFamilyDef, keySlices);
     }
 
@@ -1054,6 +1057,32 @@ public class CliClient extends CliUserHe
     }
 
     /**
+     * Command: CONSISTENCYLEVEL AS (ONE | QUORUM ...)
+     * Tree: ^(NODE_CONSISTENCY_LEVEL AS (ONE | QUORUM ...))
+     * @param statement - tree representing current statement
+     */
+    private void executeConsistencyLevelStatement(Tree statement)
+    {
+        if (!CliMain.isConnected())
+            return;
+
+        String userSuppliedLevel = 
statement.getChild(0).getText().toUpperCase();
+
+        try
+        {
+            consistencyLevel = ConsistencyLevel.valueOf(userSuppliedLevel);
+        }
+        catch (IllegalArgumentException e)
+        {
+            String elements = "ONE, TWO, THREE, QUORUM, ALL, LOCAL_QUORUM, 
EACH_QUORUM, ANY";
+            sessionState.out.println(String.format("'%s' is invalid. 
Available: %s", userSuppliedLevel, elements));
+            return;
+        }
+
+        sessionState.out.println(String.format("Consistency level is set to 
'%s'.", consistencyLevel));
+    }
+
+    /**
      * Command: ASSUME <columnFamily> (VALIDATOR | COMPARATOR | KEYS | 
SUB_COMPARATOR) AS <type>
      * Tree: ^(NODE_ASSUME <columnFamily> (VALIDATOR | COMPARATOR | KEYS | 
SUB_COMPARATOR) <type>))
      * @param statement - tree representing current statement

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliCompleter.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliCompleter.java?rev=1083809&r1=1083808&r2=1083809&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliCompleter.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliCompleter.java
 Mon Mar 21 14:45:14 2011
@@ -36,6 +36,7 @@ public class CliCompleter extends Simple
             "drop column family",
             "rename keyspace",
             "rename column family",
+            "consistencylevel",
             
             "help connect",
             "help describe keyspace",
@@ -56,7 +57,8 @@ public class CliCompleter extends Simple
             "help del",
             "help count",
             "help list",
-            "help truncate"
+            "help truncate",
+            "help consistencylevel"
     };
     private static String[] keyspaceCommands = {
             "get",

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUserHelp.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUserHelp.java?rev=1083809&r1=1083808&r2=1083809&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUserHelp.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/cli/CliUserHelp.java
 Mon Mar 21 14:45:14 2011
@@ -325,7 +325,11 @@ public class CliUserHelp {
                 state.out.println("example:");
                 state.out.println("assume Users comparator as lexicaluuid;");
                 break;
-
+            case CliParser.NODE_CONSISTENCY_LEVEL:
+                state.out.println("consistencylevel as <level>");
+                state.out.println("example:");
+                state.out.println("consistencylevel as QUORUM");
+                break;
             default:
                 state.out.println("?");
                 break;
@@ -372,6 +376,8 @@ public class CliUserHelp {
             state.out.println("truncate <column_family>;                      
Truncate specified column family.");
             state.out.println("assume <column_family> <attribute> as <type>;");
             state.out.println("              Assume a given column family 
attributes to match a specified type.");
+            state.out.println("consistencylevel as <level>;");
+            state.out.println("                  Change the consistency level 
for set,get, and list operations.");
             state.out.println("list <cf>;                                   
List all rows in the column family.");
             state.out.println("list <cf>[<startKey>:];");
             state.out.println("                       List rows in the column 
family beginning with <startKey>.");


Reply via email to