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

Resolve birthmarks during eviction in more cases

    • Type: Icon: Bug Bug
    • Resolution: Fixed
    • Priority: Icon: Major - P3 Major - P3
    • WT3.2.0, 4.1.11, 4.0.10, 3.6.14
    • Affects Version/s: None
    • Component/s: None
    • 5
    • Storage Engines 2018-10-22, Storage Engines 2018-11-05, Storage Engines 2018-11-19, Storage Engines 2018-12-03, Storage Engines 2019-01-28, Storage Engines 2019-02-11, Storage Engines 2019-04-22, Storage Engines 2019-05-06
    • v3.6

      Jenkins reported an error where reconciliation encountered a birthmark update referencing a deleted cell.
      The Jenkins job failed with an assertion failure in reconciliation on ocelot. The assertion failure was:

      [1538649381:68593][39477:0x7ffbc4b2e700], test_timestamp04.test_timestamp04.test_rollback_to_stable(nolog.col_var), file:ts04_ts_nologged.wt, eviction-server: __rec_append_orig_value, 1220: unpack != NULL && unpack->type != WT_CELL_DEL
      [1538649381:68789][39477:0x7ffbc4b2e700], test_timestamp04.test_timestamp04.test_rollback_to_stable(nolog.col_var), file:ts04_ts_nologged.wt, eviction-server: __wt_abort, 30: aborting WiredTiger library
      

      The job is http://build.wiredtiger.com:8080/job/wiredtiger-test-timestamp-size/425/ and test_timestamp04 -s 1 failed.

      Looking at the core file, the stack shows it is an eviction thread. It is:

      #2  0x00007ffbc8fbfe00 in __wt_abort (session=0x35263d8) at ../src/os_common/os_abort.c:32
      #3  0x00007ffbc8fdb1d5 in __rec_append_orig_value (session=0x35263d8, page=0x4278cb0, upd=0x6b87b20, unpack=0x7ffbc4b2db30) at ../src/reconcile/rec_write.c:1219
      #4  0x00007ffbc8fdbcdf in __rec_txn_read (session=0x35263d8, r=0x7ffb9c0098b0, ins=0x2c604f0, ripcip=0x4278d00, vpack=0x7ffbc4b2db30, upd_savedp=0x0, 
          updp=0x7ffbc4b2db20) at ../src/reconcile/rec_write.c:1607
      #5  0x00007ffbc8fe2634 in __rec_col_var (session=0x35263d8, r=0x7ffb9c0098b0, pageref=0x82497c0, salvage=0x0) at ../src/reconcile/rec_write.c:4766
      #6  0x00007ffbc8fd9597 in __wt_reconcile (session=0x35263d8, ref=0x82497c0, salvage=0x0, flags=138, lookaside_retryp=0x0) at ../src/reconcile/rec_write.c:474
      #7  0x00007ffbc8f8a694 in __evict_review (session=0x35263d8, ref=0x82497c0, closing=false, inmem_splitp=0x7ffbc4b2dd7e) at ../src/evict/evict_page.c:685
      #8  0x00007ffbc8f892d3 in __wt_evict (session=0x35263d8, ref=0x82497c0, closing=false, previous_state=5) at ../src/evict/evict_page.c:174
      #9  0x00007ffbc8f862f1 in __evict_page (session=0x35263d8, is_server=false) at ../src/evict/evict_lru.c:2322
      #10 0x00007ffbc8f82a29 in __evict_lru_pages (session=0x35263d8, is_server=false) at ../src/evict/evict_lru.c:1173
      #11 0x00007ffbc8f80ba8 in __wt_evict_thread_run (session=0x35263d8, thread=0x9ac6300) at ../src/evict/evict_lru.c:318
      #12 0x00007ffbc9021b98 in __thread_run (arg=0x9ac6300) at ../src/support/thread_group.c:31
      #13 0x00007ffbd1bdddc5 in start_thread (arg=0x7ffbc4b2e700) at pthread_create.c:308
      

      The assertion is failing because the unpack->type is WT_CELL_DEL:

      cell.i: #define WT_CELL_DEL              (4 << 4)       /* Deleted value */
      
      1217			/* Add the original value after birthmarks. */
      1218			if (upd->type == WT_UPDATE_BIRTHMARK) {
      1219				WT_ASSERT(session, unpack != NULL &&
      1220				    unpack->type != WT_CELL_DEL);
      1221				break;
      1222			}
      1223	
      (gdb) p unpack
      $1 = (WT_CELL_UNPACK *) 0x7ffbc4b2db30
      (gdb) p *unpack
      $2 = {cell = 0x427a138, v = 148, data = 0x0, size = 0, __len = 3, prefix = 0 '\000', raw = 64 '@', type = 64 '@', ovfl = 0 '\000'}
      

            Assignee:
            sue.loverso@mongodb.com Susan LoVerso
            Reporter:
            sue.loverso@mongodb.com Susan LoVerso
            Votes:
            0 Vote for this issue
            Watchers:
            8 Start watching this issue

              Created:
              Updated:
              Resolved: