diff --git a/CHANGES.txt b/CHANGES.txt index d7a7a61e19..ef6b848ff2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -3,6 +3,7 @@ * Fixed multiple single-node SAI query bugs relating to static columns (CASSANDRA-20338) * Upgrade com.datastax.cassandra:cassandra-driver-core:3.11.5 to org.apache.cassandra:cassandra-driver-core:3.12.1 (CASSANDRA-17231) Merged from 4.0: + * Avoid computing prepared statement size for unprepared batches (CASSANDRA-20556) * Fix Dropwizard Meter causes timeouts when infrequently used (CASSANDRA-19332) diff --git a/src/java/org/apache/cassandra/cql3/QueryProcessor.java b/src/java/org/apache/cassandra/cql3/QueryProcessor.java index feea4187e4..4547a8fabd 100644 --- a/src/java/org/apache/cassandra/cql3/QueryProcessor.java +++ b/src/java/org/apache/cassandra/cql3/QueryProcessor.java @@ -417,6 +417,11 @@ public class QueryProcessor implements QueryHandler } public static Prepared parseAndPrepare(String query, ClientState clientState, boolean isInternal) throws RequestValidationException + { + return parseAndPrepare(query, clientState, isInternal, true); + } + + public static Prepared parseAndPrepare(String query, ClientState clientState, boolean isInternal, boolean measure) throws RequestValidationException { CQLStatement.Raw raw = parseStatement(query); @@ -441,7 +446,10 @@ public class QueryProcessor implements QueryHandler res = new Prepared(statement, "", fullyQualified, keyspace); else res = new Prepared(statement, query, fullyQualified, keyspace); - res.pstmntSize = measurePstmnt(res); + + // Some prepared statements will not be cached and therefore do not require a pre-computed size. + if (measure) + res.pstmntSize = measurePstmnt(res); return res; } diff --git a/src/java/org/apache/cassandra/transport/messages/BatchMessage.java b/src/java/org/apache/cassandra/transport/messages/BatchMessage.java index 8a87efc781..d45105f109 100644 --- a/src/java/org/apache/cassandra/transport/messages/BatchMessage.java +++ b/src/java/org/apache/cassandra/transport/messages/BatchMessage.java @@ -188,7 +188,7 @@ public class BatchMessage extends Message.Request { p = QueryProcessor.parseAndPrepare((String) query, state.getClientState().cloneWithKeyspaceIfSet(options.getKeyspace()), - false); + false, false); } else {