You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sn...@apache.org on 2016/05/05 16:47:37 UTC
cassandra git commit: Add prepared query parameter to trace for
"Execute CQL3 prepared query" session
Repository: cassandra
Updated Branches:
refs/heads/trunk b57b047e5 -> 07385b6ce
Add prepared query parameter to trace for "Execute CQL3 prepared query" session
patch by Yasuharu Goto; reviewed by Robert Stupp for CASSANDRA-11425
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/07385b6c
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/07385b6c
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/07385b6c
Branch: refs/heads/trunk
Commit: 07385b6ce90d3a230f00f2812b22e3ff158cc2d6
Parents: b57b047
Author: Yasuharu Goto <ma...@gmail.com>
Authored: Thu May 5 18:46:05 2016 +0200
Committer: Robert Stupp <sn...@snazy.de>
Committed: Thu May 5 18:46:05 2016 +0200
----------------------------------------------------------------------
.../apache/cassandra/cql3/QueryProcessor.java | 5 +-
.../cql3/statements/ParsedStatement.java | 9 ++++
.../transport/messages/ExecuteMessage.java | 1 +
.../org/apache/cassandra/cql3/TraceCqlTest.java | 51 ++++++++++++++++++++
4 files changed, 64 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/07385b6c/src/java/org/apache/cassandra/cql3/QueryProcessor.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/QueryProcessor.java b/src/java/org/apache/cassandra/cql3/QueryProcessor.java
index 39a9c03..feedfc4 100644
--- a/src/java/org/apache/cassandra/cql3/QueryProcessor.java
+++ b/src/java/org/apache/cassandra/cql3/QueryProcessor.java
@@ -71,7 +71,7 @@ public class QueryProcessor implements QueryHandler
@Override
public int weightOf(MD5Digest key, ParsedStatement.Prepared value)
{
- return Ints.checkedCast(measure(key) + measure(value.statement) + measure(value.boundNames));
+ return Ints.checkedCast(measure(key) + measure(value.rawCQLStatement) + measure(value.statement) + measure(value.boundNames));
}
};
@@ -80,7 +80,7 @@ public class QueryProcessor implements QueryHandler
@Override
public int weightOf(Integer key, ParsedStatement.Prepared value)
{
- return Ints.checkedCast(measure(key) + measure(value.statement) + measure(value.boundNames));
+ return Ints.checkedCast(measure(key) + measure(value.rawCQLStatement) + measure(value.statement) + measure(value.boundNames));
}
};
@@ -386,6 +386,7 @@ public class QueryProcessor implements QueryHandler
return existing;
ParsedStatement.Prepared prepared = getStatement(queryString, clientState);
+ prepared.rawCQLStatement = queryString;
int boundTerms = prepared.statement.getBoundTerms();
if (boundTerms > FBUtilities.MAX_UNSIGNED_SHORT)
throw new InvalidRequestException(String.format("Too many markers(?). %d markers exceed the allowed maximum of %d", boundTerms, FBUtilities.MAX_UNSIGNED_SHORT));
http://git-wip-us.apache.org/repos/asf/cassandra/blob/07385b6c/src/java/org/apache/cassandra/cql3/statements/ParsedStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/ParsedStatement.java b/src/java/org/apache/cassandra/cql3/statements/ParsedStatement.java
index 4c3f8a9..5f6c42c 100644
--- a/src/java/org/apache/cassandra/cql3/statements/ParsedStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/ParsedStatement.java
@@ -48,6 +48,14 @@ public abstract class ParsedStatement
public static class Prepared
{
+ /**
+ * Contains the CQL statement source if the statement has been "regularly" perpared via
+ * {@link org.apache.cassandra.cql3.QueryProcessor#prepare(java.lang.String, org.apache.cassandra.service.ClientState, boolean)} /
+ * {@link QueryHandler#prepare(java.lang.String, org.apache.cassandra.service.QueryState, java.util.Map)}.
+ * Other usages of this class may or may not contain the CQL statement source.
+ */
+ public String rawCQLStatement;
+
public final CQLStatement statement;
public final List<ColumnSpecification> boundNames;
public final Short[] partitionKeyBindIndexes;
@@ -57,6 +65,7 @@ public abstract class ParsedStatement
this.statement = statement;
this.boundNames = boundNames;
this.partitionKeyBindIndexes = partitionKeyBindIndexes;
+ this.rawCQLStatement = "";
}
public Prepared(CQLStatement statement, VariableSpecifications names, Short[] partitionKeyBindIndexes)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/07385b6c/src/java/org/apache/cassandra/transport/messages/ExecuteMessage.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/transport/messages/ExecuteMessage.java b/src/java/org/apache/cassandra/transport/messages/ExecuteMessage.java
index df6acc0..c5e775e 100644
--- a/src/java/org/apache/cassandra/transport/messages/ExecuteMessage.java
+++ b/src/java/org/apache/cassandra/transport/messages/ExecuteMessage.java
@@ -119,6 +119,7 @@ public class ExecuteMessage extends Message.Request
builder.put("consistency_level", options.getConsistency().name());
if(options.getSerialConsistency() != null)
builder.put("serial_consistency_level", options.getSerialConsistency().name());
+ builder.put("query", prepared.rawCQLStatement);
// TODO we don't have [typed] access to CQL bind variables here. CASSANDRA-4560 is open to add support.
Tracing.instance.begin("Execute CQL3 prepared query", state.getClientAddress(), builder.build());
http://git-wip-us.apache.org/repos/asf/cassandra/blob/07385b6c/test/unit/org/apache/cassandra/cql3/TraceCqlTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/TraceCqlTest.java b/test/unit/org/apache/cassandra/cql3/TraceCqlTest.java
new file mode 100644
index 0000000..bd68940
--- /dev/null
+++ b/test/unit/org/apache/cassandra/cql3/TraceCqlTest.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.cassandra.cql3;
+
+import java.util.List;
+
+import org.junit.Test;
+
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.QueryTrace;
+import com.datastax.driver.core.Session;
+
+import static org.junit.Assert.assertEquals;
+
+public class TraceCqlTest extends CQLTester
+{
+ @Test
+ public void testCqlStatementTracing() throws Throwable
+ {
+ requireNetwork();
+
+ createTable("CREATE TABLE %s (id int primary key, v1 text, v2 text)");
+ execute("INSERT INTO %s (id, v1, v2) VALUES (?, ?, ?)", 1, "Apache", "Cassandra");
+ execute("INSERT INTO %s (id, v1, v2) VALUES (?, ?, ?)", 2, "trace", "test");
+
+ try (Session session = sessionNet())
+ {
+ String cql = "SELECT id, v1, v2 FROM " + KEYSPACE + '.' + currentTable() + " WHERE id = ?";
+ PreparedStatement pstmt = session.prepare(cql)
+ .enableTracing();
+ QueryTrace trace = session.execute(pstmt.bind(1)).getExecutionInfo().getQueryTrace();
+ assertEquals(cql, trace.getParameters().get("query"));
+ }
+ }
+}