diff options
author | Silvia Surroca <silvia.surroca@mongodb.com> | 2022-08-22 10:24:46 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-08-22 10:54:04 +0000 |
commit | 5518f4e3de045cf3cbbd01d1d4a98dfa5939517c (patch) | |
tree | 6410b18236644716235004a73d283db6e16189f8 | |
parent | 02276ba2c720ae0060224df0348e08c31be764d5 (diff) | |
download | mongo-5518f4e3de045cf3cbbd01d1d4a98dfa5939517c.tar.gz |
SERVER-68676 Range deleter service must honor `disableResumableRangeDeleter`
-rw-r--r-- | src/mongo/db/s/range_deleter_service.cpp | 23 | ||||
-rw-r--r-- | src/mongo/db/s/range_deleter_service_test.cpp | 32 |
2 files changed, 55 insertions, 0 deletions
diff --git a/src/mongo/db/s/range_deleter_service.cpp b/src/mongo/db/s/range_deleter_service.cpp index 36e946dd516..41c2b2f27c2 100644 --- a/src/mongo/db/s/range_deleter_service.cpp +++ b/src/mongo/db/s/range_deleter_service.cpp @@ -83,6 +83,12 @@ void RangeDeleterService::onStepUpComplete(OperationContext* opCtx, long long te } void RangeDeleterService::_recoverRangeDeletionsOnStepUp() { + + if (disableResumableRangeDeleter.load()) { + _state.store(kDown); + return; + } + // TODO SERVER-68348 Asynchronously register tasks on the range deleter service on step-up _state.store(kUp); } @@ -116,6 +122,14 @@ BSONObj RangeDeleterService::dumpState() { SharedSemiFuture<void> RangeDeleterService::registerTask( const RangeDeletionTask& rdt, SemiFuture<void>&& waitForActiveQueriesToComplete) { + if (disableResumableRangeDeleter.load()) { + return SemiFuture<void>::makeReady( + Status(ErrorCodes::ResumableRangeDeleterDisabled, + "Not submitting any range deletion task because the " + "disableResumableRangeDeleter server parameter is set to true")) + .share(); + } + // Block the scheduling of the task while populating internal data structures SharedPromise<void> blockUntilRegistered; @@ -204,6 +218,15 @@ int RangeDeleterService::getNumRangeDeletionTasksForCollection(const UUID& colle SharedSemiFuture<void> RangeDeleterService::getOverlappingRangeDeletionsFuture( const UUID& collectionUUID, const ChunkRange& range) { + + if (disableResumableRangeDeleter.load()) { + return SemiFuture<void>::makeReady( + Status(ErrorCodes::ResumableRangeDeleterDisabled, + "Not submitting any range deletion task because the " + "disableResumableRangeDeleter server parameter is set to true")) + .share(); + } + auto lock = _acquireMutexFailIfServiceNotUp(); auto mapEntry = _rangeDeletionTasks.find(collectionUUID); diff --git a/src/mongo/db/s/range_deleter_service_test.cpp b/src/mongo/db/s/range_deleter_service_test.cpp index 30258ecb081..d12da47c2f4 100644 --- a/src/mongo/db/s/range_deleter_service_test.cpp +++ b/src/mongo/db/s/range_deleter_service_test.cpp @@ -535,4 +535,36 @@ TEST_F(RangeDeleterServiceTest, DumpState) { << "Expected " << state << " == " << expectedState; } +TEST_F(RangeDeleterServiceTest, RegisterTaskWithDisableResumableRangeDeleterFlagEnabled) { + + RAIIServerParameterControllerForTest enableFeatureFlag{"disableResumableRangeDeleter", true}; + + auto rds = RangeDeleterService::get(opCtx); + auto taskWithOngoingQueries = rangeDeletionTask0ForCollA; + auto completionFuture = rds->registerTask(taskWithOngoingQueries->getTask(), + taskWithOngoingQueries->getOngoingQueriesFuture()); + ASSERT(completionFuture.isReady()); + ASSERT_EQ(0, rds->getNumRangeDeletionTasksForCollection(uuidCollA)); +} + +TEST_F(RangeDeleterServiceTest, + GetOverlappingRangeDeletionsFutureWithDisableResumableRangeDeleterFlagEnabled) { + + auto rds = RangeDeleterService::get(opCtx); + auto taskWithOngoingQueries = rangeDeletionTask0ForCollA; + auto completionFuture = rds->registerTask(taskWithOngoingQueries->getTask(), + taskWithOngoingQueries->getOngoingQueriesFuture()); + ASSERT(!completionFuture.isReady()); + ASSERT_EQ(1, rds->getNumRangeDeletionTasksForCollection(uuidCollA)); + + auto overlappingRangeFuture = rds->getOverlappingRangeDeletionsFuture( + uuidCollA, taskWithOngoingQueries->getTask().getRange()); + ASSERT(!overlappingRangeFuture.isReady()); + + RAIIServerParameterControllerForTest enableFeatureFlag{"disableResumableRangeDeleter", true}; + auto overlappingRangeFutureWhenDisabled = rds->getOverlappingRangeDeletionsFuture( + uuidCollA, taskWithOngoingQueries->getTask().getRange()); + ASSERT(overlappingRangeFutureWhenDisabled.isReady()); +} + } // namespace mongo |