-
Type: Task
-
Resolution: Fixed
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: Replication
-
Fully Compatible
-
Sharding 2020-10-05, Sharding 2020-10-19
-
30
Update rollback() method of the TenantMigrationDonorHandler class described in SERVER-49178 to call rollBackStartBlocking if the _state is “start blocking”, and move mtab->startBlockingWrites so that it is called after the "start blocking" update's WUOW is created.
This way:
- if the "start blocking" update commits, then if the node steps down and the new primary does not have the "start blocking" update (and therefore tries to do the "start blocking" update again), the old primary would have had to go through rollback
- if the "start blocking" update aborts, then the mtab->startBlockingWrites will get undone through the rollback() handler
Note that though the rollback() handler can run at an arbitrary point after the WUOW aborts, any locks held in the WUOW will have their lifetime extended until all the rollback() handlers have run. This means if the write aborted due to stepdown, the stepdown will block until the write's rollback() handler runs.
- is duplicated by
-
SERVER-49178 [stepdown] Make "commit" and "abort" writes' onAbort handlers call TenantMigrationAccessBlocker::rollBackCommitOrAbort
- Closed