summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/delete.cpp
diff options
context:
space:
mode:
authorDavid Storch <david.storch@10gen.com>2015-01-14 16:22:46 -0500
committerDavid Storch <david.storch@10gen.com>2015-01-15 09:54:09 -0500
commitea2209e6399ef285efc31700ac67388885d614b0 (patch)
tree99c7a6fad6629aba4b555dce3476255b7a0686ed /src/mongo/db/exec/delete.cpp
parent5e42956e1c816dad5ffd5334565ddc623eebe6d2 (diff)
downloadmongo-ea2209e6399ef285efc31700ac67388885d614b0.tar.gz
SERVER-16807 update and delete stages should skip over invalidated documents (MMAP v1)
Diffstat (limited to 'src/mongo/db/exec/delete.cpp')
-rw-r--r--src/mongo/db/exec/delete.cpp12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/mongo/db/exec/delete.cpp b/src/mongo/db/exec/delete.cpp
index 232edd27416..a35413b1c5a 100644
--- a/src/mongo/db/exec/delete.cpp
+++ b/src/mongo/db/exec/delete.cpp
@@ -35,6 +35,7 @@
#include "mongo/db/catalog/collection.h"
#include "mongo/db/exec/scoped_timer.h"
#include "mongo/db/exec/working_set_common.h"
+#include "mongo/db/global_environment_experiment.h"
#include "mongo/db/repl/oplog.h"
#include "mongo/db/repl/replication_coordinator_global.h"
#include "mongo/util/log.h"
@@ -86,11 +87,14 @@ namespace mongo {
if (PlanStage::ADVANCED == status) {
WorkingSetMember* member = _ws->get(id);
if (!member->hasLoc()) {
+ // We expect to be here because of an invalidation causing a force-fetch, and
+ // doc-locking storage engines do not issue invalidations.
+ dassert(!supportsDocLocking());
+
_ws->free(id);
- const std::string errmsg = "delete stage failed to read member w/ loc from child";
- *out = WorkingSetCommon::allocateStatusMember(_ws, Status(ErrorCodes::InternalError,
- errmsg));
- return PlanStage::FAILURE;
+ ++_specificStats.nInvalidateSkips;
+ ++_commonStats.needTime;
+ return PlanStage::NEED_TIME;
}
RecordId rloc = member->loc;