• S
    Fix Bug: iterator.Prev() or iterator.SeekToLast() might return the first... · 65428b0c
    Siying Dong 提交于
    Fix Bug: iterator.Prev() or iterator.SeekToLast() might return the first element instead of the correct one
    
    Summary:
    Recent patch https://reviews.facebook.net/D11865 introduced a regression bug:
    
    DBIter::FindPrevUserEntry(), which is called by DBIter::Prev() (and also implicitly if calling iterator.SeekToLast())  might do issue a seek when having skipped too many entries. If the skipped entry just before the seek() is a delete, the saved key is erased so that it seeks to the front, so Prev() would return the first element.
    
    This patch fixes the bug by not doing seek() in DBIter::FindNextUserEntry() if saved key has been erased.
    
    Test Plan: Add a test DBTest.IterPrevMaxSkip which would fail without the patch and would pass with the change.
    
    Reviewers: dhruba, xjin, haobo
    
    Reviewed By: dhruba
    
    CC: leveldb
    
    Differential Revision: https://reviews.facebook.net/D13557
    65428b0c
db_iter.cc 15.0 KB