From 23603867ca8e968453683a9dc55c72a32e3cb0b5 Mon Sep 17 00:00:00 2001 From: Luke Chen Date: Fri, 31 Jan 2020 05:00:39 +0000 Subject: Import wiredtiger: 168c7f1b3859516115721868f312544abb0caf5b from branch mongodb-4.4 ref: d790f9057c..168c7f1b38 for: 4.3.4 WT-5159 Make wiredtiger work with SWIG 4.0.0 beyond WT-5219 Btree walk code read the lock WT_REF.addr field without locking WT-5376 WT_UPDATE.type field can race with visibility checks when returning key/value pairs WT-5387 Prepared transaction resolution can stall eviction on active pages WT-5393 Prepared transaction rollback and API error handling fixes WT-5405 Make format LSM test a separate Evergreen task WT-5437 Salvage's excessive consumption of cache memory causing eviction to stall WT-5444 Re-enable PPC format tests in Evergreen WT-5449 Increase contention in history store stress workload WT-5458 Fix Evergreen timeout failures in linux-directio test WT-5460 Buffer alignment failure captured by linux-directio test WT-5468 Improve documentation for "wt load" WT-5480 Don't take threads resolving prepared transactions to assist with eviction WT-5481 DIAGNOSTIC split code assert can race with WT_REF locking WT-5488 Dump the failing CONFIG for Evergreen test/format tasks --- .../wiredtiger/test/suite/test_prepare02.py | 56 +++++++++++----------- 1 file changed, 28 insertions(+), 28 deletions(-) (limited to 'src/third_party/wiredtiger/test/suite/test_prepare02.py') diff --git a/src/third_party/wiredtiger/test/suite/test_prepare02.py b/src/third_party/wiredtiger/test/suite/test_prepare02.py index 7546cc44d59..ebe79cf729c 100644 --- a/src/third_party/wiredtiger/test/suite/test_prepare02.py +++ b/src/third_party/wiredtiger/test/suite/test_prepare02.py @@ -40,38 +40,33 @@ class test_prepare02(wttest.WiredTigerTestCase, suite_subprocess): session_config = 'isolation=snapshot' def test_prepare_session_operations(self): - self.session.create("table:mytable", "key_format=S,value_format=S") - cursor = self.session.open_cursor("table:mytable", None) - # Test the session methods that are forbidden after the transaction is - # prepared. + # Test the session methods forbidden after the transaction is prepared. + self.session.create("table:mytable", "key_format=S,value_format=S") self.session.begin_transaction() + cursor = self.session.open_cursor("table:mytable", None) + cursor["key"] = "value" self.session.prepare_transaction("prepare_timestamp=2a") - msg = "/ not permitted in a/" - # - # The operations listed below are not supported in the prepared state. - # - # The operations are listed in the same order as they are declared in - # the session structure. Any function missing below is allowed in the - # prepared state. - # + msg = "/not permitted in a prepared transaction/" + + # The operations are listed in the same order as they are declared in the session structure. + # WT_SESSION.close permitted. self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda:self.session.reconfigure(), msg) + # WT_SESSION.strerror permitted, but currently broken in the Python API (WT-5399). self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda: self.session.open_cursor("table:mytable", None), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, - lambda: self.session.alter("table:mytable", - "access_pattern_hint=random"), msg) + lambda: self.session.alter("table:mytable", "access_pattern_hint=random"), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, - lambda: self.session.create("table:mytable1", - "key_format=S,value_format=S"), msg) + lambda: self.session.create("table:mytable1", "key_format=S,value_format=S"), msg) + # WT_SESSION.import permitted, not supported in the Python API. self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda: self.session.compact("table:mytable"), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda: self.session.drop("table:mytable", None), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, - lambda: self.session.join(cursor, cursor, - "compare=gt,count=10"), msg) + lambda: self.session.join(cursor, cursor, "compare=gt,count=10"), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda: self.session.log_flush("sync=on"), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, @@ -79,33 +74,39 @@ class test_prepare02(wttest.WiredTigerTestCase, suite_subprocess): self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda: self.session.rebalance("table:mytable", None), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, - lambda: self.session.rename("table:mytable", "table:mynewtable", - None), msg) + lambda: self.session.rename("table:mytable", "table:mynewtable", None), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda:self.session.reset(), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda: self.session.salvage("table:mytable", None), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, - lambda: self.session.truncate("table:mytable", - None, None, None), msg) + lambda: self.session.truncate("table:mytable", None, None, None), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda: self.session.upgrade("table:mytable", None), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda: self.session.verify("table:mytable", None), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda:self.session.begin_transaction(), msg) + # WT_SESSION.commit_transaction permitted, tested below. self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda:self.session.prepare_transaction("prepare_timestamp=2a"), msg) - self.assertRaisesWithMessage(wiredtiger.WiredTigerError, - lambda: self.session.timestamp_transaction( - "read_timestamp=2a"), msg) + # WT_SESSION.rollback_transaction permitted, tested below. + self.session.timestamp_transaction("commit_timestamp=2b") + self.assertTimestampsEqual(self.session.query_timestamp('get=prepare'), '2a') self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda:self.session.checkpoint(), msg) self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda: self.session.snapshot("name=test"), msg) + # WT_SESSION.transaction_pinned_range permitted, not supported in the Python API. self.assertRaisesWithMessage(wiredtiger.WiredTigerError, lambda:self.session.transaction_sync(), msg) - self.session.rollback_transaction() + self.session.breakpoint() + + # Commit the transaction. Test that no "not permitted in a prepared transaction" error has + # set a transaction error flag, that is, we should still be able to commit successfully. + self.session.timestamp_transaction("commit_timestamp=2b") + self.session.timestamp_transaction("durable_timestamp=2b") + self.session.commit_transaction('commit_timestamp=2a') # Commit after prepare is permitted. self.session.begin_transaction() @@ -115,8 +116,7 @@ class test_prepare02(wttest.WiredTigerTestCase, suite_subprocess): self.session.timestamp_transaction("durable_timestamp=2b") self.session.commit_transaction() - # Setting commit timestamp via timestamp_transaction after - # prepare is also permitted. + # Setting commit timestamp via timestamp_transaction after prepare is also permitted. self.session.begin_transaction() c1 = self.session.open_cursor("table:mytable", None) self.session.prepare_transaction("prepare_timestamp=2a") -- cgit v1.2.1