diff options
author | Luke Chen <luke.chen@mongodb.com> | 2020-01-31 05:00:39 +0000 |
---|---|---|
committer | evergreen <evergreen@mongodb.com> | 2020-01-31 05:00:39 +0000 |
commit | 23603867ca8e968453683a9dc55c72a32e3cb0b5 (patch) | |
tree | ad7027b69cb96df2233c29f07ed64141fe894bae /src/third_party/wiredtiger/test/suite/test_prepare02.py | |
parent | c2d35dd6214978959a9cfc5dcb813d62ae8981ef (diff) | |
download | mongo-23603867ca8e968453683a9dc55c72a32e3cb0b5.tar.gz |
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
Diffstat (limited to 'src/third_party/wiredtiger/test/suite/test_prepare02.py')
-rw-r--r-- | src/third_party/wiredtiger/test/suite/test_prepare02.py | 56 |
1 files changed, 28 insertions, 28 deletions
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") |