summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/executor/network_interface.h5
-rw-r--r--src/mongo/executor/network_interface_asio.cpp4
-rw-r--r--src/mongo/executor/network_interface_asio.h2
-rw-r--r--src/mongo/executor/network_interface_mock.h2
-rw-r--r--src/mongo/executor/thread_pool_task_executor.cpp4
-rw-r--r--src/mongo/executor/thread_pool_task_executor.h5
6 files changed, 22 insertions, 0 deletions
diff --git a/src/mongo/executor/network_interface.h b/src/mongo/executor/network_interface.h
index 8e10bfd30ca..a925fd81008 100644
--- a/src/mongo/executor/network_interface.h
+++ b/src/mongo/executor/network_interface.h
@@ -161,6 +161,11 @@ public:
*/
virtual bool onNetworkThread() = 0;
+ /**
+ * Drops all connections to the given host in the connection pool.
+ */
+ virtual void dropConnections(const HostAndPort& hostAndPort) = 0;
+
protected:
NetworkInterface();
};
diff --git a/src/mongo/executor/network_interface_asio.cpp b/src/mongo/executor/network_interface_asio.cpp
index d60bc787731..4a38893d1c2 100644
--- a/src/mongo/executor/network_interface_asio.cpp
+++ b/src/mongo/executor/network_interface_asio.cpp
@@ -517,5 +517,9 @@ void NetworkInterfaceASIO::_failWithInfo_inlock(const char* file,
fassertFailedWithStatus(34429, status);
}
+void NetworkInterfaceASIO::dropConnections(const HostAndPort& hostAndPort) {
+ _connectionPool.dropConnections(hostAndPort);
+}
+
} // namespace executor
} // namespace mongo
diff --git a/src/mongo/executor/network_interface_asio.h b/src/mongo/executor/network_interface_asio.h
index 63723fbcc21..8c86b4682b6 100644
--- a/src/mongo/executor/network_interface_asio.h
+++ b/src/mongo/executor/network_interface_asio.h
@@ -136,6 +136,8 @@ public:
bool onNetworkThread() override;
+ void dropConnections(const HostAndPort& hostAndPort) override;
+
private:
using ResponseStatus = TaskExecutor::ResponseStatus;
using NetworkInterface::RemoteCommandCompletionFn;
diff --git a/src/mongo/executor/network_interface_mock.h b/src/mongo/executor/network_interface_mock.h
index f8a23df66d7..91b04cb01bd 100644
--- a/src/mongo/executor/network_interface_mock.h
+++ b/src/mongo/executor/network_interface_mock.h
@@ -125,6 +125,8 @@ public:
virtual bool onNetworkThread();
+ void dropConnections(const HostAndPort&) override {}
+
////////////////////////////////////////////////////////////////////////////////
//
diff --git a/src/mongo/executor/thread_pool_task_executor.cpp b/src/mongo/executor/thread_pool_task_executor.cpp
index 27f6e232ed7..fcb27cd5c29 100644
--- a/src/mongo/executor/thread_pool_task_executor.cpp
+++ b/src/mongo/executor/thread_pool_task_executor.cpp
@@ -518,5 +518,9 @@ void ThreadPoolTaskExecutor::runCallback(std::shared_ptr<CallbackState> cbStateA
}
}
+void ThreadPoolTaskExecutor::dropConnections(const HostAndPort& hostAndPort) {
+ _net->dropConnections(hostAndPort);
+}
+
} // namespace executor
} // namespace mongo
diff --git a/src/mongo/executor/thread_pool_task_executor.h b/src/mongo/executor/thread_pool_task_executor.h
index 2a499868a14..98298624b80 100644
--- a/src/mongo/executor/thread_pool_task_executor.h
+++ b/src/mongo/executor/thread_pool_task_executor.h
@@ -83,6 +83,11 @@ public:
void appendConnectionStats(ConnectionPoolStats* stats) const override;
+ /**
+ * Drops all connections to the given host on the network interface.
+ */
+ void dropConnections(const HostAndPort& hostAndPort);
+
private:
class CallbackState;
class EventState;