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

Use helper functions to check time window's visibility

    • 5
    • Storage - Ra 2020-05-18

      format failing with assert:

       WT_SESSION.rollback_transaction: __wt_rec_upd_select, 420: __wt_txn_upd_visible_all(session, tombstone) && upd_select->upd == NULL
      
      
      #0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
      #1  0x00007f0a3eb9b801 in __GI_abort () at abort.c:79
      #2  0x000056317fda481f in __wt_abort (session=0x563180516390) at src/os_common/os_abort.c:30
      #3  0x000056317ff250a9 in __wt_rec_upd_select (session=0x563180516390, r=0x7f0a24209520, ins=0x0, 
          ripcip=0x7f0a185b98e0, vpack=0x7f0a3ad3a920, upd_select=0x7f0a3ad3a840)
          at src/reconcile/rec_visibility.c:419
      #4  0x000056317ff22036 in __wt_rec_row_leaf (session=0x563180516390, r=0x7f0a24209520, 
          pageref=0x7f0a2c22f0a0, salvage=0x0) at src/reconcile/rec_row.c:750
      #5  0x000056317fdc26bf in __reconcile (session=0x563180516390, ref=0x7f0a2c22f0a0, salvage=0x0, 
          flags=140, page_lockedp=0x7f0a3ad3aa8a) at src/reconcile/rec_write.c:174
      #6  0x000056317fdc234a in __wt_reconcile (session=0x563180516390, ref=0x7f0a2c22f0a0, salvage=0x0, 
          flags=140) at src/reconcile/rec_write.c:87
      #7  0x000056317fd76eaf in __evict_review (session=0x563180516390, ref=0x7f0a2c22f0a0, 
          evict_flags=0, inmem_splitp=0x7f0a3ad3ab52) at src/evict/evict_page.c:653
      #8  0x000056317fd753b7 in __wt_evict (session=0x563180516390, ref=0x7f0a2c22f0a0, 
          previous_state=3 '\003', flags=0) at src/evict/evict_page.c:177
      #9  0x000056317fd71ddb in __evict_page (session=0x563180516390, is_server=false)
          at src/evict/evict_lru.c:2263
      #10 0x000056317fd723e8 in __wt_cache_eviction_worker (session=0x563180516390, busy=false, 
          readonly=false, pct_full=100.35381703307414) at src/evict/evict_lru.c:2350
      #11 0x000056317fe078ce in __wt_cache_eviction_check (session=0x563180516390, busy=false, 
          readonly=false, didworkp=0x0) at ./src/include/cache.i:427
      #12 0x000056317fe0d04b in __wt_txn_rollback (session=0x563180516390, cfg=0x7f0a3ad3ae10)
          at src/txn/txn.c:1564
      #13 0x000056317fde79fc in __session_rollback_transaction (wt_session=0x563180516390, config=0x0)
          at src/session/session_api.c:1735
      #14 0x000056317fd0b89b in rollback_transaction (tinfo=0x563182773f50) at ops.c:485
      #15 0x000056317fd0ceb6 in ops (arg=0x563182773f50) at ops.c:1000
      #16 0x00007f0a3ef536db in start_thread (arg=0x7f0a3ad3b700) at pthread_create.c:463
      #17 0x00007f0a3ec7c88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
      (gdb) frame 3
      #3  0x000056317ff250a9 in __wt_rec_upd_select (session=0x563180516390, r=0x7f0a24209520, ins=0x0, 
          ripcip=0x7f0a185b98e0, vpack=0x7f0a3ad3a920, upd_select=0x7f0a3ad3a840)
          at src/reconcile/rec_visibility.c:419
      419	                WT_ASSERT(
      (gdb) list 410,430
      410	             * globally visible. In this case, the on page value is not appended. Check that.
      411	             */
      412	            if (last_upd->next != NULL) {
      413	                WT_ASSERT(session, last_upd->next->txnid == vpack->tw.start_txn &&
      414	                    last_upd->next->start_ts == vpack->tw.start_ts &&
      415	                    last_upd->next->type == WT_UPDATE_STANDARD && last_upd->next->next == NULL);
      416	                upd_select->upd = last_upd->next;
      417	                __wt_time_window_set_start(select_tw, last_upd->next);
      418	            } else {
      419	                WT_ASSERT(
      420	                  session, __wt_txn_upd_visible_all(session, tombstone) && upd_select->upd == NULL);
      421	                upd_select->upd = tombstone;
      422	            }
      423	        }
      424	    }
      425	
      426	    /*
      427	     * If we found a tombstone with a time pair earlier than the update it applies to, which can
      428	     * happen if the application performs operations with timestamps out-of-order, make it invisible
      429	     * by making the start time pair match the stop time pair of the tombstone. We don't guarantee
      430	     * that older readers will be able to continue reading content that has been made invisible by
      (gdb) p last_upd
      $1 = (WT_UPDATE *) 0x7f0a1846f7d0
      (gdb) p last_upd.next
      $2 = (WT_UPDATE *) 0x0
      

            Assignee:
            chenhao.qu@mongodb.com Chenhao Qu
            Reporter:
            keith.bostic@mongodb.com Keith Bostic (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            5 Start watching this issue

              Created:
              Updated:
              Resolved: