summaryrefslogtreecommitdiff
path: root/src/mongo/executor/network_interface_tl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/executor/network_interface_tl.cpp')
-rw-r--r--src/mongo/executor/network_interface_tl.cpp24
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 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<RemoteCommandResponse> NetworkInterfaceTL::ExhaustCommandState::sendRequest(
- std::shared_ptr<RequestState> requestState) {
+ std::shared_ptr<RequestState> requestState) try {
auto [promise, future] = makePromiseFuture<RemoteCommandResponse>();
finalResponsePromise = std::move(promise);
@@ -912,20 +912,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(