Uploaded image for project: 'WiredTiger'
  1. WiredTiger
  2. WT-4922

Multiple birthmarks per key being stored in lookaside

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major - P3
    • Resolution: Duplicate
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: None
    • Labels:
      None
    • Sprint:
      Storage Engines 2019-07-19

      Description

      While working on WT-4674, I came across this potential bug:

      Other than creating a birthmark record in lookaside for the on-disk value, we are also inserting in lookaside the birthmark updates from the update chain. After going through a series of lookaside eviction and re-instantiation, a page will potentially end up with several birthmark records per key. This is unexpected and needs to be investigated and understood if there is a bug here.

      Steps to reproduce:

      1. Add an assert that we are not inserting a birthmark into lookaside other than for the on-disk value
      2. Run test_las02.py to hit the assert.

      diff --git a/src/cache/cache_las.c b/src/cache/cache_las.c
      index 6b1a82d08..661931b5f 100644
      --- a/src/cache/cache_las.c
      +++ b/src/cache/cache_las.c
      @@ -791,10 +791,12 @@ __wt_las_insert_block(WT_CURSOR *cursor,
                                          upd->start_ts, upd->durable_ts,
                                          upd->prepare_state, WT_UPDATE_BIRTHMARK,
                                          &las_value);
      -                       } else
      +                       } else {
      +                               WT_ASSERT(session, upd->type != WT_UPDATE_BIRTHMARK);
                                      cursor->set_value(cursor, upd->txnid,
                                          upd->start_ts, upd->durable_ts,
                                          upd->prepare_state, upd->type, &las_value);
      +                       }
       
                              /*
                               * Using update looks a little strange because the keys
      

      test_las02.test_las02.test_las: started in WT_TEST/test_las02.test_las02.test_las.0
      test_las02.test_las02.test_las (subunit.RemotedTestCase)
      test_las02.test_las02.test_las ... ERROR
       
      ======================================================================
      ERROR: test_las02.test_las02.test_las (subunit.RemotedTestCase)
      test_las02.test_las02.test_las
      ----------------------------------------------------------------------
      _StringException: lost connection during test 'test_las02.test_las02.test_las'
       
      ----------------------------------------------------------------------
      Ran 1 test in 1.847s
       
      FAILED (errors=1)
       
      $ cat WT_TEST/test_las02.test_las02.test_las.0/stderr.txt
      [1562648573:541810][8515:0x7f91577fe700], test_las02.test_las02.test_las, file:las02_main.wt, eviction-server: __wt_las_insert_block, 795: upd->type != WT_UPDATE_BIRTHMARK
      [1562648573:541876][8515:0x7f91577fe700], test_las02.test_las02.test_las, file:las02_main.wt, eviction-server: __wt_abort, 30: aborting WiredTiger library
      

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              alex.cameron Alex Cameron
              Reporter:
              sulabh.mahajan Sulabh Mahajan
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: