-
Type: Task
-
Resolution: Fixed
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: Sharding
-
Fully Compatible
-
Sharding 2018-12-31, Sharding 2019-01-14, Sharding 2019-01-28, Sharding 2019-02-11, Sharding 2019-02-25, Sharding 2019-03-11, Sharding 2019-03-25, Sharding 2019-04-08
There are three stages in the lifetime of a TransactionCoordinator object:
- Created, but coordinateCommit command has not yet been received
- Prepare was sent, but decision has not yet been made, because no votes have been received from some participants
- Decision was made and commit was sent to participants, but confirmation has not yet been received from all
Phases 1 and 2 can be cancelled (timed-out), but phase 3 can not. This ticket is about introducing an upper bound for how long phases 1 and 2 can take before the coordinator unilaterally decides that it must abort.
The upper bound for phases 1 and 2 combined will be the same as the transactionLifetimeLimitSeconds parameter (which defaults to 1 minute). This means that if a commit is not received and/or decision cannot be made for transactionLifetimeLimitSeconds after the transaction has started, that transaction will abort.
If a coordinateCommit command is received with maxTimeMS greater than what is left of transactionLifetimeLimitSeconds since the transaction started, the effective maxTimeMS of the coordinateCommit command will be what is left of transactionLifetimeLimitSeconds.
- depends on
-
SERVER-38522 All the coordinator asynchronous tasks should be interruptible
- Closed
- is duplicated by
-
SERVER-36679 Add timer on TransactionCoordinator to time out waiting for votes and decide to abort
- Closed
- related to
-
SERVER-60685 TransactionCoordinator may interrupt locally executing update with non-Interruption error category, leading to server crash
- Closed