diff options
Diffstat (limited to 'src/mongo/db/s/range_deleter_service.h')
-rw-r--r-- | src/mongo/db/s/range_deleter_service.h | 16 |
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 |