Updated Branches: refs/heads/trunk b983c816c -> c5df20832
fix counter add/get using CQL2 and CQL3 in stress tool patch by Aleksey Yeschenko; reviewed by Pavel Yaskevich for CASSANDRA-4633 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c5df2083 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c5df2083 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c5df2083 Branch: refs/heads/trunk Commit: c5df208327826dd197f1a9f743243bcd53de50f5 Parents: b983c81 Author: Pavel Yaskevich <[email protected]> Authored: Tue Sep 11 22:52:01 2012 +0300 Committer: Pavel Yaskevich <[email protected]> Committed: Tue Sep 11 22:52:01 2012 +0300 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../src/org/apache/cassandra/stress/Session.java | 47 +++++++++++++-- .../stress/operations/CqlCounterAdder.java | 9 ++- .../stress/operations/CqlCounterGetter.java | 17 ++++- 4 files changed, 62 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5df2083/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 1af1a4a..8d373cf 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -59,6 +59,7 @@ * update stress tool to be able to use CQL3 (CASSANDRA-4406) * Accept all thrift update on CQL3 cf but don't expose their metadata (CASSANDRA-4377) * Replace Throttle with Guava's RateLimiter for HintedHandOff (CASSANDRA-4541) + * fix counter add/get using CQL2 and CQL3 in stress tool (CASSANDRA-4633) 1.1.6 http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5df2083/tools/stress/src/org/apache/cassandra/stress/Session.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/Session.java b/tools/stress/src/org/apache/cassandra/stress/Session.java index eb1a902..8148522 100644 --- a/tools/stress/src/org/apache/cassandra/stress/Session.java +++ b/tools/stress/src/org/apache/cassandra/stress/Session.java @@ -47,6 +47,7 @@ public class Session implements Serializable // command line options public static final Options availableOptions = new Options(); + public static final String KEYSPACE_NAME = "Keyspace1"; public static final String DEFAULT_COMPARATOR = "AsciiType"; public static final String DEFAULT_VALIDATOR = "BytesType"; @@ -535,7 +536,7 @@ public class Session implements Serializable } /** - * Create Keyspace1 with Standard1 and Super1 column families + * Create Keyspace with Standard and Super/Counter column families */ public void createKeySpaces() { @@ -543,7 +544,7 @@ public class Session implements Serializable String defaultComparator = comparator == null ? DEFAULT_COMPARATOR : comparator; // column family for standard columns - CfDef standardCfDef = new CfDef("Keyspace1", "Standard1"); + CfDef standardCfDef = new CfDef(KEYSPACE_NAME, "Standard1"); Map<String, String> compressionOptions = new HashMap<String, String>(); if (compression != null) compressionOptions.put("sstable_compression", compression); @@ -568,19 +569,27 @@ public class Session implements Serializable } // column family with super columns - CfDef superCfDef = new CfDef("Keyspace1", "Super1").setColumn_type("Super"); + CfDef superCfDef = new CfDef(KEYSPACE_NAME, "Super1").setColumn_type("Super"); superCfDef.setComparator_type(DEFAULT_COMPARATOR) .setSubcomparator_type(defaultComparator) .setDefault_validation_class(DEFAULT_VALIDATOR) .setCompression_options(compressionOptions); // column family for standard counters - CfDef counterCfDef = new CfDef("Keyspace1", "Counter1").setDefault_validation_class("CounterColumnType").setReplicate_on_write(replicateOnWrite).setCompression_options(compressionOptions); + CfDef counterCfDef = new CfDef(KEYSPACE_NAME, "Counter1").setComparator_type(defaultComparator) + .setComparator_type(defaultComparator) + .setDefault_validation_class("CounterColumnType") + .setReplicate_on_write(replicateOnWrite) + .setCompression_options(compressionOptions); // column family with counter super columns - CfDef counterSuperCfDef = new CfDef("Keyspace1", "SuperCounter1").setDefault_validation_class("CounterColumnType").setReplicate_on_write(replicateOnWrite).setColumn_type("Super").setCompression_options(compressionOptions); + CfDef counterSuperCfDef = new CfDef(KEYSPACE_NAME, "SuperCounter1").setComparator_type(defaultComparator) + .setDefault_validation_class("CounterColumnType") + .setReplicate_on_write(replicateOnWrite) + .setColumn_type("Super") + .setCompression_options(compressionOptions); - keyspace.setName("Keyspace1"); + keyspace.setName(KEYSPACE_NAME); keyspace.setStrategy_class(replicationStrategy); if (!replicationStrategyOptions.isEmpty()) @@ -603,6 +612,17 @@ public class Session implements Serializable try { client.system_add_keyspace(keyspace); + + /* CQL3 counter cf */ + client.set_cql_version("3.0.0"); // just to create counter cf for cql3 + + client.set_keyspace(KEYSPACE_NAME); + client.execute_cql_query(createCounterCFStatementForCQL3(), Compression.NONE); + + if (enable_cql) + client.set_cql_version(cqlVersion); + /* end */ + System.out.println(String.format("Created keyspaces. Sleeping %ss for propagation.", nodes.length)); Thread.sleep(nodes.length * 1000); // seconds } @@ -678,4 +698,19 @@ public class Session implements Serializable return localInetAddress; } + + private ByteBuffer createCounterCFStatementForCQL3() + { + StringBuilder counter3 = new StringBuilder("CREATE TABLE \"Counter3\" (KEY blob PRIMARY KEY, "); + + for (int i = 0; i < getColumnsPerKey(); i++) + { + counter3.append("c").append(i).append(" counter"); + if (i != getColumnsPerKey() - 1) + counter3.append(", "); + } + counter3.append(");"); + + return ByteBufferUtil.bytes(counter3.toString()); + } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5df2083/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterAdder.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterAdder.java b/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterAdder.java index 7197eaa..7ca4b0f 100644 --- a/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterAdder.java +++ b/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterAdder.java @@ -48,8 +48,12 @@ public class CqlCounterAdder extends Operation if (cqlQuery == null) { - StringBuilder query = new StringBuilder( - "UPDATE Counter1 USING CONSISTENCY " + session.getConsistencyLevel().toString() + " SET "); + String counterCF = session.cqlVersion.startsWith("2") ? "Counter1" : "Counter3"; + + StringBuilder query = new StringBuilder("UPDATE ").append(wrapInQuotesIfRequired(counterCF)) + .append(" USING CONSISTENCY ") + .append(session.getConsistencyLevel()) + .append(" SET "); for (int i = 0; i < session.getColumnsPerKey(); i++) { @@ -57,7 +61,6 @@ public class CqlCounterAdder extends Operation query.append(","); query.append('C').append(i).append("=C").append(i).append("+1"); - } query.append(" WHERE KEY=?"); cqlQuery = query.toString(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/c5df2083/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterGetter.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterGetter.java b/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterGetter.java index 1133747..75a59ba 100644 --- a/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterGetter.java +++ b/tools/stress/src/org/apache/cassandra/stress/operations/CqlCounterGetter.java @@ -50,9 +50,20 @@ public class CqlCounterGetter extends Operation if (cqlQuery == null) { - StringBuilder query = new StringBuilder("SELECT FIRST ").append(session.getColumnsPerKey()) - .append(" ''..'' FROM Counter1 USING CONSISTENCY ").append(session.getConsistencyLevel().toString()) - .append(" WHERE KEY=?"); + StringBuilder query = new StringBuilder("SELECT "); + + if (session.cqlVersion.startsWith("2")) + query.append("FIRST ").append(session.getColumnsPerKey()).append(" ''..''"); + else + query.append("*"); + + String counterCF = session.cqlVersion.startsWith("2") ? "Counter1" : "Counter3"; + + query.append(" FROM ").append(wrapInQuotesIfRequired(counterCF)) + .append(" USING CONSISTENCY ") + .append(session.getConsistencyLevel().toString()) + .append(" WHERE KEY=?"); + cqlQuery = query.toString(); }
