summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/queued_data_stage.cpp
diff options
context:
space:
mode:
authorNick Zolnierz <nicholas.zolnierz@mongodb.com>2018-04-27 15:49:07 -0400
committerNick Zolnierz <nicholas.zolnierz@mongodb.com>2018-05-01 13:47:50 -0400
commit46f72213f60bd74367a11aec7f02b38780ae7c3a (patch)
tree45018ee4a9531cb973f6fbb96c321ef44774278c /src/mongo/db/exec/queued_data_stage.cpp
parent0d097ebf4d5c78e77d789dad3f8a45a942d37d47 (diff)
downloadmongo-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.cpp17
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;