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 ""
}