From a924cde8580dd00409a0c8296e81ff73709ad1a2 Mon Sep 17 00:00:00 2001 From: Misha Tyulenev Date: Thu, 5 Mar 2020 16:32:01 -0500 Subject: SERVER-46607 ignore MaxTimeMSExpire error on hedged reads --- src/mongo/executor/network_interface_tl.cpp | 42 +++++++++++++++++++++-------- 1 file changed, 31 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/mongo/executor/network_interface_tl.cpp b/src/mongo/executor/network_interface_tl.cpp index 2e49b840ccf..6d9acef2aa5 100644 --- a/src/mongo/executor/network_interface_tl.cpp +++ b/src/mongo/executor/network_interface_tl.cpp @@ -712,13 +712,23 @@ void NetworkInterfaceTL::RequestState::resolve(Future fut .onCompletion([ this, anchor = shared_from_this() ](auto swr) noexcept { auto response = uassertStatusOK(swr); auto status = swr.getValue().status; - if (cmdState->finishLine.arriveStrongly()) { - if (hasHedgeOptions && isHedge) { - auto hm = HedgingMetrics::get(cmdState->interface->_svcCtx); - invariant(hm); - hm->incrementNumAdvantageouslyHedgedOperations(); + auto commandStatus = getStatusFromCommandResult(response.data); + // ignore MaxTimeMS expiration errors for hedged reads + if (hasHedgeOptions && isHedge && commandStatus == ErrorCodes::MaxTimeMSExpired) { + LOGV2_DEBUG(4660700, + 2, + "Hedged request {request_id} returned status {status}", + "request_id"_attr = request.get().id, + "status"_attr = commandStatus); + } else { + if (cmdState->finishLine.arriveStrongly()) { + if (hasHedgeOptions && isHedge) { + auto hm = HedgingMetrics::get(cmdState->interface->_svcCtx); + invariant(hm); + hm->incrementNumAdvantageouslyHedgedOperations(); + } + cmdState->fulfillFinalPromise(std::move(response)); } - cmdState->fulfillFinalPromise(std::move(response)); } return status; @@ -733,16 +743,26 @@ void NetworkInterfaceTL::RequestState::resolve(Future fut [ this, anchor = shared_from_this() ](auto swr) noexcept { auto response = uassertStatusOK(swr); auto status = response.status; + auto commandStatus = getStatusFromCommandResult(response.data); ON_BLOCK_EXIT([&] { returnConnection(status); }); if (!cmdState->finishLine.arriveStrongly()) { return; } - if (hasHedgeOptions && isHedge) { - auto hm = HedgingMetrics::get(cmdState->interface->_svcCtx); - invariant(hm); - hm->incrementNumAdvantageouslyHedgedOperations(); + // ignore MaxTimeMS expiration errors for hedged reads + if (hasHedgeOptions && isHedge && commandStatus == ErrorCodes::MaxTimeMSExpired) { + LOGV2_DEBUG(4660701, + 2, + "Hedged request {request_id} returned status {status}", + "request_id"_attr = request.get().id, + "status"_attr = commandStatus); + } else { + if (hasHedgeOptions && isHedge) { + auto hm = HedgingMetrics::get(cmdState->interface->_svcCtx); + invariant(hm); + hm->incrementNumAdvantageouslyHedgedOperations(); + } + cmdState->fulfillFinalPromise(std::move(response)); } - cmdState->fulfillFinalPromise(std::move(response)); }); } } -- cgit v1.2.1