You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Jason Brown (JIRA)" <ji...@apache.org> on 2017/09/14 13:40:01 UTC
[jira] [Comment Edited] (CASSANDRA-13632) Digest mismatch if row is
empty
[ https://issues.apache.org/jira/browse/CASSANDRA-13632?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16166318#comment-16166318 ]
Jason Brown edited comment on CASSANDRA-13632 at 9/14/17 1:39 PM:
------------------------------------------------------------------
bq. the data serialization path checks if rowIterator.isEmpty() and if so ignores column names (by setting IS_EMPTY flag). However, the digest serialization path does not perform this check and includes column names.
This is correct.
bq. The digest comparison results in a mismatch.
This is not correct. In [{{DigestResolver}}|https://github.com/apache/cassandra/blob/cassandra-3.0/src/java/org/apache/cassandra/service/DigestResolver.java#L87], the coordinator gets the digest from each response, even for the data that sent back the full {{DataResponse}}. So, while there is the difference in what the data nodes send back to the coordindator, it resolves to the same digest value.
[~whangsf] what indications do you have that a DigestMismatch is happening?
was (Author: jasobrown):
bq. the data serialization path checks if rowIterator.isEmpty() and if so ignores column names (by setting IS_EMPTY flag). However, the digest serialization path does not perform this check and includes column names.
This is correct.
bq. The digest comparison results in a mismatch.
This is not correct. In [{{DigestResolver}}|https://github.com/apache/cassandra/blob/cassandra-3.0/src/java/org/apache/cassandra/service/DigestResolver.java#L87], the coordinator gets the digest from each response, even for the data that sent back the full {{DataResponse}}. So, while there is the difference in what the data nodes send back to the coordindator, is resolves to the same digest value.
[~whangsf] what indications do you have that a DigestMismatch is happening?
> Digest mismatch if row is empty
> -------------------------------
>
> Key: CASSANDRA-13632
> URL: https://issues.apache.org/jira/browse/CASSANDRA-13632
> Project: Cassandra
> Issue Type: Bug
> Components: Local Write-Read Paths
> Reporter: Andrew Whang
> Assignee: Andrew Whang
> Fix For: 3.0.x
>
>
> This issue is similar to CASSANDRA-12090. Quorum read queries that include a column selector (non-wildcard) result in digest mismatch when the row is empty (key does not exist). It seems the data serialization path checks if rowIterator.isEmpty() and if so ignores column names (by setting IS_EMPTY flag). However, the digest serialization path does not perform this check and includes column names. The digest comparison results in a mismatch. The mismatch does not end up issuing a read repair mutation since the underlying data is the same.
> The mismatch on the read path ends up doubling our p99 read latency. We discovered this issue while testing a 2.2.5 to 3.0.13 upgrade.
> One thing to note is that we're using thrift, which ends up handling the ColumnFilter differently than the CQL path.
> As with CASSANDRA-12090, fixing the digest seems sensible.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org