summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChenhao Qu <chenhao.qu@mongodb.com>2021-04-07 11:35:09 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-04-07 12:05:17 +0000
commit623aa8fee52c5a63f950aa7cc8e34c551c41ead5 (patch)
tree76c40cceb3c207bf2b105ebbde9d191a2bf20613
parent5a2000543b6a3432b4d538b47ae54884022336f0 (diff)
downloadmongo-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.data2
-rw-r--r--src/third_party/wiredtiger/src/history/hs_rec.c9
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;