Updated Branches:
  refs/heads/trunk 500a529e7 -> 02769d5b6

update stress tool to be able to use CQL3
patch by David Alves; reviewed by Pavel Yaskevich for CASSANDRA-4406


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

Branch: refs/heads/trunk
Commit: 02769d5b69d5a5a7512c0f605793f21750b2c4ca
Parents: 500a529
Author: Pavel Yaskevich <xe...@apache.org>
Authored: Mon Sep 10 20:32:38 2012 +0300
Committer: Pavel Yaskevich <xe...@apache.org>
Committed: Mon Sep 10 20:33:09 2012 +0300

----------------------------------------------------------------------
 CHANGES.txt                                        |    2 +
 .../src/org/apache/cassandra/stress/Session.java   |   26 ++++++++++-
 .../cassandra/stress/operations/CqlInserter.java   |   35 +++++++++-----
 .../cassandra/stress/operations/CqlReader.java     |   16 +++++--
 .../apache/cassandra/stress/util/Operation.java    |    7 +++
 5 files changed, 68 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/02769d5b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 0ad5b66..896b8cc 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -56,6 +56,8 @@
  * Adds events push to binary protocol (CASSANDRA-4480)
  * Rewrite nodetool help (CASSANDRA-2293)
  * Make CQL3 the default for CQL (CASSANDRA-4640)
+ * update stress tool to be able to use CQL3 (CASSANDRA-4406)
+
 
 1.1.6
   * (cql3) fix potential NPE with both equal and unequal restriction 
