summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierlauro Sciarelli <pierlauro.sciarelli@mongodb.com>2023-05-12 15:53:29 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-05-15 08:26:52 +0000
commit78b7f73488d6d77aa02ae4d59846074c8396179e (patch)
tree5b93322029ba36558cac11cbc220f675b4e525c3
parent1578ea98998e33d06cc1776f2bbd86d626370124 (diff)
downloadmongo-78b7f73488d6d77aa02ae4d59846074c8396179e.tar.gz
SERVER-68773 Move scoped range deleter lock under the range deleter service
-rw-r--r--src/mongo/db/s/balancer_stats_registry.h18
-rw-r--r--src/mongo/db/s/range_deleter_service.cpp1
-rw-r--r--src/mongo/db/s/range_deleter_service.h16
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,31 +29,15 @@
#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
* _shardsvrGetStatsForBalancing command and uses it to evaluate balancing status of collections.
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