[ 
https://issues.apache.org/jira/browse/CASSANDRA-10728?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15013782#comment-15013782
 ] 

Yuki Morishita commented on CASSANDRA-10728:
--------------------------------------------

In that case, I don't see the need to repair those partition. Both partition 
have identical column values associated with.

> Hash used in repair does not include partition key
> --------------------------------------------------
>
>                 Key: CASSANDRA-10728
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-10728
>             Project: Cassandra
>          Issue Type: Bug
>            Reporter: Nadav Har'El
>            Priority: Minor
>
> When the repair code builds the Merkle Tree, it appears to be using 
> AbstractCompactedRow.update() to calculate a partition's hash. This method's 
> documentation states that it calculates a "digest with the data bytes of the 
> row (not including row key or row size).". The code itself seems to agree 
> with this comment.
> However, I believe that not including the row (actually, partition) key in 
> the hash function is a mistake: This means that if two nodes have the same 
> data but different key, repair would not notice this discrepancy. Moreover, 
> if two different keys have their data switched - or have the same data - 
> again this would not be noticed by repair. Actually running across this 
> problem in a real repair is not very likely, but I can imagine seeing it 
> easily in an hypothetical use case where all partitions have exactly the same 
> data and just the partition key matters.
> I am sorry if I'm mistaken and the partition key is actually taken into 
> account in the Merkle tree, but I tried to find evidence that it does and 
> failed. Glancing over the code, it almost seems that it does use the key: 
> Validator.add() calculates rowHash() which includes the digest (without the 
> partition key) *and* the key's token. But then, the code calls 
> MerkleTree.TreeRange.addHash() on that tuple, and that function conspicuously 
> ignores the token, and only uses the digest.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to