Olivier Michallat created CASSANDRA-8054:
--------------------------------------------
Summary: EXECUTE request with skipMetadata=false gets no metadata
in response
Key: CASSANDRA-8054
URL: https://issues.apache.org/jira/browse/CASSANDRA-8054
Project: Cassandra
Issue Type: Bug
Reporter: Olivier Michallat
This has been reported independently with the
[Java|https://datastax-oss.atlassian.net/browse/JAVA-482] and
[C++|https://datastax-oss.atlassian.net/browse/CPP-174] drivers.
This happens under heavy load, where multiple client threads prepare and
execute statements in parallel. One of them sends an EXECUTE request with
skipMetadata=false, but the returned ROWS response has no metadata in it.
A patch of {{Message.Dispatcher.channelRead0}} confirmed that the flag was
incorrectly set on the response:
{code}
logger.debug("Received: {}, v={}", request,
connection.getVersion());
boolean skipMetadataOnRequest = false;
if (request instanceof ExecuteMessage) {
ExecuteMessage execute = (ExecuteMessage)request;
skipMetadataOnRequest = execute.options.skipMetadata();
}
response = request.execute(qstate);
if (request instanceof ExecuteMessage) {
Rows rows = (Rows)response;
boolean skipMetadataOnResponse =
rows.result.metadata.flags.contains(Flag.NO_METADATA);
if (skipMetadataOnResponse != skipMetadataOnRequest) {
logger.warn("Inconsistent skipMetadata on streamId {},
was {} in request but {} in response",
request.getStreamId(),
skipMetadataOnRequest,
skipMetadataOnResponse);
}
}
{code}
We observed the warning with (false, true) during our tests.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)