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();
}
}