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>.");