From e0a85e5f9942962e67633170fe64d985c6a2b5b9 Mon Sep 17 00:00:00 2001 From: George Wangensteen Date: Wed, 16 Jun 2021 16:24:08 +0000 Subject: SERVER-49435 Make NetworkInterfaceTL::ExhaustCommandState::sendRequest handle exceptions (cherry picked from commit 32d4d90cb12b46a57101b5de4e9ba08b5ab50c9e) --- src/mongo/executor/network_interface_tl.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/mongo/executor/network_interface_tl.cpp b/src/mongo/executor/network_interface_tl.cpp index b063ae2fa06..8d86e958a34 100644 --- a/src/mongo/executor/network_interface_tl.cpp +++ b/src/mongo/executor/network_interface_tl.cpp @@ -900,7 +900,7 @@ auto NetworkInterfaceTL::ExhaustCommandState::make(NetworkInterfaceTL* interface } Future NetworkInterfaceTL::ExhaustCommandState::sendRequest( - std::shared_ptr requestState) { + std::shared_ptr requestState) try { auto [promise, future] = makePromiseFuture(); finalResponsePromise = std::move(promise); @@ -912,20 +912,20 @@ Future 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 response) { - auto status = !response.getStatus().isOK() - ? response.getStatus() - : getStatusFromCommandResult(response.getValue().data); - - if (!status.isOK()) { - promise.setError(status); - return; - } - - promise.emplaceValue(); + StatusWith 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( -- cgit v1.2.1