Details
-
Bug
-
Status: Resolved
-
Normal
-
Resolution: Fixed
-
None
-
Correctness - Transient Incorrect Response
-
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.