diff options
author | Haley Connelly <haley.connelly@mongodb.com> | 2022-05-09 14:32:44 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-05-09 16:32:43 +0000 |
commit | cd9c111f2707f7e641765e9c00c1cb036df61c9f (patch) | |
tree | 40c0a4c65852f0ae4db1fb6784567d1a094c3305 /src/mongo/db/exec/batched_delete_stage.cpp | |
parent | 1cb03bb7e99accaa2f3abefd0f32448d86265efc (diff) | |
download | mongo-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.cpp | 24 |
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(); } |