This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 25beea0  Close resources in BackendConnection when transaction end 
(#10967)
25beea0 is described below

commit 25beea057967e49dd0b347cb2ad8738248a53bc1
Author: 吴伟杰 <[email protected]>
AuthorDate: Thu Jun 24 16:53:57 2021 +0800

    Close resources in BackendConnection when transaction end (#10967)
---
 .../jdbc/transaction/BackendTransactionManager.java            |  1 +
 .../jdbc/transaction/BackendTransactionManagerTest.java        |  6 ++++--
 .../proxy/frontend/command/CommandExecutorTask.java            |  1 +
 .../proxy/frontend/command/CommandExecutorTaskTest.java        | 10 ++++++++++
 4 files changed, 16 insertions(+), 2 deletions(-)

diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManager.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManager.java
index d1b2a11..91e3bef 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManager.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManager.java
@@ -52,6 +52,7 @@ public final class BackendTransactionManager implements 
TransactionManager {
         if (!connection.getTransactionStatus().isInTransaction()) {
             connection.getTransactionStatus().setInTransaction(true);
             TransactionHolder.setInTransaction();
+            connection.closeDatabaseCommunicationEngines();
             connection.closeConnections(false);
         }
         if (TransactionType.LOCAL == transactionType || null == 
shardingTransactionManager) {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java
index 67a8893..6bae10f 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/transaction/BackendTransactionManagerTest.java
@@ -17,8 +17,6 @@
 
 package org.apache.shardingsphere.proxy.backend.communication.jdbc.transaction;
 
-import java.lang.reflect.Field;
-import java.sql.SQLException;
 import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -32,6 +30,9 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
+import java.lang.reflect.Field;
+import java.sql.SQLException;
+
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
@@ -83,6 +84,7 @@ public final class BackendTransactionManagerTest {
         newBackendTransactionManager(TransactionType.LOCAL, false);
         backendTransactionManager.begin();
         verify(transactionStatus).setInTransaction(true);
+        verify(backendConnection).closeDatabaseCommunicationEngines();
         verify(backendConnection).closeConnections(false);
         verify(localTransactionManager).begin();
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
index d55dabd..cf5366c 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTask.java
@@ -79,6 +79,7 @@ public final class CommandExecutorTask implements Runnable {
                 context.flush();
             }
             if 
(!backendConnection.getTransactionStatus().isInConnectionHeldTransaction()) {
+                
exceptions.addAll(backendConnection.closeDatabaseCommunicationEngines());
                 exceptions.addAll(backendConnection.closeConnections(false));
             }
             processClosedExceptions(exceptions);
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTaskTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTaskTest.java
index b9422df..dd05488 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTaskTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/command/CommandExecutorTaskTest.java
@@ -30,6 +30,7 @@ import 
org.apache.shardingsphere.proxy.frontend.command.executor.CommandExecutor
 import 
org.apache.shardingsphere.proxy.frontend.command.executor.QueryCommandExecutor;
 import org.apache.shardingsphere.proxy.frontend.context.FrontendContext;
 import 
org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine;
+import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Answers;
@@ -92,6 +93,11 @@ public final class CommandExecutorTaskTest {
     @Mock
     private FrontendContext frontendContext;
     
+    @Before
+    public void setup() {
+        
when(backendConnection.closeDatabaseCommunicationEngines()).thenReturn(Collections.emptyList());
+    }
+    
     @Test
     public void assertRunNeedFlushByFalse() throws SQLException {
         
when(queryCommandExecutor.execute()).thenReturn(Collections.emptyList());
@@ -109,6 +115,7 @@ public final class CommandExecutorTaskTest {
         verify(connectionStatus).waitUntilConnectionRelease();
         verify(connectionStatus).switchToUsing();
         verify(queryCommandExecutor).close();
+        verify(backendConnection).closeDatabaseCommunicationEngines();
     }
     
     @Test
@@ -132,6 +139,7 @@ public final class CommandExecutorTaskTest {
         verify(handlerContext).flush();
         verify(executeEngine).writeQueryData(handlerContext, 
backendConnection, queryCommandExecutor, 1);
         verify(queryCommandExecutor).close();
+        verify(backendConnection).closeDatabaseCommunicationEngines();
     }
     
     @Test
@@ -155,6 +163,7 @@ public final class CommandExecutorTaskTest {
         verify(handlerContext).write(databasePacket);
         verify(handlerContext).flush();
         verify(commandExecutor).close();
+        verify(backendConnection).closeDatabaseCommunicationEngines();
     }
     
     @Test
@@ -171,5 +180,6 @@ public final class CommandExecutorTaskTest {
         CommandExecutorTask actual = new CommandExecutorTask(engine, 
backendConnection, handlerContext, message);
         actual.run();
         verify(handlerContext, atLeast(2)).writeAndFlush(databasePacket);
+        verify(backendConnection).closeDatabaseCommunicationEngines();
     }
 }

Reply via email to