-
Type: Task
-
Resolution: Fixed
-
Priority: Major - P3
-
Affects Version/s: None
-
Component/s: None
-
None
-
Query Execution
-
Fully Compatible
After discussions with anna.wawrzyniak@mongodb.com and martin.neupauer@mongodb.com, the inadvertent change described below has been deemed to have improved performance but not broken anything. Thus it is a rare case where a random mutation actually improved fitness. Therefore I am converting this ticket from a Bug to a Task and will used it just to disambiguate the method names and add more comments about yielding rules. It will not change any functionality.
The original mutation:
SBE PlanStage UnwindStage::getNext() - sbe/stages/unwind.cpp is currently calling a method, checkForInterrupt(), that checks for interrupts but does NOT yield.
When this call was originally added by SERVER-72004, it DID yield.
The ticket SERVER-81812 renamed checkForInterrupt() to checkForInterruptAndYield() but did not convert the call in UnwindStage::getNext() to the new name, then created a new method with the old name checkForInterrupt() that does NOT yield, inadvertently changing SBE UnwindStage from a yielding to a non-yielding stage.
The ticket SERVER-72258 "Audit and add missing checkForInterrupt to SBE stages," added several checkForInterruptAndYield() calls to other stages but did not change UnwindStage.
UnwindStage is used by SBE $lookup, which IS enabled externally. ($unwind itself is not enabled externally in SBE, but the same code is used internally by $lookup.)
FYI martin.neupauer@mongodb.com anna.wawrzyniak@mongodb.com yoonsoo.kim parker.felix@mongodb.com schwerin@mongodb.com matt.broadstone@mongodb.com