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

No disk image or page is reinstantiated in __rec_split_write() function

    • Type: Icon: Bug Bug
    • Resolution: Duplicate
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: None
    • None
    • 3
    • Storage Engines 2020-02-10, Storage Engines 2020-02-24

      Sometimes while running test_rollback_to_stable02.py on branch wt-5421-history-store-upd-search leads to the following assert failure:

      #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
      #1  0x00007ffff7a24801 in __GI_abort () at abort.c:79
      #2  0x00007ffff59aaaac in __wt_abort (session=0x555555dbe8e0) at ../src/os_common/os_abort.c:30
      #3  0x00007ffff5899e68 in __page_read (session=0x555555dbe8e0, ref=0x7fffe4089ef0, flags=3236) at ../src/btree/bt_read.c:136
      #4  0x00007ffff589a92f in __wt_page_in_func (session=0x555555dbe8e0, ref=0x7fffe4089ef0, flags=3236, func=0x7ffff5a54840 <__func__.38884> "__tree_walk_internal", line=460)
          at ../src/btree/bt_read.c:281
      #5  0x00007ffff58ce21c in __wt_page_swap_func (session=0x555555dbe8e0, held=0x0, want=0x7fffe4089ef0, flags=3236, func=0x7ffff5a54840 <__func__.38884> "__tree_walk_internal", line=460)
          at ../src/include/btree.i:1695
      #6  0x00007ffff58cecd7 in __tree_walk_internal (session=0x555555dbe8e0, refp=0x555556236b58, walkcntp=0x0, skip_func=0x0, func_cookie=0x0, flags=2180) at ../src/btree/bt_walk.c:460
      #7  0x00007ffff58cef79 in __wt_tree_walk (session=0x555555dbe8e0, refp=0x555556236b58, flags=2176) at ../src/btree/bt_walk.c:529
      #8  0x00007ffff58663d9 in __wt_btcur_next (cbt=0x5555562369e0, truncating=false) at ../src/btree/bt_curnext.c:704
      #9  0x00007ffff591e85a in __curfile_next (cursor=0x5555562369e0) at ../src/cursor/cur_file.c:93
      #10 0x00007ffff5cd39c5 in _wrap_Cursor_next (self=<optimized out>, args=<optimized out>) at wiredtiger_wrap.c:4161
      

      Following is the assert:

      WT_ASSERT(session, previous_state != WT_REF_DISK);
      

      The ref is trying to read with state WT_REF_DISK but there is no addr associated with it.

      The problem is during reconciliation of a page, in __rec_split_write() doesn't generate either disk image to re-instantiate. Due to which when the ref gets evicted it is changed to a state of WT_REF_DISK with no addr.

      Following code may have a problem that leads to this issue.https://github.com/wiredtiger/wiredtiger/blob/b1186d9aa391a836794579bbc23d64b9d6d782ac/src/reconcile/rec_write.c#L1837

      https://github.com/wiredtiger/wiredtiger/blob/b1186d9aa391a836794579bbc23d64b9d6d782ac/src/reconcile/rec_write.c#L1881

            Assignee:
            backlog-server-storage-engines [DO NOT USE] Backlog - Storage Engines Team
            Reporter:
            haribabu.kommi@mongodb.com Haribabu Kommi
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: