-
Type: Task
-
Resolution: Fixed
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: Sharding
-
Fully Compatible
-
Sharding 2018-08-27, Sharding 2018-09-10, Sharding 2018-09-24
Mongos should only retry on snapshot errors (SnapshotTooOld or SnapshotUnavailable) during the first statement in a cross-shard transaction. Each retry attempt should choose a new atClusterTime and once a global snapshot has been successfully established on all targeted shards, the atClusterTime used should be made immutable for the remainder of the transaction and used when targeting any new participants. If any future statements encounter a snapshot error, mongos should abort the entire transaction.
If mongos exhausts its allowed retry attempts trying to establish a snapshot, the snapshot error returned to the client should have the TransientTransactionError label.
Shards should always abort their local transactions on any snapshot error, since this implies snapshot level read concern and a cross-shard transaction with snapshot level read concern cannot continue if any targeted shard cannot provide a snapshot at the chosen global timestamp.
- has to be done after
-
SERVER-36237 Integrate atClusterTime selection on mongos with RouterSession
- Closed
-
SERVER-36590 Allow shards to start new transactions at the active transaction number
- Closed