(CASSANDRA-4532)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/02769d5b/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 9fff043..eb1a902 100644
--- a/tools/stress/src/org/apache/cassandra/stress/Session.java
+++ b/tools/stress/src/org/apache/cassandra/stress/Session.java
@@ -81,7 +81,8 @@ public class Session implements Serializable
         availableOptions.addOption("i",  "progress-interval",    true,   
"Progress Report Interval (seconds), default:10");
         availableOptions.addOption("g",  "keys-per-call",        true,   
"Number of keys to get_range_slices or multiget per call, default:1000");
         availableOptions.addOption("l",  "replication-factor",   true,   
"Replication Factor to use when creating needed column families, default:1");
-        availableOptions.addOption("L",  "enable-cql",           false,  
"Perform queries using CQL (Cassandra Query Language).");
+        availableOptions.addOption("L",  "enable-cql",           false,  
"Perform queries using CQL2 (Cassandra Query Language v 2.0.0)");
+        availableOptions.addOption("L3", "enable-cql3",          false,  
"Perform queries using CQL3 (Cassandra Query Language v 3.0.0)");
         availableOptions.addOption("P",  "use-prepared-statements", false, 
"Perform queries using prepared statements (only applicable to CQL).");
         availableOptions.addOption("e",  "consistency-level",    true,   
"Consistency Level to use (ONE, QUORUM, LOCAL_QUORUM, EACH_QUORUM, ALL, ANY), 
default:ONE");
         availableOptions.addOption("x",  "create-index",         true,   "Type 
of index to create on needed column families (KEYS)");
@@ -132,6 +133,8 @@ public class Session implements Serializable
     // if we know exactly column names that we want to read (set by -Q option)
     public final List<ByteBuffer> columnNames;
 
+    public String cqlVersion;
+
     public final boolean averageSizeValues;
 
     // required by Gaussian distribution.
@@ -269,7 +272,17 @@ public class Session implements Serializable
                 replicationStrategyOptions.put("replication_factor", "1");
 
             if (cmd.hasOption("L"))
+            {
                 enable_cql = true;
+                cqlVersion = "2.0.0";
+            }
+
+            if (cmd.hasOption("L3"))
+            {
+                enable_cql = true;
+                cqlVersion = "3.0.0";
+            }
+
 
             if (cmd.hasOption("P"))
             {
@@ -539,6 +552,14 @@ public class Session implements Serializable
                      .setDefault_validation_class(DEFAULT_VALIDATOR)
                      .setCompression_options(compressionOptions);
 
+        if (!timeUUIDComparator)
+        {
+            for (int i = 0; i < getColumnsPerKey(); i++)
+            {
+                standardCfDef.addToColumn_metadata(new 
ColumnDef(ByteBufferUtil.bytes("C" + i), "BytesType"));
+            }
+        }
+
         if (indexType != null)
         {
             ColumnDef standardColumn = new 
ColumnDef(ByteBufferUtil.bytes("C1"), "BytesType");
@@ -621,6 +642,9 @@ public class Session implements Serializable
         {
             transport.open();
 
+            if (enable_cql)
+                client.set_cql_version(cqlVersion);
+
             if (setKeyspace)
             {
                 client.set_keyspace("Keyspace1");

http://git-wip-us.apache.org/repos/asf/cassandra/blob/02769d5b/tools/stress/src/org/apache/cassandra/stress/operations/CqlInserter.java
----------------------------------------------------------------------
diff --git 
a/tools/stress/src/org/apache/cassandra/stress/operations/CqlInserter.java 
b/tools/stress/src/org/apache/cassandra/stress/operations/CqlInserter.java
index c729f2f..25c42b0 100644
--- a/tools/stress/src/org/apache/cassandra/stress/operations/CqlInserter.java
+++ b/tools/stress/src/org/apache/cassandra/stress/operations/CqlInserter.java
@@ -54,13 +54,27 @@ public class CqlInserter extends Operation
         // Construct a query string once.
         if (cqlQuery == null)
         {
-            StringBuilder query = new StringBuilder("UPDATE Standard1 USING 
CONSISTENCY ")
+            StringBuilder query = new StringBuilder("UPDATE 
").append(wrapInQuotesIfRequired("Standard1"))
+                    .append(" USING CONSISTENCY ")
                     .append(session.getConsistencyLevel().toString()).append(" 
SET ");
 
             for (int i = 0; i < session.getColumnsPerKey(); i++)
             {
-                if (i > 0) query.append(',');
-                query.append("?=?");
+                if (i > 0)
+                    query.append(',');
+
+                if (session.timeUUIDComparator)
+                {
+                    if (session.cqlVersion.startsWith("3"))
+                        throw new UnsupportedOperationException("Cannot use 
UUIDs in column names with CQL3");
+
+                    
query.append(wrapInQuotesIfRequired(UUIDGen.makeType1UUIDFromHost(Session.getLocalAddress()).toString()))
+                         .append(" = ?");
+                }
+                else
+                {
+                    query.append(wrapInQuotesIfRequired("C" + i)).append(" = 
?");
+                }
             }
 
             query.append(" WHERE KEY=?");
@@ -70,18 +84,12 @@ public class CqlInserter extends Operation
         List<String> queryParms = new ArrayList<String>();
         for (int i = 0; i < session.getColumnsPerKey(); i++)
         {
-            // Column name
-            if (session.timeUUIDComparator)
-                
queryParms.add(UUIDGen.makeType1UUIDFromHost(Session.getLocalAddress()).toString());
-            else
-                queryParms.add(new String("C" + i));
-
             // Column value
-            queryParms.add(new String(getUnQuotedCqlBlob(values.get(i % 
values.size()).array())));
+            queryParms.add(getUnQuotedCqlBlob(values.get(i % 
values.size()).array()));
         }
 
         String key = String.format("%0" + session.getTotalKeysLength() + "d", 
index);
-        queryParms.add(new String(getUnQuotedCqlBlob(key)));
+        queryParms.add(getUnQuotedCqlBlob(key));
 
         String formattedQuery = null;
 
@@ -120,11 +128,12 @@ public class CqlInserter extends Operation
 
         if (!success)
         {
-            error(String.format("Operation [%d] retried %d times - error 
inserting key %s %s%n",
+            error(String.format("Operation [%d] retried %d times - error 
inserting key %s %s%n with query %s",
                                 index,
                                 session.getRetryTimes(),
                                 key,
-                                (exceptionMessage == null) ? "" : "(" + 
exceptionMessage + ")"));
+                                (exceptionMessage == null) ? "" : "(" + 
exceptionMessage + ")",
+                                cqlQuery));
         }
 
         session.operations.getAndIncrement();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/02769d5b/tools/stress/src/org/apache/cassandra/stress/operations/CqlReader.java
----------------------------------------------------------------------
diff --git 
a/tools/stress/src/org/apache/cassandra/stress/operations/CqlReader.java 
b/tools/stress/src/org/apache/cassandra/stress/operations/CqlReader.java
index cfac2d6..ef43ae8 100644
--- a/tools/stress/src/org/apache/cassandra/stress/operations/CqlReader.java
+++ b/tools/stress/src/org/apache/cassandra/stress/operations/CqlReader.java
@@ -52,7 +52,12 @@ public class CqlReader extends Operation
             StringBuilder query = new StringBuilder("SELECT ");
 
             if (session.columnNames == null)
-                query.append("FIRST 
").append(session.getColumnsPerKey()).append(" ''..''");
+            {
+                if (session.cqlVersion.startsWith("2"))
+                    query.append("FIRST 
").append(session.getColumnsPerKey()).append(" ''..''");
+                else
+                    query.append("*");
+            }
             else
             {
                 for (int i = 0; i < session.columnNames.size(); i++)
@@ -62,7 +67,8 @@ public class CqlReader extends Operation
                 }
             }
 
-            query.append(" FROM Standard1 USING CONSISTENCY 
").append(session.getConsistencyLevel().toString());
+            query.append(" FROM 
").append(wrapInQuotesIfRequired("Standard1")).append(" USING CONSISTENCY ")
+                 .append(session.getConsistencyLevel().toString());
             query.append(" WHERE KEY=?");
 
             cqlQuery = query.toString();
@@ -109,6 +115,7 @@ public class CqlReader extends Operation
             }
             catch (Exception e)
             {
+
                 exceptionMessage = getExceptionMessage(e);
                 success = false;
             }
@@ -116,11 +123,12 @@ public class CqlReader extends Operation
 
         if (!success)
         {
-            error(String.format("Operation [%d] retried %d times - error 
reading key %s %s%n",
+            error(String.format("Operation [%d] retried %d times - error 
reading key %s %s%n with query %s",
                                 index,
                                 session.getRetryTimes(),
                                 new String(key),
-                                (exceptionMessage == null) ? "" : "(" + 
exceptionMessage + ")"));
+                                (exceptionMessage == null) ? "" : "(" + 
exceptionMessage + ")",
+                                cqlQuery));
         }
 
         session.operations.getAndIncrement();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/02769d5b/tools/stress/src/org/apache/cassandra/stress/util/Operation.java
----------------------------------------------------------------------
diff --git a/tools/stress/src/org/apache/cassandra/stress/util/Operation.java 
b/tools/stress/src/org/apache/cassandra/stress/util/Operation.java
index cbeaad7..4737692 100644
--- a/tools/stress/src/org/apache/cassandra/stress/util/Operation.java
+++ b/tools/stress/src/org/apache/cassandra/stress/util/Operation.java
@@ -296,4 +296,11 @@ public abstract class Operation
 
         return statementId;
     }
+
+    protected String wrapInQuotesIfRequired(String string)
+    {
+        return session.cqlVersion.startsWith("3")
+                ? "\"" + string + "\""
+                : string;
+    }
 }

Reply via email to