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

Handle repeat open bound from SRP in read repair

    XMLWordPrintableJSON

    Details

    • Bug Category:
      Correctness - Transient Incorrect Response
    • Severity:
      Normal

      Description

      If there is an open range tombstone in an iterator, a short read protection request for it will include a repeat open bound. Currently, DataResolver doesn't expect this, and will raise an assertion, timing out the request:

      java.lang.AssertionError: Error merging RTs on test.test: merged=null, versions=[Marker EXCL_START_BOUND(0)@0, null], sources={[/127.0.0.1, /127.0.0.2]}, responses:
          /127.0.0.1 => [test.test] key=0 partition_deletion=deletedAt=-9223372036854775808, localDeletion=2147483647 columns=[[] | []]
             Row[info=[ts=1] ]: ck=0 | ,
         /127.0.0.2 => [test.test] key=0 partition_deletion=deletedAt=-9223372036854775808, localDeletion=2147483647 columns=[[] | []]
             Row[info=[ts=-9223372036854775808] del=deletedAt=1, localDeletion=1521572669 ]: ck=0 |
             Row[info=[ts=1] ]: ck=1 | 
      

      As this is a completely normal/common scenario, we should allow for this, and relax the assertion.

      Additionally, the linked branch makes the re-throwing AssertionError more detailed and more correct: the responses are now printed out in the correct order, respecting isReversed, the command causing the assertion is now logged, as is isReversed itself, and local deletion times for RTs.

        Attachments

          Activity

            People

            • Assignee:
              aleksey Aleksey Yeschenko
              Reporter:
              aleksey Aleksey Yeschenko
              Authors:
              Aleksey Yeschenko
              Reviewers:
              Sylvain Lebresne
            • Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: