summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/multi_plan.h
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-14 14:26:38 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-14 14:26:38 -0300
commit294bc6ecabf14c09c9bc8644704921dcf97cb44e (patch)
tree279b1e0bab53901a1647ac63c1c724f0f789a663 /src/mongo/db/exec/multi_plan.h
parent70be7c27a251621187a1de533462ae2bb1e3bd39 (diff)
parent1e917fd798aa25b7066d4b414b51184f13d5a092 (diff)
Update upstream source from tag 'upstream/6.0.10'debian/6.0.10-1
Update to upstream version '6.0.10' with Debian dir 2d176fa254eee97b139f712fec5709641335a8c3
Diffstat (limited to 'src/mongo/db/exec/multi_plan.h')
-rw-r--r--src/mongo/db/exec/multi_plan.h17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/mongo/db/exec/multi_plan.h b/src/mongo/db/exec/multi_plan.h
index 14d8ea413af..12ab61659db 100644
--- a/src/mongo/db/exec/multi_plan.h
+++ b/src/mongo/db/exec/multi_plan.h
@@ -75,7 +75,6 @@ public:
std::unique_ptr<PlanStageStats> getStats() final;
-
const SpecificStats* getSpecificStats() const final;
boost::optional<double> getCandidateScore(size_t candidateIdx) const;
@@ -163,6 +162,19 @@ private:
*/
void tryYield(PlanYieldPolicy* yieldPolicy);
+ /**
+ * Deletes all children, except for best and backup plans.
+ *
+ * This is necessary to release any resources that rejected plans might have.
+ * For example, if multi-update can be done by scanning several indexes,
+ * it will be slowed down by rejected index scans because of index cursors
+ * that need to be reopeneed after every update.
+ */
+ void removeRejectedPlans();
+ void rejectPlan(size_t planIdx);
+ void switchToBackupPlan();
+ void removeBackupPlan();
+
static const int kNoSuchPlan = -1;
// Describes the cases in which we should write an entry for the winning plan to the plan cache.
@@ -178,6 +190,9 @@ private:
// one-to-one with _candidates.
std::vector<plan_ranker::CandidatePlan> _candidates;
+ // Rejected plans in saved and detached state.
+ std::vector<std::unique_ptr<PlanStage>> _rejected;
+
// index into _candidates, of the winner of the plan competition
// uses -1 / kNoSuchPlan when best plan is not (yet) known
int _bestPlanIdx;