I'm seeing this failure regularly:
format.sh: /data/bostic/RUNDIR.4 log: t: process 92805 running [1588803042:642563][92805:0x7fa3a17b8700], t, file:wt.wt, WT_SESSION.rollback_transaction: __txn_fixup_prepared_update, 722: upd->ne xt != NULL && upd->next->next == NULL && upd->next->txnid == WT_TXN_ABORTED [1588803042:642598][92805:0x7fa3a17b8700], t, file:wt.wt, WT_SESSION.rollback_transaction: __wt_abort, 22: process ID 92805: waiting for debugger... (gdb) where #0 0x00007fa3a8cf403f in __GI___select (nfds=0, readfds=0x0, writefds=0x0, exceptfds=0x0, timeout=0x7fa3a17b7b50) at ../sysdeps/unix/sysv/linux/select.c:41 #1 0x0000555cc247fe11 in __wt_sleep (seconds=100, micro_seconds=0) at src/os_posix/os_sleep.c:30 #2 0x0000555cc24755e1 in __wt_abort (session=0x7fa3a97e9e30) at src/os_common/os_abort.c:26 #3 0x0000555cc24dbc4c in __txn_fixup_prepared_update (session=0x7fa3a97e9e30, op=0x7fa390aa48f0, cursor=0x7fa390c32210, commit=false) at src/txn/txn.c:721 #4 0x0000555cc24dc39b in __txn_resolve_prepared_op (session=0x7fa3a97e9e30, op=0x7fa390aa48f0, commit=false, cursorp=0x7fa3a17b7d70) at src/txn/txn.c:894 #5 0x0000555cc24ddca9 in __wt_txn_rollback (session=0x7fa3a97e9e30, cfg=0x7fa3a17b7e10) at src/txn/txn.c:1531 #6 0x0000555cc24b87d0 in __session_rollback_transaction (wt_session=0x7fa3a97e9e30, config=0x0) at src/session/session_api.c:1735 #7 0x0000555cc23dc746 in rollback_transaction (tinfo=0x555cc4a1dc10) at ops.c:485 #8 0x0000555cc23ddd61 in ops (arg=0x555cc4a1dc10) at ops.c:1000 #9 0x00007fa3a8fd56db in start_thread (arg=0x7fa3a17b8700) at pthread_create.c:463 #10 0x00007fa3a8cfe88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95 (gdb) frame 3 #3 0x0000555cc24dbc4c in __txn_fixup_prepared_update (session=0x7fa3a97e9e30, op=0x7fa390aa48f0, cursor=0x7fa390c32210, commit=false) at src/txn/txn.c:721 721 WT_ASSERT(session, (gdb) list 710,730 710 */ 711 F_SET(upd, WT_UPDATE_RESTORED_FOR_ROLLBACK); 712 713 /* 714 * There should be only one aborted prepared update in the list, append it after the new 715 * update. 716 */ 717 if (cbt->ins != NULL) 718 upd->next = cbt->ins->upd; 719 else if (cbt->ref->page->modify != NULL && cbt->ref->page->modify->mod_row_update != NULL) 720 upd->next = cbt->ref->page->modify->mod_row_update[cbt->slot]; 721 WT_ASSERT(session, 722 upd->next != NULL && upd->next->next == NULL && upd->next->txnid == WT_TXN_ABORTED); 723 724 /* Append a tombstone if the stop timestamp exists. */ 725 if (hs_stop_ts != WT_TS_MAX) { 726 WT_ERR(__wt_upd_alloc(session, NULL, WT_UPDATE_TOMBSTONE, &tombstone, NULL)); 727 tombstone->durable_ts = hs_stop_ts; 728 tombstone->start_ts = hs_stop_ts; 729 tombstone->txnid = WT_TXN_NONE; 730 tombstone->next = upd;
Here's the WT_UPDATE list:
(gdb) yyy $4 = { txnid = 0, durable_ts = 0, start_ts = 0, next = 0x7fa3900dc3c0, size = 20, type = 3 '\003', prepare_state = 0 '\000', flags = 2 '\002', data = 0x7fa390728917 "0000784291/LMNOPQRST" } $5 = { txnid = 18446744073709551615, durable_ts = 0, start_ts = 40154, next = 0x7fa39018cbd0, size = 45, type = 3 '\003', prepare_state = 1 '\001', flags = 0 '\000', data = 0x7fa3900dc3e7 "0000784291/LMNOPQRST" } $6 = { txnid = 18446744073709551615, durable_ts = 0, start_ts = 0, next = 0x0, size = 0, type = 2 '\002', prepare_state = 0 '\000', flags = 0 '\000', data = 0x7fa39018cbf7 "" }