[SERVER-38522] All the coordinator asynchronous tasks should be interruptible Created: 10/Dec/18 Updated: 29/Oct/23 Resolved: 22/Feb/19 |
|
| Status: | Closed |
| Project: | Core Server |
| Component/s: | Sharding |
| Affects Version/s: | None |
| Fix Version/s: | 4.1.9 |
| Type: | Improvement | Priority: | Major - P3 |
| Reporter: | Esha Maharishi (Inactive) | Assignee: | Kaloian Manassiev |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | ShardedTxn:DistributedCommit | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||||||||||
| Backwards Compatibility: | Fully Compatible | ||||||||||||
| Sprint: | Sharding 2018-12-31, Sharding 2019-01-14, Sharding 2019-01-28, Sharding 2019-02-11, Sharding 2019-02-25 | ||||||||||||
| Participants: | |||||||||||||
| Description |
|
And should get interrupted on stepdown, because stepup waits for them to quiesce. |
| Comments |
| Comment by Githook User [ 22/Feb/19 ] | |||||||||||||||||||||||||
|
Author: {'name': 'Kaloian Manassiev', 'email': 'kaloian.manassiev@mongodb.com', 'username': 'kaloianm'}Message: | |||||||||||||||||||||||||
| Comment by Githook User [ 22/Feb/19 ] | |||||||||||||||||||||||||
|
Author: {'name': 'Kaloian Manassiev', 'email': 'kaloian.manassiev@mongodb.com', 'username': 'kaloianm'}Message: | |||||||||||||||||||||||||
| Comment by Githook User [ 22/Feb/19 ] | |||||||||||||||||||||||||
|
Author: {'name': 'Kaloian Manassiev', 'email': 'kaloian.manassiev@mongodb.com', 'username': 'kaloianm'}Message: In order to allow multiple commands to be waited on and their responses | |||||||||||||||||||||||||
| Comment by Githook User [ 03/Jan/19 ] | |||||||||||||||||||||||||
|
Author: {'username': 'kaloianm', 'email': 'kaloian.manassiev@mongodb.com', 'name': 'Kaloian Manassiev'}Message: Also splits TransactionCoordinator util into driver and futures components | |||||||||||||||||||||||||
| Comment by Matthew Saltz (Inactive) [ 14/Dec/18 ] | |||||||||||||||||||||||||
|
The current idea for the implementation of this is to have a class CoordinatorExecutionContext that a TransactionCoordinator will own by value and use to interact with the network and disk (the "outside world"). This layer will be cancelable so that TransactionCoordinator only has to handle cancelation in an onError continuation. The interface for CoordinatorExecutionContext can look something like this:
TransactionCoordinator::cancel will then just call CoordinatorExecutorContext::cancel. |