summaryrefslogtreecommitdiff
path: root/src/mongo/db/repl
diff options
context:
space:
mode:
authorLingzhi Deng <lingzhi.deng@mongodb.com>2021-02-09 11:44:19 -0500
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-02-09 21:34:42 +0000
commitdd02d9c22485828515941f2b18d37115c72fd8df (patch)
treec62bafef1af7512d515dd415253de081f67f738b /src/mongo/db/repl
parent5b83d4cc18cc0e322912f86c7fba6c14355986e7 (diff)
downloadmongo-dd02d9c22485828515941f2b18d37115c72fd8df.tar.gz
SERVER-54168: TenantOplogApplier should join TenantOplogBatcher
Diffstat (limited to 'src/mongo/db/repl')
-rw-r--r--src/mongo/db/repl/abstract_async_component.cpp1
-rw-r--r--src/mongo/db/repl/abstract_async_component.h5
-rw-r--r--src/mongo/db/repl/abstract_async_component_test.cpp1
-rw-r--r--src/mongo/db/repl/oplog_fetcher.h2
-rw-r--r--src/mongo/db/repl/oplog_fetcher_mock.h2
-rw-r--r--src/mongo/db/repl/tenant_oplog_applier.cpp6
-rw-r--r--src/mongo/db/repl/tenant_oplog_applier.h1
-rw-r--r--src/mongo/db/repl/tenant_oplog_batcher.h2
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;
}