This is an automated email from the ASF dual-hosted git repository.
Aias00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git
The following commit(s) were added to refs/heads/master by this push:
new 65b9ef56a6 fix(tcp): dispose upstream connection pool (#7119)
65b9ef56a6 is described below
commit 65b9ef56a6f85f282561293a5d8a86cd230e3260
Author: Liming Deng <[email protected]>
AuthorDate: Mon Sep 21 22:45:42 2026 +0800
fix(tcp): dispose upstream connection pool (#7119)
Co-authored-by: aias00 <[email protected]>
---
.../apache/shenyu/protocol/tcp/TcpBootstrapServer.java | 16 ++++++++++++++++
.../protocol/tcp/connection/ConnectionContext.java | 10 ++++++++++
.../shenyu/protocol/tcp/TcpBootstrapServerTest.java | 2 ++
3 files changed, 28 insertions(+)
diff --git
a/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServer.java
b/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServer.java
index df58619334..843e823c74 100644
---
a/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServer.java
+++
b/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServer.java
@@ -84,6 +84,11 @@ public class TcpBootstrapServer implements BootstrapServer {
.runOn(loopResources);
server = tcpServer.bindNow();
} catch (RuntimeException startFailure) {
+ try {
+ connectionContext.dispose();
+ } catch (RuntimeException cleanupFailure) {
+ startFailure.addSuppressed(cleanupFailure);
+ }
try {
loopResources.dispose();
} catch (RuntimeException cleanupFailure) {
@@ -148,6 +153,17 @@ public class TcpBootstrapServer implements BootstrapServer
{
} catch (RuntimeException ex) {
failure = ex;
}
+ try {
+ if (Objects.nonNull(connectionContext)) {
+ connectionContext.dispose();
+ }
+ } catch (RuntimeException ex) {
+ if (Objects.isNull(failure)) {
+ failure = ex;
+ } else {
+ failure.addSuppressed(ex);
+ }
+ }
try {
if (Objects.nonNull(loopResources)) {
loopResources.dispose();
diff --git
a/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/connection/ConnectionContext.java
b/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/connection/ConnectionContext.java
index f9cb56c1e7..0c194c128f 100644
---
a/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/connection/ConnectionContext.java
+++
b/shenyu-protocol/shenyu-protocol-tcp/src/main/java/org/apache/shenyu/protocol/tcp/connection/ConnectionContext.java
@@ -23,6 +23,7 @@ import reactor.netty.resources.ConnectionProvider;
import reactor.netty.tcp.TcpClient;
import java.time.Duration;
+import java.util.Objects;
import java.util.Properties;
/**
@@ -77,4 +78,13 @@ public class ConnectionContext {
);
}
+ /**
+ * Dispose the connection pool.
+ */
+ public void dispose() {
+ if (Objects.nonNull(connectionProvider)) {
+ connectionProvider.dispose();
+ }
+ }
+
}
diff --git
a/shenyu-protocol/shenyu-protocol-tcp/src/test/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServerTest.java
b/shenyu-protocol/shenyu-protocol-tcp/src/test/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServerTest.java
index 76f393a5d4..3c2dec161e 100644
---
a/shenyu-protocol/shenyu-protocol-tcp/src/test/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServerTest.java
+++
b/shenyu-protocol/shenyu-protocol-tcp/src/test/java/org/apache/shenyu/protocol/tcp/TcpBootstrapServerTest.java
@@ -229,6 +229,7 @@ public class TcpBootstrapServerTest {
server.shutdown();
verify(disposableServer).disposeNow();
+ verify(connectionContext).dispose();
verify(loopResources).dispose();
}
@@ -248,6 +249,7 @@ public class TcpBootstrapServerTest {
assertSame(serverFailure, actual);
assertEquals(1, actual.getSuppressed().length);
assertSame(loopFailure, actual.getSuppressed()[0]);
+ verify(connectionContext).dispose();
verify(loopResources).dispose();
assertDoesNotThrow(server::shutdown);
}