diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mongo/executor/network_interface_tl.cpp | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/src/mongo/executor/network_interface_tl.cpp b/src/mongo/executor/network_interface_tl.cpp index 6ae4dc7004f..0cf868011c5 100644 --- a/src/mongo/executor/network_interface_tl.cpp +++ b/src/mongo/executor/network_interface_tl.cpp @@ -902,7 +902,7 @@ auto NetworkInterfaceTL::ExhaustCommandState::make(NetworkInterfaceTL* interface } Future<RemoteCommandResponse> NetworkInterfaceTL::ExhaustCommandState::sendRequest( - std::shared_ptr<RequestState> requestState) { + std::shared_ptr<RequestState> requestState) try { auto [promise, future] = makePromiseFuture<RemoteCommandResponse>(); finalResponsePromise = std::move(promise); @@ -914,20 +914,20 @@ Future<RemoteCommandResponse> NetworkInterfaceTL::ExhaustCommandState::sendReque continueExhaustRequest(std::move(requestState), swResponse); }); return std::move(future).then([this](const auto& finalResponse) { return finalResponse; }); +} catch (const DBException& ex) { + return ex.toStatus(); } void NetworkInterfaceTL::ExhaustCommandState::fulfillFinalPromise( - StatusWith<RemoteCommandOnAnyResponse> response) { - auto status = !response.getStatus().isOK() - ? response.getStatus() - : getStatusFromCommandResult(response.getValue().data); - - if (!status.isOK()) { - promise.setError(status); - return; - } - - promise.emplaceValue(); + StatusWith<RemoteCommandOnAnyResponse> swr) { + promise.setFrom([&] { + if (!swr.isOK()) + return swr.getStatus(); + auto response = swr.getValue(); + if (!response.isOK()) + return response.status; + return getStatusFromCommandResult(response.data); + }()); } void NetworkInterfaceTL::ExhaustCommandState::continueExhaustRequest( |