[SERVER-82376] FCV opobserver _setVersion must not throw interrupts Created: 23/Oct/23 Updated: 30/Oct/23 Resolved: 30/Oct/23 |
|
| Status: | Closed |
| Project: | Core Server |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Major - P3 |
| Reporter: | Matthew Russotto | Assignee: | Backlog - Replication Team |
| Resolution: | Duplicate | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||||||||||
| Assigned Teams: |
Replication
|
||||||||||||
| Operating System: | ALL | ||||||||||||
| Participants: | |||||||||||||
| Linked BF Score: | 105 | ||||||||||||
| Description |
|
The call FcvOpObserver::_setVersion is run inside an onCommit handler, which is essentially noexcept (it calls terminate() manually on exception). However, killSessionsAbortUnpreparedTransactions, which it calls, is an interrupt point, so we can be interrupted (e.g. by stepdown, or even a user kill) and therefore crash. This is essentially a critical section – once we have committed the FCV update we MUST kill all the transactions and complete the _setVersion handler. But it's run from an (interruptable) client session. |
| Comments |
| Comment by Lingzhi Deng [ 30/Oct/23 ] |
|
I think this is a dup of |