This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 ab7663641d8 Minor refactor for ProxyDatabaseConnectionManager and
Proxy Handler (#32403)
ab7663641d8 is described below
commit ab7663641d8cd7c3a118276edf8be9999f0f1d14
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Mon Aug 5 14:23:45 2024 +0800
Minor refactor for ProxyDatabaseConnectionManager and Proxy Handler (#32403)
---
.../backend/connector/ProxyDatabaseConnectionManager.java | 11 ++++++++---
.../proxy/backend/handler/distsql/rul/PreviewExecutor.java | 7 +++----
.../command/query/text/query/MySQLMultiStatementsHandler.java | 9 +++++----
.../query/extended/PostgreSQLBatchedStatementsExecutor.java | 4 ++--
4 files changed, 18 insertions(+), 13 deletions(-)
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
index c3d8b272de2..771d13f57b1 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManager.java
@@ -74,8 +74,9 @@ public final class ProxyDatabaseConnectionManager implements
DatabaseConnectionM
final ConnectionMode
connectionMode) throws SQLException {
Preconditions.checkNotNull(databaseName, "Current database name is
null.");
Collection<Connection> connections;
+ String cacheKey = getKey(databaseName, dataSourceName);
synchronized (cachedConnections) {
- connections = cachedConnections.get(databaseName.toLowerCase() +
"." + dataSourceName);
+ connections = cachedConnections.get(cacheKey);
}
List<Connection> result;
int maxConnectionSize = connectionOffset + connectionSize;
@@ -85,7 +86,7 @@ public final class ProxyDatabaseConnectionManager implements
DatabaseConnectionM
Collection<Connection> newConnections =
createNewConnections(databaseName, dataSourceName, maxConnectionSize,
connectionMode);
result = new ArrayList<>(newConnections).subList(connectionOffset,
maxConnectionSize);
synchronized (cachedConnections) {
- cachedConnections.putAll(databaseName.toLowerCase() + "." +
dataSourceName, newConnections);
+ cachedConnections.putAll(cacheKey, newConnections);
}
executeTransactionHooksAfterCreateConnections(result);
} else {
@@ -95,12 +96,16 @@ public final class ProxyDatabaseConnectionManager
implements DatabaseConnectionM
allConnections.addAll(newConnections);
result = allConnections.subList(connectionOffset,
maxConnectionSize);
synchronized (cachedConnections) {
- cachedConnections.putAll(databaseName.toLowerCase() + "." +
dataSourceName, newConnections);
+ cachedConnections.putAll(cacheKey, newConnections);
}
}
return result;
}
+ private String getKey(final String databaseName, final String
dataSourceName) {
+ return databaseName.toLowerCase() + "." + dataSourceName;
+ }
+
private void executeTransactionHooksAfterCreateConnections(final
List<Connection> result) throws SQLException {
if (connectionSession.getTransactionStatus().isInTransaction()) {
for (TransactionHook each : transactionHooks) {
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java
index 4c2722eb586..3e28fd16b4e 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/PreviewExecutor.java
@@ -30,7 +30,6 @@ import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CursorStatem
import org.apache.shardingsphere.infra.binder.context.type.CursorAvailable;
import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
import org.apache.shardingsphere.infra.binder.engine.SQLBindEngine;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.connection.kernel.KernelProcessor;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
@@ -133,7 +132,7 @@ public final class PreviewExecutor implements
DistSQLQueryExecutor<PreviewStatem
private Collection<ExecutionUnit> getFederationExecutionUnits(final
QueryContext queryContext, final ShardingSphereMetaData metaData, final
SQLFederationEngine federationEngine) {
SQLStatement sqlStatement =
queryContext.getSqlStatementContext().getSqlStatement();
- DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = createDriverExecutionPrepareEngine(metaData.getProps());
+ DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = createDriverExecutionPrepareEngine(metaData);
SQLFederationContext context = new SQLFederationContext(true,
queryContext, metaData,
((ProxyDatabaseConnectionManager)
connectionContext.getDatabaseConnectionManager()).getConnectionSession().getProcessId());
federationEngine.executeQuery(prepareEngine,
createPreviewCallback(sqlStatement), context);
@@ -156,8 +155,8 @@ public final class PreviewExecutor implements
DistSQLQueryExecutor<PreviewStatem
}
@SuppressWarnings({"unchecked", "rawtypes"})
- private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
createDriverExecutionPrepareEngine(final ConfigurationProperties props) {
- int maxConnectionsSizePerQuery =
props.<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
+ private DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
createDriverExecutionPrepareEngine(final ShardingSphereMetaData metaData) {
+ int maxConnectionsSizePerQuery =
metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT,
maxConnectionsSizePerQuery, connectionContext.getDatabaseConnectionManager(),
connectionContext.getExecutorStatementManager(), new
StatementOption(false), database.getRuleMetaData().getRules(),
database.getResourceMetaData().getStorageUnits());
}
diff --git
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
index 6b51a238612..d0593275cbd 100644
---
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
+++
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
@@ -126,10 +126,11 @@ public final class MySQLMultiStatementsHandler implements
ProxyBackendHandler {
@Override
public ResponseHeader execute() throws SQLException {
Collection<ShardingSphereRule> rules =
metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getRuleMetaData().getRules();
- DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT,
metaDataContexts.getMetaData().getProps()
-
.<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
connectionSession.getDatabaseConnectionManager(),
- (JDBCBackendStatement)
connectionSession.getStatementManager(), new StatementOption(false), rules,
-
metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getResourceMetaData().getStorageUnits());
+ int maxConnectionsSizePerQuery =
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
+ DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine =
+ new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT,
maxConnectionsSizePerQuery, connectionSession.getDatabaseConnectionManager(),
+ (JDBCBackendStatement)
connectionSession.getStatementManager(), new StatementOption(false), rules,
+
metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getResourceMetaData().getStorageUnits());
return executeMultiStatements(prepareEngine);
}
diff --git
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
index 13ce35a677e..719d7867469 100644
---
a/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
+++
b/proxy/frontend/type/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
@@ -148,8 +148,8 @@ public final class PostgreSQLBatchedStatementsExecutor {
private void addBatchedParametersToPreparedStatements() throws
SQLException {
Collection<ShardingSphereRule> rules =
metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getRuleMetaData().getRules();
- DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT,
-
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
+ int maxConnectionsSizePerQuery =
metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
+ DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection>
prepareEngine = new
DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT,
maxConnectionsSizePerQuery,
connectionSession.getDatabaseConnectionManager(),
(JDBCBackendStatement) connectionSession.getStatementManager(),
new StatementOption(false), rules,
metaDataContexts.getMetaData().getDatabase(connectionSession.getUsedDatabaseName()).getResourceMetaData().getStorageUnits());
executionGroupContext =
prepareEngine.prepare(connectionSession.getUsedDatabaseName(),
anyExecutionContext.getRouteContext(), executionUnitParams.keySet(),