Uploaded image for project: 'Cassandra'
  1. Cassandra
  2. CASSANDRA-8979

MerkleTree mismatch for deleted and non-existing rows

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Normal
    • Resolution: Fixed
    • Fix Version/s: 2.0.15, 2.1.5
    • Component/s: None
    • Labels:
      None

      Description

      Validation compaction will currently create different hashes for rows that have been deleted compared to nodes that have not seen the rows at all or have already compacted them away.

      In case this sounds familiar to you, see CASSANDRA-4905 which was supposed to prevent hashing of expired tombstones. This still seems to be in place, but does not address the issue completely. Or there was a change in 2.0 that rendered the patch ineffective.

      The problem is that rowHash() in the Validator will return a new hash in any case, whether the PrecompactedRow did actually update the digest or not. This will lead to the case that a purged, PrecompactedRow will not change the digest, but we end up with a different tree compared to not having rowHash called at all (such as in case the row already doesn't exist).

      As an implication, repair jobs will constantly detect mismatches between older sstables containing purgable rows and nodes that have already compacted these rows. After transfering the reported ranges, the newly created sstables will immediately get deleted again during the following compaction. This will happen for each repair run over again until the sstable with the purgable row finally gets compacted.

        Attachments

        1. 8979-RevertPrecompactedRow-2.0.txt
          2 kB
          Stefan Podkowinski
        2. 8979-LazilyCompactedRow-2.0.txt
          3 kB
          Stefan Podkowinski
        3. 8979-AvoidBufferAllocation-2.0_patch.txt
          1 kB
          Oleg Anastasyev
        4. cassandra-2.0-8979-validatortest_patch.txt
          3 kB
          Stefan Podkowinski
        5. cassandra-2.0-8979-validator_patch.txt
          2 kB
          Stefan Podkowinski
        6. cassandra-2.0-8979-lazyrow_patch.txt
          2 kB
          Stefan Podkowinski
        7. cassandra-2.1-8979-validator_patch.txt
          2 kB
          Stefan Podkowinski
        8. cassandra-2.1-8979-lazyrow_patch.txt
          1 kB
          Stefan Podkowinski

          Issue Links

            Activity

              People

              • Assignee:
                spod Stefan Podkowinski
                Reporter:
                spod Stefan Podkowinski
                Authors:
                Stefan Podkowinski
                Reviewers:
                Yuki Morishita
              • Votes:
                0 Vote for this issue
                Watchers:
                7 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: