summaryrefslogtreecommitdiff
path: root/src/mongo/executor
diff options
context:
space:
mode:
authorAmirsaman Memaripour <amirsaman.memaripour@mongodb.com>2021-06-30 18:38:04 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-07-06 17:15:13 +0000
commitd0d4084cffcf71ea6dc56705a413f16051452447 (patch)
tree53117980b985bd0162fca110335cade468f395ff /src/mongo/executor
parenta29714ffc0ae3b70242a3665121748da360686ba (diff)
downloadmongo-d0d4084cffcf71ea6dc56705a413f16051452447.tar.gz
SERVER-58139 Check for cancelation before sending remote commands
Diffstat (limited to 'src/mongo/executor')
-rw-r--r--src/mongo/executor/network_interface_tl.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/mongo/executor/network_interface_tl.cpp b/src/mongo/executor/network_interface_tl.cpp
index 0cf868011c5..edcb001635a 100644
--- a/src/mongo/executor/network_interface_tl.cpp
+++ b/src/mongo/executor/network_interface_tl.cpp
@@ -791,6 +791,19 @@ void NetworkInterfaceTL::RequestManager::trySend(
"requestId"_attr = requestState->request->id,
"target"_attr = requestState->request->target);
+ // An attempt to avoid sending a request after its command has been canceled or already executed
+ // using another connection. Just a best effort to mitigate unnecessary resource consumption if
+ // possible, and allow deterministic cancellation of requests in testing.
+ if (cmdState->finishLine.isReady()) {
+ LOGV2_DEBUG(5813901,
+ 2,
+ "Skipping request as it has already been fulfilled or canceled",
+ "requestId"_attr = requestState->request->id,
+ "target"_attr = requestState->request->target);
+ requestState->returnConnection(Status::OK());
+ return;
+ }
+
if (auto counters = cmdState->interface->_counters) {
counters->recordSent();
}