diff options
author | Chenhao Qu <chenhao.qu@mongodb.com> | 2021-04-07 11:35:09 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-04-07 12:05:17 +0000 |
commit | 623aa8fee52c5a63f950aa7cc8e34c551c41ead5 (patch) | |
tree | 76c40cceb3c207bf2b105ebbde9d191a2bf20613 | |
parent | 5a2000543b6a3432b4d538b47ae54884022336f0 (diff) | |
download | mongo-623aa8fee52c5a63f950aa7cc8e34c551c41ead5.tar.gz |
Import wiredtiger: 4478958b995c37324cd1909f4d56f8127df3368d from branch mongodb-5.0
ref: 745bba38f7..4478958b99
for: 5.0.0
WT-7384 Fix an assert fire when inserting to the history store
-rw-r--r-- | src/third_party/wiredtiger/import.data | 2 | ||||
-rw-r--r-- | src/third_party/wiredtiger/src/history/hs_rec.c | 9 |
2 files changed, 6 insertions, 5 deletions
diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data index 0ebfe15b48c..2b3698c1462 100644 --- a/src/third_party/wiredtiger/import.data +++ b/src/third_party/wiredtiger/import.data @@ -2,5 +2,5 @@ "vendor": "wiredtiger", "github": "wiredtiger/wiredtiger.git", "branch": "mongodb-5.0", - "commit": "745bba38f7ee8ea3659c24ca00dde999849b065d" + "commit": "4478958b995c37324cd1909f4d56f8127df3368d" } diff --git a/src/third_party/wiredtiger/src/history/hs_rec.c b/src/third_party/wiredtiger/src/history/hs_rec.c index 56573d374bd..904956b68cb 100644 --- a/src/third_party/wiredtiger/src/history/hs_rec.c +++ b/src/third_party/wiredtiger/src/history/hs_rec.c @@ -142,13 +142,14 @@ __hs_insert_record(WT_SESSION_IMPL *session, WT_CURSOR *cursor, WT_BTREE *btree, &upd_type_full_diag, existing_val)); WT_ERR(__wt_compare(session, NULL, existing_val, hs_value, &cmp)); /* - * We shouldn't be inserting the same value again for the key unless coming from a - * different transaction. If the updates are from the same transaction, the start - * timestamp for each update should be different. + * Same value should not be inserted again unless 1. previous entry is already + * deleted(i.e. the stop timestamp is globally visible), 2. from a different + * transaction 3. with a different timestamp if from the same transaction. */ if (cmp == 0) WT_ASSERT(session, - tw->start_txn == WT_TXN_NONE || + __wt_txn_tw_stop_visible_all(session, &hs_cbt->upd_value->tw) || + 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); counter = hs_counter + 1; |