You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/06/07 11:02:11 UTC
[shardingsphere] branch master updated: Avoid EventLoop blocked by closing JDBC resources (#18221)
This is an automated email from the ASF dual-hosted git repository.
panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 6d1cebcde81 Avoid EventLoop blocked by closing JDBC resources (#18221)
6d1cebcde81 is described below
commit 6d1cebcde81ac2ec1d182f97611a1be089c514ca
Author: 吴伟杰 <wu...@apache.org>
AuthorDate: Tue Jun 7 19:02:00 2022 +0800
Avoid EventLoop blocked by closing JDBC resources (#18221)
---
.../backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java | 1 +
.../communication/jdbc/JDBCDatabaseCommunicationEngineTest.java | 1 +
.../proxy/frontend/netty/FrontendChannelInboundHandler.java | 3 ++-
3 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
index 0d343638d4e..cc5850d79f6 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
@@ -210,6 +210,7 @@ public final class JDBCDatabaseCommunicationEngine extends DatabaseCommunication
Collection<SQLException> result = new LinkedList<>();
for (Statement each : cachedStatements) {
try {
+ each.cancel();
each.close();
} catch (final SQLException ex) {
result.add(ex);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java
index ea695364a6a..640b756f8c9 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngineTest.java
@@ -215,6 +215,7 @@ public final class JDBCDatabaseCommunicationEngineTest extends ProxyContextResto
cachedStatements.add(statement);
engine.close();
verify(resultSet).close();
+ verify(statement).cancel();
verify(statement).close();
assertTrue(cachedResultSets.isEmpty());
assertTrue(cachedStatements.isEmpty());
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
index bb98edefbfa..6f90e82dafd 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/netty/FrontendChannelInboundHandler.java
@@ -32,6 +32,7 @@ import org.apache.shardingsphere.proxy.backend.exception.BackendConnectionExcept
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
import org.apache.shardingsphere.proxy.frontend.authentication.AuthenticationResult;
import org.apache.shardingsphere.proxy.frontend.executor.ConnectionThreadExecutorGroup;
+import org.apache.shardingsphere.proxy.frontend.executor.UserExecutorGroup;
import org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine;
import org.apache.shardingsphere.proxy.frontend.state.ProxyStateContext;
import org.apache.shardingsphere.transaction.rule.TransactionRule;
@@ -99,7 +100,7 @@ public final class FrontendChannelInboundHandler extends ChannelInboundHandlerAd
@Override
public void channelInactive(final ChannelHandlerContext context) {
context.fireChannelInactive();
- closeAllResources();
+ UserExecutorGroup.getInstance().getExecutorService().execute(this::closeAllResources);
}
private void closeAllResources() {