You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by wu...@apache.org on 2022/07/01 02:32:51 UTC

[shardingsphere] branch master updated: fix connectionPostProcessors clear when channel inactive (#18734) (#18750)

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

wuweijie 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 12f6e4c72ff fix connectionPostProcessors clear when channel inactive (#18734) (#18750)
12f6e4c72ff is described below

commit 12f6e4c72ff58bd4b0389291e0058b00994f0b5f
Author: hao.chen <15...@163.com>
AuthorDate: Fri Jul 1 10:32:45 2022 +0800

    fix connectionPostProcessors clear when channel inactive (#18734) (#18750)
    
    Co-authored-by: 陈浩 <to...@gmail.com>
---
 .../jdbc/connection/JDBCBackendConnection.java     | 24 +++++++++++++---------
 1 file changed, 14 insertions(+), 10 deletions(-)

diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnection.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnection.java
index efa51065178..8c0c6d076cc 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnection.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnection.java
@@ -262,19 +262,23 @@ public final class JDBCBackendConnection implements BackendConnection<Void>, Exe
      */
     public Collection<SQLException> closeConnections(final boolean forceRollback) {
         Collection<SQLException> result = new LinkedList<>();
-        for (Connection each : cachedConnections.values()) {
-            try {
-                if (forceRollback && connectionSession.getTransactionStatus().isInTransaction()) {
-                    each.rollback();
+        synchronized (cachedConnections) {
+            for (Connection each : cachedConnections.values()) {
+                try {
+                    if (forceRollback && connectionSession.getTransactionStatus().isInTransaction()) {
+                        each.rollback();
+                    }
+                    resetConnection(each);
+                    each.close();
+                } catch (final SQLException ex) {
+                    result.add(ex);
                 }
-                resetConnection(each);
-                each.close();
-            } catch (final SQLException ex) {
-                result.add(ex);
             }
+            cachedConnections.clear();
+        }
+        if (!forceRollback) {
+            connectionPostProcessors.clear();
         }
-        cachedConnections.clear();
-        connectionPostProcessors.clear();
         return result;
     }