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 08765dfdbc2 Refactor ProxyClusterStateChecker (#36784)
08765dfdbc2 is described below
commit 08765dfdbc2aa603e274e5835b9408b1dac16660
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Oct 5 01:56:22 2025 +0800
Refactor ProxyClusterStateChecker (#36784)
* Refactor ProxyClusterStateChecker
* Refactor ProxyClusterStateChecker
* Refactor ProxyClusterStateChecker
---
.../mode/exception/ShardingSphereStateException.java | 5 +++--
.../proxy/backend/handler/ProxyBackendHandlerFactory.java | 14 ++++++--------
.../backend/state/type/ReadOnlyProxyStateChecker.java | 5 +++--
.../backend/state/type/UnavailableProxyStateChecker.java | 5 +++--
4 files changed, 15 insertions(+), 14 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/exception/ShardingSphereStateException.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/exception/ShardingSphereStateException.java
index 5449f4ab3b5..fb373b5f89a 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/exception/ShardingSphereStateException.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/exception/ShardingSphereStateException.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.mode.exception;
import
org.apache.shardingsphere.infra.exception.external.sql.sqlstate.XOpenSQLState;
import
org.apache.shardingsphere.infra.exception.external.sql.type.kernel.category.ClusterSQLException;
+import org.apache.shardingsphere.mode.state.ShardingSphereState;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
/**
@@ -28,7 +29,7 @@ public final class ShardingSphereStateException extends
ClusterSQLException {
private static final long serialVersionUID = 3834132923835083492L;
- public ShardingSphereStateException(final String type, final SQLStatement
sqlStatement) {
- super(XOpenSQLState.GENERAL_ERROR, 20, "The cluster state is %s, can
not support SQL statement '%s'.", type,
sqlStatement.getClass().getSimpleName());
+ public ShardingSphereStateException(final ShardingSphereState state, final
SQLStatement sqlStatement) {
+ super(XOpenSQLState.GENERAL_ERROR, 20, "The cluster state is %s, can
not support SQL statement '%s'.", state,
sqlStatement.getClass().getSimpleName());
}
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
index 6787283bac6..ab172cf52d2 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
@@ -117,9 +117,9 @@ public final class ProxyBackendHandlerFactory {
connectionSession.setQueryContext(queryContext);
SQLStatementContext sqlStatementContext =
queryContext.getSqlStatementContext();
SQLStatement sqlStatement = sqlStatementContext.getSqlStatement();
- checkAllowedSQLStatementWhenTransactionFailed(databaseType,
connectionSession.getConnectionContext().getTransactionContext(), sqlStatement);
+ checkAllowedSQLStatementWhenTransactionFailed(databaseType,
sqlStatement, connectionSession.getConnectionContext().getTransactionContext());
checkSupportedSQLStatement(databaseType, sqlStatement);
- checkClusterState(sqlStatement, databaseType);
+ checkClusterState(databaseType, sqlStatement);
if (sqlStatement instanceof EmptyStatement) {
return new SkipBackendHandler(sqlStatement);
}
@@ -156,8 +156,8 @@ public final class ProxyBackendHandlerFactory {
.orElseGet(() ->
DatabaseBackendHandlerFactory.newInstance(queryContext, connectionSession,
preferPreparedStatement));
}
- private static void checkAllowedSQLStatementWhenTransactionFailed(final
DatabaseType databaseType,
- final
TransactionConnectionContext transactionContext, final SQLStatement
sqlStatement) throws SQLException {
+ private static void checkAllowedSQLStatementWhenTransactionFailed(final
DatabaseType databaseType, final SQLStatement sqlStatement,
+ final
TransactionConnectionContext transactionContext) throws SQLException {
if (transactionContext.isExceptionOccur()
&&
DatabaseTypedSPILoader.getService(DialectDatabaseMetaData.class,
databaseType).getTransactionOption().isAllowCommitAndRollbackOnlyWhenTransactionFailed())
{
ShardingSpherePreconditions.checkState(sqlStatement instanceof
CommitStatement || sqlStatement instanceof RollbackStatement,
@@ -177,11 +177,9 @@ public final class ProxyBackendHandlerFactory {
Collections.emptyList(), Collections.emptyList(),
UNSUPPORTED_STANDARD_SQL_STATEMENT_TYPES,
unsupportedDialectSQLStatementTypes).isSupported(sqlStatement);
}
- private static void checkClusterState(final SQLStatement sqlStatement,
final DatabaseType databaseType) {
+ private static void checkClusterState(final DatabaseType databaseType,
final SQLStatement sqlStatement) {
ShardingSphereState currentState =
ProxyContext.getInstance().getContextManager().getStateContext().getState();
- if (ShardingSphereState.OK != currentState) {
- TypedSPILoader.getService(ProxyClusterStateChecker.class,
currentState.name()).check(sqlStatement, databaseType);
- }
+ TypedSPILoader.findService(ProxyClusterStateChecker.class,
currentState).ifPresent(optional -> optional.check(sqlStatement, databaseType));
}
private static void checkSupportedDistSQLStatementInTransaction(final
SQLStatement sqlStatement, final ConnectionSession connectionSession) {
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/state/type/ReadOnlyProxyStateChecker.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/state/type/ReadOnlyProxyStateChecker.java
index d0070220e02..9299ba6296a 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/state/type/ReadOnlyProxyStateChecker.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/state/type/ReadOnlyProxyStateChecker.java
@@ -23,6 +23,7 @@ import
org.apache.shardingsphere.distsql.statement.type.ral.updatable.UpdatableR
import org.apache.shardingsphere.distsql.statement.type.rdl.RDLStatement;
import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.mode.exception.ShardingSphereStateException;
+import org.apache.shardingsphere.mode.state.ShardingSphereState;
import org.apache.shardingsphere.proxy.backend.state.ProxyClusterStateChecker;
import
org.apache.shardingsphere.proxy.backend.state.ProxySQLSupportedJudgeEngine;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.SQLStatement;
@@ -54,7 +55,7 @@ public final class ReadOnlyProxyStateChecker implements
ProxyClusterStateChecker
}
@Override
- public String getType() {
- return "READ_ONLY";
+ public ShardingSphereState getType() {
+ return ShardingSphereState.READ_ONLY;
}
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/state/type/UnavailableProxyStateChecker.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/state/type/UnavailableProxyStateChecker.java
index 8654a0b14ec..ba5d98addf3 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/state/type/UnavailableProxyStateChecker.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/state/type/UnavailableProxyStateChecker.java
@@ -25,6 +25,7 @@ import
org.apache.shardingsphere.distsql.statement.type.ral.updatable.UnlockClus
import org.apache.shardingsphere.distsql.statement.type.rql.RQLStatement;
import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.mode.exception.ShardingSphereStateException;
+import org.apache.shardingsphere.mode.state.ShardingSphereState;
import
org.apache.shardingsphere.proxy.backend.state.DialectProxyStateSupportedSQLProvider;
import org.apache.shardingsphere.proxy.backend.state.ProxyClusterStateChecker;
import
org.apache.shardingsphere.proxy.backend.state.ProxySQLSupportedJudgeEngine;
@@ -55,7 +56,7 @@ public final class UnavailableProxyStateChecker implements
ProxyClusterStateChec
}
@Override
- public String getType() {
- return "UNAVAILABLE";
+ public ShardingSphereState getType() {
+ return ShardingSphereState.UNAVAILABLE;
}
}