-
Type: Bug
-
Resolution: Duplicate
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: None
-
None
-
5
The following assert gets hit when inserting data into the history store.
#ifdef HAVE_DIAGNOSTIC if (cmp == 0) { WT_ERR(cursor->get_value(cursor, &hs_stop_durable_ts_diag, &durable_timestamp_diag, &upd_type_full_diag, existing_val)); WT_ERR(__wt_compare(session, NULL, existing_val, hs_value, &cmp)); if (cmp == 0) WT_ASSERT(session, start_time_point->txnid == WT_TXN_NONE || start_time_point->txnid != hs_cbt->upd_value->tw.start_txn || start_time_point->ts != hs_cbt->upd_value->tw.start_ts); counter = hs_counter + 1; } #else if (cmp == 0) counter = hs_counter + 1; #endif
Both the inserting record and the existing history store record are from the same transaction and same timestamp.
(gdb) p start_time_point $1 = (WT_HS_TIME_POINT *) 0x7f8bbaa75d80 (gdb) p *start_time_point $2 = { ts = 6896706622463148044, durable_ts = 6896706622463148044, txnid = 580 } (gdb) p hs_cbt->upd_value->tw $3 = { durable_start_ts = 6896706622463148044, start_ts = 6896706622463148044, start_txn = 580, durable_stop_ts = 0, stop_ts = 0, stop_txn = 0, prepare = 0 '\000' }
The existing history store already have a global visible tombstone and it is missed to ignored due to which the assert gets fired.
Symptom:
[2020/11/25 07:03:08.675] [1606287786:773799][6362:0x7f49db065700], file:WiredTigerHS.wt, eviction-server: __hs_insert_record_with_btree, 246: start_time_point->txnid == WT_TXN_NONE || start_time_point->txnid != hs_cbt->upd_value->tw.start_txn || start_time_point->ts != hs_cbt->upd_value->tw.start_ts __hs_insert_record_with_btree, 233: tw->start_txn == WT_TXN_NONE || tw->start_txn != hs_cbt->upd_value->tw.start_txn || tw->start_ts != hs_cbt->upd_value->tw.start_ts [2020/11/25 07:03:08.675] [1606287786:773840][6362:0x7f49db065700], file:WiredTigerHS.wt, eviction-server: __wt_abort, 28: aborting WiredTiger library