Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix snapshot compaction bug #339

Merged
merged 1 commit into from
Apr 12, 2019
Merged

Commits on Apr 1, 2019

  1. Fix snapshot compaction bug

    Closes google#320
    
    During compaction it was possible that records from a block b1=(l1,u1)
    would be pushed down from level i to level i+1. If there is a block
    b2=(l2,u2) at level i with k1 = user_key(u1) = user_key(l2) then
    a subsequent search for k1 will yield the record l2 which has a smaller
    sequence number than u1 because the sort order for records sorts
    increasing by user key but decreaing by sequence number.
    
    This change add a call to a new function AddBoundaryInputs to
    SetupOtherInputs. AddBoundaryInputs searches for a block b2 matching the
    criteria above and adds it to the set of files to be compacted. Whenever
    AddBoundaryInputs is called it is important that the compaction fileset
    in level i+1 (known as c->inputs_[1] in the code) be recomputed. Each
    call to AddBoundaryInputs is followed by a call to GetOverlappingInputs.
    
    SetupOtherInputs is called on both manual and automated compaction
    passes. It is called for both level zero and for levels greater than 0.
    
    The original change posted in google#339
    has been modified to also include changed made by Chris Mumford<cmumford@google.com>
    in cmumford@4b72cb1
    
      1. Releasing snapshots during test cleanup to avoid
         memory leak warnings.
      2. Refactored test to use testutil.h to be in line
         with other issue tests and to create the test
         database in the correct temporary location.
      3. Added copyright banner.
    
      Otherwise, just minor formatting and limiting character
      width to 80 characters.
    
    Additionally the change was rebased on top of current master and
    changes previously made to the Makefile were ported to the
    CMakeLists.txt.
    
    Testing Done:
    
      A test program (issue320_test) was constructed that performs mutations
      while snapshots are active. issue320_test fails without this bug fix
      after 64k writes. It passes with this bug fix. It was run with 200M
      writes and passed.
    
      Unit tests were written for the new function that was added to the
      code. Make test was run and seen to pass.
    
    Signed-off-by: Richard Cole <richcole@amazon.com>
    richcole-at-amazon committed Apr 1, 2019
    Configuration menu
    Copy the full SHA
    20fb601 View commit details
    Browse the repository at this point in the history