diff options
author | Nick Zolnierz <nicholas.zolnierz@mongodb.com> | 2018-04-27 15:49:07 -0400 |
---|---|---|
committer | Nick Zolnierz <nicholas.zolnierz@mongodb.com> | 2018-05-01 13:47:50 -0400 |
commit | 46f72213f60bd74367a11aec7f02b38780ae7c3a (patch) | |
tree | 45018ee4a9531cb973f6fbb96c321ef44774278c /src/mongo/db/exec/queued_data_stage.cpp | |
parent | 0d097ebf4d5c78e77d789dad3f8a45a942d37d47 (diff) | |
download | mongo-46f72213f60bd74367a11aec7f02b38780ae7c3a.tar.gz |
SERVER-34725: Group and count plan stages do not set the WorkingSetID output on PlanStage::DEAD state
Diffstat (limited to 'src/mongo/db/exec/queued_data_stage.cpp')
-rw-r--r-- | src/mongo/db/exec/queued_data_stage.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/mongo/db/exec/queued_data_stage.cpp b/src/mongo/db/exec/queued_data_stage.cpp index 6f3f3b0ed2f..69ff26330f5 100644 --- a/src/mongo/db/exec/queued_data_stage.cpp +++ b/src/mongo/db/exec/queued_data_stage.cpp @@ -51,9 +51,20 @@ PlanStage::StageState QueuedDataStage::doWork(WorkingSetID* out) { StageState state = _results.front(); _results.pop(); - if (PlanStage::ADVANCED == state) { - *out = _members.front(); - _members.pop(); + switch (state) { + case PlanStage::ADVANCED: + *out = _members.front(); + _members.pop(); + break; + case PlanStage::DEAD: + case PlanStage::FAILURE: + // On DEAD or FAILURE, this stage is reponsible for allocating the WorkingSetMember with + // the error details. + *out = WorkingSetCommon::allocateStatusMember( + _ws, Status(ErrorCodes::InternalError, "Queued data stage failure")); + break; + default: + break; } return state; |