This is an automated email from the ASF dual-hosted git repository.
chengzhang 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 7a677647690 Resolve statement manager leaks when creating multiple
statements. (#35665)
7a677647690 is described below
commit 7a6776476902a00584cb23b7203b9fe3a97d549b
Author: Cong Hu <[email protected]>
AuthorDate: Wed Jun 11 10:25:15 2025 +0800
Resolve statement manager leaks when creating multiple statements. (#35665)
* Refactor statement manager
* Add release note.
---
RELEASE-NOTES.md | 1 +
.../shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java | 5 +++++
.../driver/jdbc/core/connection/ShardingSphereConnection.java | 4 ++--
3 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index fdcf93262ee..7371dc54191 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -63,6 +63,7 @@
1. Proxy: Fix `show processlist` not wait for all nodes -
[#35348](https://github.com/apache/shardingsphere/pull/35348)
1. Proxy: Fix NoSuchElementException exception when execute MySQL SHOW
VARIABLES without current database -
[#35550](https://github.com/apache/shardingsphere/pull/35550)
1. Parser: Refactor pivot and unpivot clause handling to support multiple
column names - [35586](https://github.com/apache/shardingsphere/pull/35586)
+1. JDBC: Resolve statement manager leaks when creating multiple statements -
[#35665](https://github.com/apache/shardingsphere/pull/35665)
### Change Logs
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
index 59c0af0cc00..6ac1b14a4ea 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
@@ -28,6 +28,7 @@ import
org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.sql.SQLWarning;
@@ -219,6 +220,10 @@ public abstract class AbstractStatementAdapter extends
WrapperAdapter implements
closeExecutor();
if (null != getStatementManager()) {
getStatementManager().close();
+ Connection connection = getConnection();
+ if (connection instanceof ShardingSphereConnection) {
+ ((ShardingSphereConnection)
connection).getStatementManagers().remove(getStatementManager());
+ }
}
} finally {
getRoutedStatements().clear();
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
index 7d8431a6b8c..eab60292512 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnection.java
@@ -43,7 +43,7 @@ import java.sql.Savepoint;
import java.sql.Statement;
import java.util.Collection;
import java.util.Optional;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.Executor;
/**
@@ -66,7 +66,7 @@ public final class ShardingSphereConnection extends
AbstractConnectionAdapter {
private final DriverDatabaseConnectionManager databaseConnectionManager;
@Getter
- private final Collection<StatementManager> statementManagers = new
CopyOnWriteArrayList<>();
+ private final Collection<StatementManager> statementManagers = new
ConcurrentLinkedQueue<>();
@Getter
private final String processId;