• T
    Fix a comparison in DBIter::FindPrevUserKey() · ec70fea4
    Tomislav Novak 提交于
    Summary:
    When seek target is a merge key (`kTypeMerge`), `DBIter::FindNextUserEntry()`
    advances the underlying iterator _past_ the current key (`saved_key_`); see
    `MergeValuesNewToOld()`. However, `FindPrevUserKey()` assumes that `iter_`
    points to an entry with the same user key as `saved_key_`. As a result,
    `it->Seek(key) && it->Prev()` can cause the iterator to be positioned at the
    _next_, instead of the previous, entry (new test, written by @lovro, reproduces
    the bug).
    
    This diff changes `FindPrevUserKey()` to also skip keys that are _greater_ than
    `saved_key_`.
    
    Test Plan: db_test
    
    Reviewers: igor, sdong
    
    Reviewed By: sdong
    
    Subscribers: leveldb, dhruba, lovro
    
    Differential Revision: https://reviews.facebook.net/D40791
    ec70fea4
db_test.cc 457.4 KB