summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/range_deleter_service.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/s/range_deleter_service.h')
-rw-r--r--src/mongo/db/s/range_deleter_service.h16
1 files changed, 16 insertions, 0 deletions
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