summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Chen <luke.chen@mongodb.com>2022-07-08 16:30:47 +1000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-07-08 06:57:12 +0000
commit670405fd859397cff33d398dbee6c736db45ffe2 (patch)
treebf8252de2f5e7fd4edd2aa2e84dc4444e72516cc
parentaef40887716046f0ac3503d3142630a23ae8b1e5 (diff)
downloadmongo-670405fd859397cff33d398dbee6c736db45ffe2.tar.gz
Import wiredtiger: ccb6525c8d166c87fefa9ab87d6db9270ac1fc46 from branch mongodb-5.0
ref: 4aea16c7c5..ccb6525c8d for: 5.0.10 WT-8425 Push updates with the same commit timestamps in the out_of_order_ts_updates vector in hs_rec.c.
-rw-r--r--src/third_party/wiredtiger/import.data2
-rw-r--r--src/third_party/wiredtiger/src/history/hs_rec.c2
-rw-r--r--src/third_party/wiredtiger/src/reconcile/rec_visibility.c14
-rw-r--r--src/third_party/wiredtiger/test/suite/test_prepare17.py122
4 files changed, 2 insertions, 138 deletions
diff --git a/src/third_party/wiredtiger/import.data b/src/third_party/wiredtiger/import.data
index 52bea0dda15..334d0e67426 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": "4aea16c7c5e270de8bb6ef2c1ca5d1a32d30638c"
+ "commit": "ccb6525c8d166c87fefa9ab87d6db9270ac1fc46"
}
diff --git a/src/third_party/wiredtiger/src/history/hs_rec.c b/src/third_party/wiredtiger/src/history/hs_rec.c
index 9f12c3fbdb5..37739540282 100644
--- a/src/third_party/wiredtiger/src/history/hs_rec.c
+++ b/src/third_party/wiredtiger/src/history/hs_rec.c
@@ -463,7 +463,7 @@ __wt_hs_insert_updates(WT_SESSION_IMPL *session, WT_RECONCILE *r, WT_MULTI *mult
WT_ERR(__wt_update_vector_push(&out_of_order_ts_updates, min_ts_upd));
out_of_order_ts_upd = min_ts_upd;
} else if (upd->prepare_state != WT_PREPARE_INPROGRESS &&
- (min_ts_upd == NULL || upd->start_ts < min_ts_upd->start_ts))
+ (min_ts_upd == NULL || upd->start_ts <= min_ts_upd->start_ts))
min_ts_upd = upd;
WT_ERR(__wt_update_vector_push(&updates, upd));
diff --git a/src/third_party/wiredtiger/src/reconcile/rec_visibility.c b/src/third_party/wiredtiger/src/reconcile/rec_visibility.c
index 64ff9d361ae..ba947c13ac4 100644
--- a/src/third_party/wiredtiger/src/reconcile/rec_visibility.c
+++ b/src/third_party/wiredtiger/src/reconcile/rec_visibility.c
@@ -255,20 +255,6 @@ __timestamp_out_of_order_fix(WT_SESSION_IMPL *session, WT_TIME_WINDOW *select_tw
select_tw->start_ts = select_tw->stop_ts;
return (true);
}
-
- /*
- * As per the time window validation the durable_start_ts must not be greater than the stop_ts.
- * Hence, if the stop_ts is less than durable_start_ts and greater than start_ts, make
- * durable_start_ts equal to stop_ts.
- */
- if ((select_tw->start_ts != select_tw->stop_ts) &&
- (select_tw->stop_ts < select_tw->durable_start_ts)) {
- __wt_verbose(session, WT_VERB_TIMESTAMP,
- "Warning: fixing out-of-order timestamps remove earlier than value; time window %s",
- __wt_time_window_to_string(select_tw, time_string));
-
- select_tw->durable_start_ts = select_tw->stop_ts;
- }
return (false);
}
diff --git a/src/third_party/wiredtiger/test/suite/test_prepare17.py b/src/third_party/wiredtiger/test/suite/test_prepare17.py
deleted file mode 100644
index ae514b3865f..00000000000
--- a/src/third_party/wiredtiger/test/suite/test_prepare17.py
+++ /dev/null
@@ -1,122 +0,0 @@
-#!/usr/bin/env python
-#
-# Public Domain 2014-present MongoDB, Inc.
-# Public Domain 2008-2014 WiredTiger, Inc.
-#
-# This is free and unencumbered software released into the public domain.
-#
-# Anyone is free to copy, modify, publish, use, compile, sell, or
-# distribute this software, either in source code form or as a compiled
-# binary, for any purpose, commercial or non-commercial, and by any
-# means.
-#
-# In jurisdictions that recognize copyright laws, the author or authors
-# of this software dedicate any and all copyright interest in the
-# software to the public domain. We make this dedication for the benefit
-# of the public at large and to the detriment of our heirs and
-# successors. We intend this dedication to be an overt act of
-# relinquishment in perpetuity of all present and future rights to this
-# software under copyright law.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-# OTHER DEALINGS IN THE SOFTWARE.
-
-import wiredtiger, wttest
-from wtscenario import make_scenarios
-from helper import simulate_crash_restart
-
-# test_prepare17.py
-# The following test is to verify that if the out of order commit timestamp(for a transaction, say T2) lies between
-# previous commit and durable timestamps(for a transaction, say T1), the durable timestamp of T1 changes to
-# the commit timestamp of T2.
-class test_prepare17(wttest.WiredTigerTestCase):
- session_config = 'isolation=snapshot'
- uri = 'table:test_prepare17'
- nrows = 1000
- value1 = 'aaaaa'
- value2 = 'bbbbb'
-
- key_format_values = [
- ('integer-row', dict(key_format='i')),
- ('column', dict(key_format='r')),
- ]
- update = [
- ('prepare', dict(prepare=True)),
- ('non-prepare', dict(prepare=False)),
- ]
- scenarios = make_scenarios(key_format_values, update)
-
- def test_prepare(self):
- create_params = 'key_format={},value_format=S'.format(self.key_format)
- self.session.create(self.uri, create_params)
- cursor = self.session.open_cursor(self.uri)
-
- # Transaction one
- self.session.begin_transaction()
- for i in range(1, self.nrows + 1):
- cursor[i] = self.value1
- self.session.prepare_transaction('prepare_timestamp=' + self.timestamp_str(2))
- self.session.commit_transaction('commit_timestamp=' + self.timestamp_str(3)+ ',durable_timestamp=' + self.timestamp_str(6))
-
- # In the case below, the commit timestamp lies between the previous commit and durable timestamps.
- # Internally, WiredTiger changes the durable timestamp of Transaction one, i.e. 6 to the commit timestamp
- # of the transaction below, i.e, 4.
- # As per the time window validation the commit timestamp cannot be in between any previous commit and
- # durable timestamps.
- #
- # Note: The scenario where commit timestamp lies between the previous commit and durable timestamps
- # is not expected from MongoDB, but WiredTiger API can allow it.
- if self.prepare:
- self.session.begin_transaction()
- for i in range(1, self.nrows + 1):
- cursor[i] = self.value2
- self.session.prepare_transaction('prepare_timestamp=' + self.timestamp_str(3))
- self.session.commit_transaction('commit_timestamp=' + self.timestamp_str(4) + ',durable_timestamp=' + self.timestamp_str(7))
- else:
- self.session.begin_transaction()
- for i in range(1, self.nrows + 1):
- cursor[i] = self.value2
- self.session.commit_transaction('commit_timestamp=' + self.timestamp_str(4))
-
- # Time window validation occurs as part of checkpoint.
- self.session.checkpoint()
-
- def test_prepare_insert_remove(self):
- if not self.prepare:
- return
-
- create_params = 'key_format={},value_format=S'.format(self.key_format)
- self.session.create(self.uri, create_params)
- cursor = self.session.open_cursor(self.uri)
-
- self.session.begin_transaction()
- for i in range(1, self.nrows + 1):
- cursor[i] = self.value1
- self.session.commit_transaction('commit_timestamp=' + self.timestamp_str(2))
-
- # Transaction 2
- self.session.begin_transaction()
- for i in range(1, self.nrows + 1):
- cursor[i] = self.value2
- cursor.set_key(i)
- cursor.remove()
- self.session.prepare_transaction('prepare_timestamp=' + self.timestamp_str(3))
- self.session.commit_transaction('commit_timestamp=' + self.timestamp_str(4) + ',durable_timestamp=' + self.timestamp_str(7))
-
- self.conn.set_timestamp('stable_timestamp=' + self.timestamp_str(6))
- self.session.checkpoint()
- simulate_crash_restart(self, ".", "RESTART")
-
- # Update in Transaction2 should be removed as the stable timestamp (6) is less than the durable timestamp (7).
- cursor = self.session.open_cursor(self.uri)
- self.session.begin_transaction()
- for i in range(1, self.nrows + 1):
- cursor.set_key(i)
- cursor.search()
- self.assertEqual(cursor.get_value(), self.value1)
- self.session.rollback_transaction()