diff options
author | David Storch <david.storch@10gen.com> | 2015-01-14 16:22:46 -0500 |
---|---|---|
committer | David Storch <david.storch@10gen.com> | 2015-01-15 09:54:09 -0500 |
commit | ea2209e6399ef285efc31700ac67388885d614b0 (patch) | |
tree | 99c7a6fad6629aba4b555dce3476255b7a0686ed /src/mongo/db/exec/delete.cpp | |
parent | 5e42956e1c816dad5ffd5334565ddc623eebe6d2 (diff) | |
download | mongo-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.cpp | 12 |
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; |