summaryrefslogtreecommitdiff
path: root/src/mongo/db/exec/batched_delete_stage.cpp
diff options
context:
space:
mode:
authorHaley Connelly <haley.connelly@mongodb.com>2022-05-09 14:32:44 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-05-09 16:32:43 +0000
commitcd9c111f2707f7e641765e9c00c1cb036df61c9f (patch)
tree40c0a4c65852f0ae4db1fb6784567d1a094c3305 /src/mongo/db/exec/batched_delete_stage.cpp
parent1cb03bb7e99accaa2f3abefd0f32448d86265efc (diff)
downloadmongo-cd9c111f2707f7e641765e9c00c1cb036df61c9f.tar.gz
SERVER-66210 Indicate when pass targets cause BatchedDeleteStage completion
Diffstat (limited to 'src/mongo/db/exec/batched_delete_stage.cpp')
-rw-r--r--src/mongo/db/exec/batched_delete_stage.cpp24
1 files changed, 23 insertions, 1 deletions
diff --git a/src/mongo/db/exec/batched_delete_stage.cpp b/src/mongo/db/exec/batched_delete_stage.cpp
index 79a12600418..32f5bfe5d99 100644
--- a/src/mongo/db/exec/batched_delete_stage.cpp
+++ b/src/mongo/db/exec/batched_delete_stage.cpp
@@ -185,6 +185,19 @@ bool BatchedDeleteStage::isEOF() {
return _stagedDeletesBuffer.empty() && _passStagingComplete;
}
+std::unique_ptr<PlanStageStats> BatchedDeleteStage::getStats() {
+ _commonStats.isEOF = isEOF();
+ std::unique_ptr<PlanStageStats> stats =
+ std::make_unique<PlanStageStats>(_commonStats, stageType());
+ stats->specific = std::make_unique<BatchedDeleteStats>(_specificStats);
+ stats->children.emplace_back(child()->getStats());
+ return stats;
+}
+
+const SpecificStats* BatchedDeleteStage::getSpecificStats() const {
+ return &_specificStats;
+}
+
PlanStage::StageState BatchedDeleteStage::doWork(WorkingSetID* out) {
WorkingSetID idToReturn = WorkingSet::INVALID_ID;
PlanStage::StageState planStageState = PlanStage::NEED_TIME;
@@ -213,7 +226,16 @@ PlanStage::StageState BatchedDeleteStage::doWork(WorkingSetID* out) {
_stagedDeletesWatermarkBytes = 0;
planStageState = _deleteBatch(&idToReturn);
- _passStagingComplete = _passStagingComplete || _passTargetMet();
+ if (!_passStagingComplete) {
+ tassert(6621000, "Expected staging to be permitted", !_specificStats.passTargetMet);
+
+ // Staging hasn't yielded PlanStage::IS_EOF.
+ //
+ // Indicate whether the operation should reach completion due to a pass target.
+ _specificStats.passTargetMet = _passTargetMet();
+ }
+
+ _passStagingComplete = _passStagingComplete || _specificStats.passTargetMet;
_commitStagedDeletes = _passStagingComplete || !_stagedDeletesBuffer.empty();
}