• C
    Fix an assertion failure in DBIter::SeekToLast() when user-defined timestamp is enabled (#11223) · 1b48ecc2
    Changyu Bi 提交于
    Summary:
    in DBIter::SeekToLast(), key() can be called when iter is invalid and fails the following assertion:
    ```
    ./db/db_iter.h:153: virtual rocksdb::Slice rocksdb::DBIter::key() const: Assertion `valid_' failed.
    ```
    This happens when `iterate_upper_bound` and timestamp_lb_ are set. SeekForPrev(*iterate_upper_bound_) positions the iterator on the same user key as *iterate_upper_bound_. A subsequent PrevInternal() call makes the iterator invalid just be the call to key().
    
    This PR fixes this issue by setting updating the seek key to have max sequence number AND max timestamp when the seek key has the same user key as *iterate_upper_bound_.
    
    Pull Request resolved: https://github.com/facebook/rocksdb/pull/11223
    
    Test Plan: - Added a unit test that would fail the above assertion before this fix.
    
    Reviewed By: jowlyzhang
    
    Differential Revision: D43283600
    
    Pulled By: cbi42
    
    fbshipit-source-id: 0dd3999845b722584679bbc95be2664b266005ba
    1b48ecc2
db_iter.cc 55.7 KB