diff options
author | Lingzhi Deng <lingzhi.deng@mongodb.com> | 2021-02-09 11:44:19 -0500 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-02-09 21:34:42 +0000 |
commit | dd02d9c22485828515941f2b18d37115c72fd8df (patch) | |
tree | c62bafef1af7512d515dd415253de081f67f738b | |
parent | 5b83d4cc18cc0e322912f86c7fba6c14355986e7 (diff) | |
download | mongo-dd02d9c22485828515941f2b18d37115c72fd8df.tar.gz |
SERVER-54168: TenantOplogApplier should join TenantOplogBatcher
-rw-r--r-- | src/mongo/db/repl/abstract_async_component.cpp | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/abstract_async_component.h | 5 | ||||
-rw-r--r-- | src/mongo/db/repl/abstract_async_component_test.cpp | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/oplog_fetcher.h | 2 | ||||
-rw-r--r-- | src/mongo/db/repl/oplog_fetcher_mock.h | 2 | ||||
-rw-r--r-- | src/mongo/db/repl/tenant_oplog_applier.cpp | 6 | ||||
-rw-r--r-- | src/mongo/db/repl/tenant_oplog_applier.h | 1 | ||||
-rw-r--r-- | src/mongo/db/repl/tenant_oplog_batcher.h | 2 |
8 files changed, 20 insertions, 0 deletions
diff --git a/src/mongo/db/repl/abstract_async_component.cpp b/src/mongo/db/repl/abstract_async_component.cpp index 77b086af97e..3ba88281f6e 100644 --- a/src/mongo/db/repl/abstract_async_component.cpp +++ b/src/mongo/db/repl/abstract_async_component.cpp @@ -116,6 +116,7 @@ void AbstractAsyncComponent::shutdown() noexcept { } void AbstractAsyncComponent::join() noexcept { + _preJoin(); stdx::unique_lock<Latch> lk(*_getMutex()); _stateCondition.wait(lk, [this]() { return !_isActive_inlock(); }); } diff --git a/src/mongo/db/repl/abstract_async_component.h b/src/mongo/db/repl/abstract_async_component.h index 5b0e6426900..6400a5961a7 100644 --- a/src/mongo/db/repl/abstract_async_component.h +++ b/src/mongo/db/repl/abstract_async_component.h @@ -205,6 +205,11 @@ private: virtual void _doShutdown_inlock() noexcept = 0; /** + * Function invoked before join() without holding the component's mutex. + */ + virtual void _preJoin() noexcept = 0; + + /** * Returns mutex to guard this component's state variable. */ virtual Mutex* _getMutex() noexcept = 0; diff --git a/src/mongo/db/repl/abstract_async_component_test.cpp b/src/mongo/db/repl/abstract_async_component_test.cpp index cdf892e4885..d99967ed6be 100644 --- a/src/mongo/db/repl/abstract_async_component_test.cpp +++ b/src/mongo/db/repl/abstract_async_component_test.cpp @@ -95,6 +95,7 @@ public: private: Status _doStartup_inlock() noexcept override; void _doShutdown_inlock() noexcept override; + void _preJoin() noexcept override {} Mutex* _getMutex() noexcept override; // Used by AbstractAsyncComponent to guard start changes. diff --git a/src/mongo/db/repl/oplog_fetcher.h b/src/mongo/db/repl/oplog_fetcher.h index 58a0f80f9a7..808495d9623 100644 --- a/src/mongo/db/repl/oplog_fetcher.h +++ b/src/mongo/db/repl/oplog_fetcher.h @@ -327,6 +327,8 @@ private: */ void _doShutdown_inlock() noexcept override; + void _preJoin() noexcept override {} + Mutex* _getMutex() noexcept override; // ============= End AbstractAsyncComponent overrides ============== diff --git a/src/mongo/db/repl/oplog_fetcher_mock.h b/src/mongo/db/repl/oplog_fetcher_mock.h index 3796c747774..09e9d2f542f 100644 --- a/src/mongo/db/repl/oplog_fetcher_mock.h +++ b/src/mongo/db/repl/oplog_fetcher_mock.h @@ -80,6 +80,8 @@ private: void _doShutdown_inlock() noexcept override; + void _preJoin() noexcept override {} + Mutex* _getMutex() noexcept override; // ============= End AbstractAsyncComponent overrides ============== diff --git a/src/mongo/db/repl/tenant_oplog_applier.cpp b/src/mongo/db/repl/tenant_oplog_applier.cpp index c36d5c73d64..846a30533fd 100644 --- a/src/mongo/db/repl/tenant_oplog_applier.cpp +++ b/src/mongo/db/repl/tenant_oplog_applier.cpp @@ -147,6 +147,12 @@ void TenantOplogApplier::_doShutdown_inlock() noexcept { } } +void TenantOplogApplier::_preJoin() noexcept { + if (_oplogBatcher) { + _oplogBatcher->join(); + } +} + void TenantOplogApplier::_applyLoop(TenantOplogBatch batch) { { stdx::lock_guard lk(_mutex); diff --git a/src/mongo/db/repl/tenant_oplog_applier.h b/src/mongo/db/repl/tenant_oplog_applier.h index bae6772f296..56bf98863bb 100644 --- a/src/mongo/db/repl/tenant_oplog_applier.h +++ b/src/mongo/db/repl/tenant_oplog_applier.h @@ -98,6 +98,7 @@ public: private: Status _doStartup_inlock() noexcept final; void _doShutdown_inlock() noexcept final; + void _preJoin() noexcept final; void _finishShutdown(WithLock lk, Status status); void _applyLoop(TenantOplogBatch batch); diff --git a/src/mongo/db/repl/tenant_oplog_batcher.h b/src/mongo/db/repl/tenant_oplog_batcher.h index c8b51f0cbd9..7349969aa7c 100644 --- a/src/mongo/db/repl/tenant_oplog_batcher.h +++ b/src/mongo/db/repl/tenant_oplog_batcher.h @@ -99,6 +99,8 @@ private: void _doShutdown_inlock() noexcept final; + void _preJoin() noexcept final {} + Mutex* _getMutex() noexcept final { return &_mutex; } |