From 78b7f73488d6d77aa02ae4d59846074c8396179e Mon Sep 17 00:00:00 2001 From: Pierlauro Sciarelli Date: Fri, 12 May 2023 15:53:29 +0000 Subject: SERVER-68773 Move scoped range deleter lock under the range deleter service --- src/mongo/db/s/balancer_stats_registry.h | 18 +----------------- src/mongo/db/s/range_deleter_service.cpp | 1 - src/mongo/db/s/range_deleter_service.h | 16 ++++++++++++++++ 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/mongo/db/s/balancer_stats_registry.h b/src/mongo/db/s/balancer_stats_registry.h index a5effc6b0e2..d7edd9c1a6a 100644 --- a/src/mongo/db/s/balancer_stats_registry.h +++ b/src/mongo/db/s/balancer_stats_registry.h @@ -29,30 +29,14 @@ #pragma once -#include "mongo/db/concurrency/d_concurrency.h" #include "mongo/db/operation_context.h" #include "mongo/db/repl/replica_set_aware_service.h" +#include "mongo/db/s/range_deleter_service.h" #include "mongo/util/concurrency/thread_pool.h" #include "mongo/util/uuid.h" namespace mongo { -/** - * Scoped lock to synchronize with the execution of range deletions. - * The range-deleter acquires a scoped lock in IX mode while orphans are being deleted. - * Acquiring the scoped lock in MODE_X ensures that no orphan counter in `config.rangeDeletions` - * entries is going to be updated concurrently. - */ -class ScopedRangeDeleterLock { -public: - ScopedRangeDeleterLock(OperationContext* opCtx, LockMode mode) - : _resourceLock(opCtx, _mutex.getRid(), mode) {} - -private: - const Lock::ResourceLock _resourceLock; - static inline const Lock::ResourceMutex _mutex{"ScopedRangeDeleterLock"}; -}; - /** * The BalancerStatsRegistry is used to cache metadata on shards, such as the orphan documents * count. The blancer (on the config sever) periodically fetches this metadata through the diff --git a/src/mongo/db/s/range_deleter_service.cpp b/src/mongo/db/s/range_deleter_service.cpp index c475da0836e..39cbd5def33 100644 --- a/src/mongo/db/s/range_deleter_service.cpp +++ b/src/mongo/db/s/range_deleter_service.cpp @@ -34,7 +34,6 @@ #include "mongo/db/op_observer/op_observer_registry.h" #include "mongo/db/repl/repl_client_info.h" #include "mongo/db/repl/wait_for_majority_service.h" -#include "mongo/db/s/balancer_stats_registry.h" #include "mongo/db/s/collection_sharding_runtime.h" #include "mongo/db/s/range_deleter_service_op_observer.h" #include "mongo/db/s/range_deletion_util.h" diff --git a/src/mongo/db/s/range_deleter_service.h b/src/mongo/db/s/range_deleter_service.h index 90745568ce1..ecaf4e687c8 100644 --- a/src/mongo/db/s/range_deleter_service.h +++ b/src/mongo/db/s/range_deleter_service.h @@ -28,6 +28,7 @@ */ #pragma once +#include "mongo/db/concurrency/d_concurrency.h" #include "mongo/db/repl/replica_set_aware_service.h" #include "mongo/db/s/range_deletion_task_gen.h" #include "mongo/db/s/sharding_runtime_d_params_gen.h" @@ -280,4 +281,19 @@ private: void onBecomeArbiter() override final {} }; +/** + * Scoped lock to synchronize with the execution of range deletions. + * The range-deleter acquires a scoped lock in IX mode while orphans are being deleted. + * As long as this scoped lock is acquired in MODE_X, no range deletion will be running. + */ +class ScopedRangeDeleterLock { +public: + ScopedRangeDeleterLock(OperationContext* opCtx, LockMode mode) + : _resourceLock(opCtx, _mutex.getRid(), mode) {} + +private: + const Lock::ResourceLock _resourceLock; + static inline const Lock::ResourceMutex _mutex{"ScopedRangeDeleterLock"}; +}; + } // namespace mongo -- cgit v1.2.1