This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 93e9ea02d26 Move ProxyContext.getDatabaseType() to ContextManager
(#36843)
93e9ea02d26 is described below
commit 93e9ea02d26909f916253a59b69ccb44012e97ea
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Oct 10 18:24:20 2025 +0800
Move ProxyContext.getDatabaseType() to ContextManager (#36843)
* Move ProxyContext.getDatabaseType() to ContextManager
* Move ProxyContext.getDatabaseType() to ContextManager
---
.../shardingsphere/mode/manager/ContextManager.java | 13 +++++++++++++
.../connector/ProxyDatabaseConnectionManager.java | 2 +-
.../proxy/backend/connector/ProxySQLExecutor.java | 2 +-
.../transaction/ProxyBackendTransactionManager.java | 6 +++---
.../proxy/backend/context/ProxyContext.java | 17 -----------------
.../connector/ProxyDatabaseConnectionManagerTest.java | 13 ++++++++++---
6 files changed, 28 insertions(+), 25 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 9a221c35cd8..b8ffd235864 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -19,11 +19,13 @@ package org.apache.shardingsphere.mode.manager;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
+import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
import
org.apache.shardingsphere.database.exception.core.exception.syntax.database.NoDatabaseSelectedException;
import
org.apache.shardingsphere.database.exception.core.exception.syntax.database.UnknownDatabaseException;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.executor.kernel.ExecutorEngine;
@@ -88,6 +90,17 @@ public final class ContextManager implements AutoCloseable {
ContextManagerLifecycleListenerFactory.getListeners(this).forEach(each
-> each.onInitialized(this));
}
+ /**
+ * Get database type.
+ *
+ * @return database type
+ */
+ public DatabaseType getDatabaseType() {
+ Collection<ShardingSphereDatabase> databases =
metaDataContexts.getMetaData().getAllDatabases();
+ return databases.stream().flatMap(each ->
each.getResourceMetaData().getStorageUnits().values().stream()).findFirst().map(StorageUnit::getStorageType)
+ .orElseGet(DatabaseTypeEngine::getDefaultStorageType);
+ }
+
/**
* Get all database names.
*
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 f71f6bb73df..68c7901dbc7 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
@@ -119,7 +119,7 @@ public final class ProxyDatabaseConnectionManager
implements DatabaseConnectionM
@SuppressWarnings({"unchecked", "rawtypes"})
private void executeTransactionHooksAfterCreateConnections(final
List<Connection> connections) throws SQLException {
if (connectionSession.getTransactionStatus().isInTransaction()) {
- DatabaseType databaseType =
ProxyContext.getInstance().getDatabaseType();
+ DatabaseType databaseType =
ProxyContext.getInstance().getContextManager().getDatabaseType();
for (Entry<ShardingSphereRule, TransactionHook> entry :
transactionHooks.entrySet()) {
entry.getValue().afterCreateConnections(entry.getKey(),
databaseType, connections,
connectionSession.getConnectionContext().getTransactionContext());
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
index 2cd242b8b97..bb4b86d09d8 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutor.java
@@ -241,7 +241,7 @@ public final class ProxySQLExecutor {
return;
}
for (Entry<ShardingSphereRule, TransactionHook> entry :
transactionHooks.entrySet()) {
- entry.getValue().beforeExecuteSQL(entry.getKey(),
ProxyContext.getInstance().getDatabaseType(),
+ entry.getValue().beforeExecuteSQL(entry.getKey(),
ProxyContext.getInstance().getContextManager().getDatabaseType(),
connectionSession.getDatabaseConnectionManager().getCachedConnections().values(),
getTransactionContext(connectionSession),
connectionSession.getIsolationLevel().orElse(TransactionIsolationLevel.READ_COMMITTED));
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/ProxyBackendTransactionManager.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/ProxyBackendTransactionManager.java
index 25e7e051f3f..8ffff3feddc 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/ProxyBackendTransactionManager.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/transaction/ProxyBackendTransactionManager.java
@@ -86,7 +86,7 @@ public final class ProxyBackendTransactionManager {
private void doBegin() {
connection.closeHandlers(true);
connection.closeConnections(false);
- DatabaseType databaseType =
ProxyContext.getInstance().getDatabaseType();
+ DatabaseType databaseType =
ProxyContext.getInstance().getContextManager().getDatabaseType();
for (Entry<ShardingSphereRule, TransactionHook> entry :
transactionHooks.entrySet()) {
entry.getValue().beforeBegin(entry.getKey(), databaseType,
transactionContext);
}
@@ -109,7 +109,7 @@ public final class ProxyBackendTransactionManager {
if
(!connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
return;
}
- DatabaseType databaseType =
ProxyContext.getInstance().getDatabaseType();
+ DatabaseType databaseType =
ProxyContext.getInstance().getContextManager().getDatabaseType();
boolean isNeedLock = isNeedLockWhenCommit();
if (isNeedLock) {
// FIXME if timeout when lock required, TSO not assigned, but
commit will continue, solution is use redis lock in impl to instead of reg
center's lock. #35041
@@ -161,7 +161,7 @@ public final class ProxyBackendTransactionManager {
if
(!connection.getConnectionSession().getTransactionStatus().isInTransaction()) {
return;
}
- DatabaseType databaseType =
ProxyContext.getInstance().getDatabaseType();
+ DatabaseType databaseType =
ProxyContext.getInstance().getContextManager().getDatabaseType();
for (Entry<ShardingSphereRule, TransactionHook> entry :
transactionHooks.entrySet()) {
entry.getValue().beforeRollback(entry.getKey(), databaseType,
connection.getCachedConnections().values(), transactionContext);
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
index 63f88446d03..12ba5e412ec 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/context/ProxyContext.java
@@ -20,15 +20,9 @@ package org.apache.shardingsphere.proxy.backend.context;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
-import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.proxy.backend.connector.jdbc.datasource.JDBCBackendDataSource;
-import java.util.Collection;
-
/**
* Proxy context.
*/
@@ -59,15 +53,4 @@ public final class ProxyContext {
public static ProxyContext getInstance() {
return INSTANCE;
}
-
- /**
- * Get database type.
- *
- * @return database type
- */
- public DatabaseType getDatabaseType() {
- Collection<ShardingSphereDatabase> databases =
contextManager.getMetaDataContexts().getMetaData().getAllDatabases();
- return databases.stream().flatMap(each ->
each.getResourceMetaData().getStorageUnits().values().stream()).findFirst().map(StorageUnit::getStorageType)
- .orElseGet(DatabaseTypeEngine::getDefaultStorageType);
- }
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
index de447ac6d5f..798232b8a38 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMod
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
import
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsFactory;
@@ -95,6 +96,8 @@ class ProxyDatabaseConnectionManagerTest {
private static final String SCHEMA_PATTERN = "schema_%s";
+ private final DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
+
@Mock
private JDBCBackendDataSource backendDataSource;
@@ -120,9 +123,13 @@ class ProxyDatabaseConnectionManagerTest {
private ContextManager mockContextManager() {
ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class,
RETURNS_DEEP_STUBS);
-
when(metaData.getDatabase("foo_db")).thenReturn(mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS));
-
when(metaData.getAllDatabases()).thenReturn(Collections.singleton(mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS)));
-
when(metaData.getAllDatabases().iterator().next().getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));
+ ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
+ StorageUnit storageUnit = mock(StorageUnit.class);
+ when(storageUnit.getStorageType()).thenReturn(databaseType);
+
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
storageUnit));
+ when(database.getProtocolType()).thenReturn(databaseType);
+ when(metaData.getDatabase("foo_db")).thenReturn(database);
+
when(metaData.getAllDatabases()).thenReturn(Collections.singleton(database));
when(metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
when(metaData.getProps().<Boolean>getValue(ConfigurationPropertyKey.PERSIST_SCHEMAS_TO_REPOSITORY_ENABLED)).thenReturn(true);
TransactionRule transactionRule = mock(TransactionRule.class);