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;
     }
 }

Reply via email to