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() {