Details
Description
While thinking about the issues discussed in WT-9115 I noticed that a behaviour is currently legal within the API, if a transaction calls timestamp_transaction(commit_timestamp=X) and then performs an update and then the stable is moved in the system to say X+5, then the transaction commits with a commit timestamp of X+10 the transaction will succeed despite having used invalid timestamps on its updates.
Reproducer:
import wiredtiger, wttest
|
from wtscenario import make_scenarios
|
|
class test_hs12(wttest.WiredTigerTestCase):
|
def test_hang(self):
|
uri = "table:hang"
|
create_params = 'value_format=S,key_format=i'
|
value1 = 'abcedfghijklmnopqrstuvwxyz' * 5
|
value2 = 'b' * 100
|
self.session.create(uri, create_params)
|
cursor = self.session.open_cursor(uri)
|
session2 = self.setUpSessionOpen(self.conn)
|
session2.create(uri, create_params)
|
cursor2 = session2.open_cursor(uri)
|
self.conn.set_timestamp("stable_timestamp=" + self.timestamp_str(1))
|
# Insert a full value.
|
self.session.begin_transaction()
|
self.session.timestamp_transaction('commit_timestamp=' + self.timestamp_str(2))
|
cursor[2] = value1
|
self.session.timestamp_transaction('commit_timestamp=' + self.timestamp_str(3))
|
cursor[3] = value2
|
self.conn.set_timestamp("stable_timestamp=" + self.timestamp_str(5))
|
#session2.checkpoint()
|
self.session.commit_transaction('commit_timestamp=' + self.timestamp_str(10))
|
|
if __name__ == '__main__':
|
wttest.run()
|