summaryrefslogtreecommitdiff
path: root/src/third_party/wiredtiger/test/suite/test_prepare02.py
diff options
context:
space:
mode:
authorLuke Chen <luke.chen@mongodb.com>2020-01-31 05:00:39 +0000
committerevergreen <evergreen@mongodb.com>2020-01-31 05:00:39 +0000
commit23603867ca8e968453683a9dc55c72a32e3cb0b5 (patch)
treead7027b69cb96df2233c29f07ed64141fe894bae /src/third_party/wiredtiger/test/suite/test_prepare02.py
parentc2d35dd6214978959a9cfc5dcb813d62ae8981ef (diff)
downloadmongo-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.py56
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")