[SERVER-1819] audit usage of checkForInterrupt to ensure all exceptions handled cleanly Created: 21/Sep/10 Updated: 02/Mar/17 Resolved: 02/Mar/17 |
|
| Status: | Closed |
| Project: | Core Server |
| Component/s: | Concurrency |
| Affects Version/s: | None |
| Fix Version/s: | None |
| Type: | Bug | Priority: | Major - P3 |
| Reporter: | Aaron Staple | Assignee: | Unassigned |
| Resolution: | Done | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Issue Links: |
|
||||||||||||
| Operating System: | ALL | ||||||||||||
| Participants: | |||||||||||||
| Comments |
| Comment by Eric Milkie [ 02/Mar/17 ] |
|
I don't expect to do any further work for this ticket. The redesign of transactions with support for rollback in both mmap and WiredTiger has reduced the chance for bugs in this area. |
| Comment by auto [ 05/Oct/10 ] |
|
Author: {'login': 'astaple', 'name': 'Aaron', 'email': 'aaron@10gen.com'}Message: |
| Comment by Aaron Staple [ 05/Oct/10 ] |
|
Unfortunately this is not yet a complete fix. There appear to be at least some cases where interrupting during a yield() can lead to an inconsistent state. In addition, Dwight suggested we could check for interrupt in the following situations:
|
| Comment by auto [ 05/Oct/10 ] |
|
Author: {'login': 'astaple', 'name': 'Aaron', 'email': 'aaron@10gen.com'}Message: |
| Comment by Dwight Merriman [ 24/Sep/10 ] |
|
One approach, which would be the safest, would be to simply make checkForInterrupt() NOT interrupt on a write operation, and simply require long write ops to call KillCurrentOp::checkForInterruptNoAssert() at appropriate times. In addition clientcursor::yield() could call checkForInterruptNoAssert() and abort the entire op, as that is a safe place. the above approach would have no risk of a mistake that yields corruption, but would trade off for a risk of a non-interruptible operation – probably a good thing. |