diff options
author | Pierlauro Sciarelli <pierlauro.sciarelli@mongodb.com> | 2023-05-12 15:53:29 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2023-05-15 08:26:52 +0000 |
commit | 78b7f73488d6d77aa02ae4d59846074c8396179e (patch) | |
tree | 5b93322029ba36558cac11cbc220f675b4e525c3 /src/mongo/db/s/range_deleter_service.h | |
parent | 1578ea98998e33d06cc1776f2bbd86d626370124 (diff) | |
download | mongo-78b7f73488d6d77aa02ae4d59846074c8396179e.tar.gz |
SERVER-68773 Move scoped range deleter lock under the range deleter service
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 |