summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Storch <david.storch@10gen.com>2015-11-04 17:56:53 -0500
committerDavid Storch <david.storch@10gen.com>2015-11-06 13:49:51 -0500
commite81c8bce740deea291cbcb7f4c0652d0ae6af25e (patch)
tree92fa12709e437b43c85b3f900c763d7c8da665af
parentbab3c56a327edd9f9f4afe045a78cf68b84908ba (diff)
downloadmongo-e81c8bce740deea291cbcb7f4c0652d0ae6af25e.tar.gz
SERVER-21227 don't drop invalidated results in MultiPlanStage or CachedPlanStage
(cherry picked from commit e70c8cb86571dba41fda10e26a46274fe4d66591) Conflicts: src/mongo/db/exec/cached_plan.cpp
-rw-r--r--src/mongo/db/exec/cached_plan.cpp8
-rw-r--r--src/mongo/db/exec/multi_plan.cpp13
2 files changed, 4 insertions, 17 deletions
diff --git a/src/mongo/db/exec/cached_plan.cpp b/src/mongo/db/exec/cached_plan.cpp
index c6ac95de7c2..03c6a800768 100644
--- a/src/mongo/db/exec/cached_plan.cpp
+++ b/src/mongo/db/exec/cached_plan.cpp
@@ -359,16 +359,10 @@ void CachedPlanStage::invalidate(OperationContext* txn, const RecordId& dl, Inva
}
++_commonStats.invalidates;
- for (std::list<WorkingSetID>::iterator it = _results.begin(); it != _results.end();) {
+ for (auto it = _results.begin(); it != _results.end(); ++it) {
WorkingSetMember* member = _ws->get(*it);
if (member->hasLoc() && member->loc == dl) {
- std::list<WorkingSetID>::iterator next = it;
- ++next;
WorkingSetCommon::fetchAndInvalidateLoc(txn, member, _collection);
- _results.erase(it);
- it = next;
- } else {
- ++it;
}
}
}
diff --git a/src/mongo/db/exec/multi_plan.cpp b/src/mongo/db/exec/multi_plan.cpp
index 03e6453d86e..46503849045 100644
--- a/src/mongo/db/exec/multi_plan.cpp
+++ b/src/mongo/db/exec/multi_plan.cpp
@@ -463,22 +463,15 @@ void invalidateHelper(OperationContext* txn,
const RecordId& dl,
list<WorkingSetID>* idsToInvalidate,
const Collection* collection) {
- for (list<WorkingSetID>::iterator it = idsToInvalidate->begin();
- it != idsToInvalidate->end();) {
+ for (auto it = idsToInvalidate->begin(); it != idsToInvalidate->end(); ++it) {
WorkingSetMember* member = ws->get(*it);
if (member->hasLoc() && member->loc == dl) {
- list<WorkingSetID>::iterator next = it;
- next++;
WorkingSetCommon::fetchAndInvalidateLoc(txn, member, collection);
- ws->flagForReview(*it);
- idsToInvalidate->erase(it);
- it = next;
- } else {
- it++;
}
}
}
-}
+
+} // namespace
void MultiPlanStage::invalidate(OperationContext* txn, const RecordId& dl, InvalidationType type) {
if (_failure) {