summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Caplinger <christopher.caplinger@mongodb.com>2022-06-30 15:26:44 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-06-30 16:49:14 +0000
commitf408f468b0edfa6208fc0c09d6ec3b18e01fe43c (patch)
treef7973ecbf78643ec45d81ea48cc9c4a0c44acdc2
parentdbef08b92565ffc372b6eef21a1ea11a45c964c1 (diff)
downloadmongo-f408f468b0edfa6208fc0c09d6ec3b18e01fe43c.tar.gz
SERVER-67574: Remove noexcept from _doStartup_inlock
-rw-r--r--src/mongo/db/repl/abstract_async_component.cpp8
-rw-r--r--src/mongo/db/repl/abstract_async_component.h3
-rw-r--r--src/mongo/db/repl/abstract_async_component_test.cpp8
-rw-r--r--src/mongo/db/repl/oplog_fetcher.cpp6
-rw-r--r--src/mongo/db/repl/oplog_fetcher.h2
-rw-r--r--src/mongo/db/repl/oplog_fetcher_mock.cpp3
-rw-r--r--src/mongo/db/repl/oplog_fetcher_mock.h2
-rw-r--r--src/mongo/db/repl/tenant_oplog_applier.cpp8
-rw-r--r--src/mongo/db/repl/tenant_oplog_applier.h2
-rw-r--r--src/mongo/db/repl/tenant_oplog_batcher.cpp3
-rw-r--r--src/mongo/db/repl/tenant_oplog_batcher.h2
11 files changed, 20 insertions, 27 deletions
diff --git a/src/mongo/db/repl/abstract_async_component.cpp b/src/mongo/db/repl/abstract_async_component.cpp
index 3ba88281f6e..48d27994eed 100644
--- a/src/mongo/db/repl/abstract_async_component.cpp
+++ b/src/mongo/db/repl/abstract_async_component.cpp
@@ -86,11 +86,11 @@ Status AbstractAsyncComponent::startup() noexcept {
str::stream() << _componentName << " completed");
}
- auto status = _doStartup_inlock();
-
- if (!status.isOK()) {
+ try {
+ _doStartup_inlock();
+ } catch (const DBException& ex) {
_state = State::kComplete;
- return status;
+ return ex.toStatus();
}
return Status::OK();
diff --git a/src/mongo/db/repl/abstract_async_component.h b/src/mongo/db/repl/abstract_async_component.h
index 6400a5961a7..1059e9865f9 100644
--- a/src/mongo/db/repl/abstract_async_component.h
+++ b/src/mongo/db/repl/abstract_async_component.h
@@ -183,7 +183,6 @@ private:
* Invoked by startup() to run startup procedure after a successful transition from PreStart to
* Running.
* Invoked at most once by AbstractAsyncComponent.
- * May not throw exceptions.
*
* If _doStartup_inlock() fails, startup() will transition this component from Running to
* Complete. Subsequent startup() attempts will return an IllegalOperation error.
@@ -195,7 +194,7 @@ private:
* It is the responsibility of the implementation to transition the component state to Complete
* by calling _transitionToComplete_inlock() once the component has finished its processing.
*/
- virtual Status _doStartup_inlock() noexcept = 0;
+ virtual void _doStartup_inlock() = 0;
/**
* Runs shutdown procedure after a successful transition from Running to ShuttingDown.
diff --git a/src/mongo/db/repl/abstract_async_component_test.cpp b/src/mongo/db/repl/abstract_async_component_test.cpp
index d99967ed6be..a8ee5248bf6 100644
--- a/src/mongo/db/repl/abstract_async_component_test.cpp
+++ b/src/mongo/db/repl/abstract_async_component_test.cpp
@@ -93,7 +93,7 @@ public:
void shutdownComponent_forTest(const std::unique_ptr<MockAsyncComponent>& component);
private:
- Status _doStartup_inlock() noexcept override;
+ void _doStartup_inlock() override;
void _doShutdown_inlock() noexcept override;
void _preJoin() noexcept override {}
Mutex* _getMutex() noexcept override;
@@ -102,7 +102,7 @@ private:
Mutex _mutex = MONGO_MAKE_LATCH("MockAsyncComponent::_mutex");
public:
- // Returned by _doStartup_inlock(). Override for testing.
+ // Asserted to be OK by _doStartup_inlock(). Override for testing.
Status doStartupResult = Status::OK();
// Set to true when _doStartup_inlock() is called.
@@ -154,9 +154,9 @@ void MockAsyncComponent::shutdownComponent_forTest(
_shutdownComponent(component);
}
-Status MockAsyncComponent::_doStartup_inlock() noexcept {
+void MockAsyncComponent::_doStartup_inlock() {
doStartupCalled = true;
- return doStartupResult;
+ uassertStatusOK(doStartupResult);
}
void MockAsyncComponent::_doShutdown_inlock() noexcept {}
diff --git a/src/mongo/db/repl/oplog_fetcher.cpp b/src/mongo/db/repl/oplog_fetcher.cpp
index a08a241a2b9..6a1ffcfc5fc 100644
--- a/src/mongo/db/repl/oplog_fetcher.cpp
+++ b/src/mongo/db/repl/oplog_fetcher.cpp
@@ -206,8 +206,8 @@ void OplogFetcher::setConnection(std::unique_ptr<DBClientConnection>&& _connecte
_conn = std::move(_connectedClient);
}
-Status OplogFetcher::_doStartup_inlock() noexcept {
- return _scheduleWorkAndSaveHandle_inlock(
+void OplogFetcher::_doStartup_inlock() {
+ uassertStatusOK(_scheduleWorkAndSaveHandle_inlock(
[this](const executor::TaskExecutor::CallbackArgs& args) {
// Tests use this failpoint to prevent the oplog fetcher from starting. If those
// tests fail and the oplog fetcher is canceled, we want to continue so we see
@@ -218,7 +218,7 @@ Status OplogFetcher::_doStartup_inlock() noexcept {
_runQuery(args);
},
&_runQueryHandle,
- "_runQuery");
+ "_runQuery"));
}
void OplogFetcher::_doShutdown_inlock() noexcept {
diff --git a/src/mongo/db/repl/oplog_fetcher.h b/src/mongo/db/repl/oplog_fetcher.h
index 2147eb9ebde..b992f758aa2 100644
--- a/src/mongo/db/repl/oplog_fetcher.h
+++ b/src/mongo/db/repl/oplog_fetcher.h
@@ -326,7 +326,7 @@ private:
/**
* Schedules the _runQuery function to run in a separate thread.
*/
- Status _doStartup_inlock() noexcept override;
+ void _doStartup_inlock() override;
/**
* Shuts down the DBClientCursor and DBClientConnection. Uses the connection's
diff --git a/src/mongo/db/repl/oplog_fetcher_mock.cpp b/src/mongo/db/repl/oplog_fetcher_mock.cpp
index fc9a8f91d88..ee51310c925 100644
--- a/src/mongo/db/repl/oplog_fetcher_mock.cpp
+++ b/src/mongo/db/repl/oplog_fetcher_mock.cpp
@@ -171,7 +171,7 @@ void OplogFetcherMock::waitForshutdown() {
}
}
-Status OplogFetcherMock::_doStartup_inlock() noexcept {
+void OplogFetcherMock::_doStartup_inlock() {
// Create a thread that waits on the _finishPromise and call _finishCallback once with the
// finish status. This is to synchronize the OplogFetcher shutdown between the test thread and
// the OplogFetcher's owner. For example, the OplogFetcher could be shut down by the test thread
@@ -189,7 +189,6 @@ Status OplogFetcherMock::_doStartup_inlock() noexcept {
auto status = future.getNoThrow();
_finishCallback(status);
});
- return Status::OK();
}
void OplogFetcherMock::_doShutdown_inlock() noexcept {
diff --git a/src/mongo/db/repl/oplog_fetcher_mock.h b/src/mongo/db/repl/oplog_fetcher_mock.h
index 09e9d2f542f..e8d428cd463 100644
--- a/src/mongo/db/repl/oplog_fetcher_mock.h
+++ b/src/mongo/db/repl/oplog_fetcher_mock.h
@@ -76,7 +76,7 @@ public:
private:
// =============== AbstractAsyncComponent overrides ================
- Status _doStartup_inlock() noexcept override;
+ void _doStartup_inlock() override;
void _doShutdown_inlock() noexcept override;
diff --git a/src/mongo/db/repl/tenant_oplog_applier.cpp b/src/mongo/db/repl/tenant_oplog_applier.cpp
index e42b4e6325f..169e51888f3 100644
--- a/src/mongo/db/repl/tenant_oplog_applier.cpp
+++ b/src/mongo/db/repl/tenant_oplog_applier.cpp
@@ -128,13 +128,10 @@ void TenantOplogApplier::setCloneFinishedRecipientOpTime(OpTime cloneFinishedRec
_cloneFinishedRecipientOpTime = cloneFinishedRecipientOpTime;
}
-Status TenantOplogApplier::_doStartup_inlock() noexcept {
+void TenantOplogApplier::_doStartup_inlock() {
_oplogBatcher = std::make_shared<TenantOplogBatcher>(
_migrationUuid, _oplogBuffer, _executor, _resumeBatchingTs, _startApplyingAfterOpTime);
- auto status = _oplogBatcher->startup();
- if (!status.isOK())
- return status;
-
+ uassertStatusOK(_oplogBatcher->startup());
auto fut = _oplogBatcher->getNextBatch(
TenantOplogBatcher::BatchLimits(std::size_t(tenantApplierBatchSizeBytes.load()),
std::size_t(tenantApplierBatchSizeOps.load())));
@@ -147,7 +144,6 @@ Status TenantOplogApplier::_doStartup_inlock() noexcept {
invariant(_shouldStopApplying(status));
})
.getAsync([](auto status) {});
- return Status::OK();
}
void TenantOplogApplier::_setFinalStatusIfOk(WithLock, Status newStatus) {
diff --git a/src/mongo/db/repl/tenant_oplog_applier.h b/src/mongo/db/repl/tenant_oplog_applier.h
index 330e028cce2..db50201afad 100644
--- a/src/mongo/db/repl/tenant_oplog_applier.h
+++ b/src/mongo/db/repl/tenant_oplog_applier.h
@@ -113,7 +113,7 @@ public:
Timestamp getResumeBatchingTs() const;
private:
- Status _doStartup_inlock() noexcept final;
+ void _doStartup_inlock() final;
void _doShutdown_inlock() noexcept final;
void _preJoin() noexcept final;
void _finishShutdown(WithLock lk, Status status);
diff --git a/src/mongo/db/repl/tenant_oplog_batcher.cpp b/src/mongo/db/repl/tenant_oplog_batcher.cpp
index 3a6013e6f42..5870d581354 100644
--- a/src/mongo/db/repl/tenant_oplog_batcher.cpp
+++ b/src/mongo/db/repl/tenant_oplog_batcher.cpp
@@ -263,7 +263,7 @@ SemiFuture<TenantOplogBatch> TenantOplogBatcher::getNextBatch(BatchLimits limits
return _scheduleNextBatch(lk, limits);
}
-Status TenantOplogBatcher::_doStartup_inlock() noexcept {
+void TenantOplogBatcher::_doStartup_inlock() {
LOGV2_DEBUG(
4885604, 1, "Tenant Oplog Batcher starting up", "component"_attr = _getComponentName());
if (!_resumeBatchingTs.isNull()) {
@@ -287,7 +287,6 @@ Status TenantOplogBatcher::_doStartup_inlock() noexcept {
"Tenant Oplog Batcher will resume batching from after timestamp",
"timestamp"_attr = _resumeBatchingTs);
}
- return Status::OK();
}
void TenantOplogBatcher::_doShutdown_inlock() noexcept {
diff --git a/src/mongo/db/repl/tenant_oplog_batcher.h b/src/mongo/db/repl/tenant_oplog_batcher.h
index 0b0e3f0e512..6f78faee0f7 100644
--- a/src/mongo/db/repl/tenant_oplog_batcher.h
+++ b/src/mongo/db/repl/tenant_oplog_batcher.h
@@ -101,7 +101,7 @@ private:
void _pushEntry(OperationContext* opCtx, TenantOplogBatch* batch, OplogEntry&& op);
- Status _doStartup_inlock() noexcept final;
+ void _doStartup_inlock() final;
void _doShutdown_inlock() noexcept final;