-
Type:
Task
-
Resolution: Unresolved
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Timestamps, Transactions
-
None
-
Storage Engines - Transactions
-
2.765
-
SE Transactions - 2026-12-04
-
None
Problem
A follower rejects a prepare, commit or durable timestamp at or below the last picked-up checkpoint timestamp (_txn_check_follower_checkpoint_ts, WT-18878 for commit and durable, WT-18943 for prepare). _txn_set_rollback_timestamp does not call it. It only requires the rollback timestamp to be after the stable timestamp.
On a follower the picked-up checkpoint timestamp can be ahead of the local stable timestamp, so a rollback timestamp after stable can still be at or below the checkpoint timestamp.
The step-up ingest drain stores the rollback timestamp of a prepared rollback in the durable timestamp slot and only drains updates whose durable timestamp is in the drain range, which starts after the last checkpoint timestamp. A rollback at or below the checkpoint timestamp could therefore be skipped, leaving a preserved prepared cell in the stable btree unresolved.
Proposed change
- Call _txn_check_follower_checkpoint_ts from _txn_set_rollback_timestamp so a follower returns WT_EINVAL for a rollback timestamp at or below the last checkpoint timestamp.
- Add a Python test that prepares a transaction on a follower and expects WT_EINVAL when the rollback timestamp is at or below the picked-up checkpoint timestamp, and success when it is above.
Open points
- Confirm with a test that the drain skip described above is reachable without the check.
- The leader is unaffected: the helper returns immediately there, and the rollback timestamp must already be after stable.
- depends on
-
WT-19045 Validate follower prepare, durable and rollback timestamps against the last delivered checkpoint timestamp
-
- Open
-