diff options
author | David Storch <david.storch@10gen.com> | 2015-11-04 17:56:53 -0500 |
---|---|---|
committer | David Storch <david.storch@10gen.com> | 2015-11-06 13:49:51 -0500 |
commit | e81c8bce740deea291cbcb7f4c0652d0ae6af25e (patch) | |
tree | 92fa12709e437b43c85b3f900c763d7c8da665af | |
parent | bab3c56a327edd9f9f4afe045a78cf68b84908ba (diff) | |
download | mongo-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.cpp | 8 | ||||
-rw-r--r-- | src/mongo/db/exec/multi_plan.cpp | 13 |
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) { |