summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/or.cpp
diff options
context:
space:
mode:
authorBenety Goh <benety@mongodb.com>2014-02-27 10:18:43 -0500
committerBenety Goh <benety@mongodb.com>2014-02-27 15:14:00 -0500
commitd8f5f9a8221498e3637971fb0a74818d1d4782c5 (patch)
tree19e699062041426db4aa90bfa49bcb5b30be91d5 /src/mongo/db/exec/or.cpp
parent7ef1c038a8b7929a687eb931e8861deef444ce22 (diff)
downloadmongo-d8f5f9a8221498e3637971fb0a74818d1d4782c5.tar.gz
SERVER-12931 add failure status to working set if child stage fails without providing reason
Diffstat (limited to 'src/mongo/db/exec/or.cpp')
-rw-r--r--src/mongo/db/exec/or.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/mongo/db/exec/or.cpp b/src/mongo/db/exec/or.cpp
index 8387369c900..83a441d3896 100644
--- a/src/mongo/db/exec/or.cpp
+++ b/src/mongo/db/exec/or.cpp
@@ -28,6 +28,8 @@
#include "mongo/db/exec/or.h"
#include "mongo/db/exec/filter.h"
+#include "mongo/db/exec/working_set_common.h"
+#include "mongo/util/mongoutils/str.h"
namespace mongo {
@@ -108,6 +110,15 @@ namespace mongo {
}
else if (PlanStage::FAILURE == childStatus) {
*out = id;
+ // If a stage fails, it may create a status WSM to indicate why it
+ // failed, in which case 'id' is valid. If ID is invalid, we
+ // create our own error message.
+ if (WorkingSet::INVALID_ID == id) {
+ mongoutils::str::stream ss;
+ ss << "OR stage failed to read in results from child " << _currentChild;
+ Status status(ErrorCodes::InternalError, ss);
+ *out = WorkingSetCommon::allocateStatusMember( _ws, status);
+ }
return childStatus;
}
else {