This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 ed7bc9c3135 Fix rules order on DataNodes (#33563)
ed7bc9c3135 is described below

commit ed7bc9c313578da076eb478d6f17764d2bd0bf33
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Nov 6 16:47:31 2024 +0800

    Fix rules order on DataNodes (#33563)
    
    * Refactor DataNodes
    
    * Fix rules order on DataNodes
    
    * Fix rules order on DataNodes
    
    * Fix rules order on DataNodes
    
    * Fix rules order on DataNodes
---
 .../apache/shardingsphere/broadcast/rule/BroadcastRule.java  |  6 ++++++
 .../org/apache/shardingsphere/encrypt/rule/EncryptRule.java  |  6 ++++++
 .../java/org/apache/shardingsphere/mask/rule/MaskRule.java   |  6 ++++++
 .../readwritesplitting/rule/ReadwriteSplittingRule.java      |  6 ++++++
 .../org/apache/shardingsphere/shadow/rule/ShadowRule.java    | 12 +++++++++---
 .../apache/shardingsphere/sharding/rule/ShardingRule.java    |  6 ++++++
 .../org/apache/shardingsphere/infra/datanode/DataNodes.java  | 11 ++++++++++-
 .../apache/shardingsphere/infra/rule/ShardingSphereRule.java |  7 +++++++
 .../org/apache/shardingsphere/infra/fixture/FixtureRule.java |  5 +++++
 .../database/rule/RuleMetaDataShardingSphereRuleFixture.java |  5 +++++
 .../infra/rule/builder/fixture/FixtureGlobalRule.java        |  5 +++++
 .../distsql/handler/fixture/DistSQLHandlerFixtureRule.java   |  5 +++++
 .../infra/merge/fixture/rule/DecoratorRuleFixture.java       |  5 +++++
 .../infra/merge/fixture/rule/MergerRuleFixture.java          |  5 +++++
 .../infra/route/fixture/rule/RouteFailureRuleFixture.java    |  5 +++++
 .../infra/route/fixture/rule/RouteRuleFixture.java           |  5 +++++
 .../apache/shardingsphere/authority/rule/AuthorityRule.java  |  6 ++++++
 .../shardingsphere/globalclock/rule/GlobalClockRule.java     |  6 ++++++
 .../org/apache/shardingsphere/logging/rule/LoggingRule.java  |  6 ++++++
 .../org/apache/shardingsphere/single/rule/SingleRule.java    |  6 ++++++
 .../shardingsphere/sqlfederation/rule/SQLFederationRule.java |  6 ++++++
 .../fixture/rule/SQLFederationDeciderRuleMatchFixture.java   |  5 +++++
 .../rule/SQLFederationDeciderRuleNotMatchFixture.java        |  5 +++++
 .../org/apache/shardingsphere/parser/rule/SQLParserRule.java |  6 ++++++
 .../shardingsphere/sqltranslator/rule/SQLTranslatorRule.java |  6 ++++++
 .../timeservice/core/rule/TimestampServiceRule.java          |  6 ++++++
 .../shardingsphere/transaction/rule/TransactionRule.java     |  6 ++++++
 .../apache/shardingsphere/mode/fixture/ModeRuleFixture.java  |  5 +++++
 .../fixture/AlgorithmChangedProcessorFixtureRule.java        |  5 +++++
 .../shardingsphere/test/fixture/infra/rule/MockedRule.java   |  5 +++++
 30 files changed, 175 insertions(+), 4 deletions(-)

diff --git 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java
 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java
index 9f587b5151f..d40ab1e88fe 100644
--- 
a/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java
+++ 
b/features/broadcast/core/src/main/java/org/apache/shardingsphere/broadcast/rule/BroadcastRule.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.broadcast.rule;
 import com.cedarsoftware.util.CaseInsensitiveSet;
 import lombok.Getter;
 import org.apache.shardingsphere.broadcast.config.BroadcastRuleConfiguration;
+import org.apache.shardingsphere.broadcast.constant.BroadcastOrder;
 import 
org.apache.shardingsphere.broadcast.rule.attribute.BroadcastDataNodeRuleAttribute;
 import 
org.apache.shardingsphere.broadcast.rule.attribute.BroadcastTableNamesRuleAttribute;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
@@ -102,4 +103,9 @@ public final class BroadcastRule implements DatabaseRule {
     public boolean isAllBroadcastTables(final Collection<String> 
logicTableNames) {
         return !logicTableNames.isEmpty() && 
tables.containsAll(logicTableNames);
     }
+    
+    @Override
+    public int getOrder() {
+        return BroadcastOrder.ORDER;
+    }
 }
diff --git 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
index a60a399481e..8e68dd077c3 100644
--- 
a/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
+++ 
b/features/encrypt/core/src/main/java/org/apache/shardingsphere/encrypt/rule/EncryptRule.java
@@ -23,6 +23,7 @@ import com.google.common.base.Preconditions;
 import org.apache.shardingsphere.encrypt.config.EncryptRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.config.rule.EncryptColumnRuleConfiguration;
 import 
org.apache.shardingsphere.encrypt.config.rule.EncryptTableRuleConfiguration;
+import org.apache.shardingsphere.encrypt.constant.EncryptOrder;
 import 
org.apache.shardingsphere.encrypt.exception.metadata.EncryptTableNotFoundException;
 import 
org.apache.shardingsphere.encrypt.exception.metadata.MismatchedEncryptAlgorithmTypeException;
 import 
org.apache.shardingsphere.encrypt.rule.attribute.EncryptTableMapperRuleAttribute;
@@ -189,4 +190,9 @@ public final class EncryptRule implements DatabaseRule, 
PartialRuleUpdateSupport
         Preconditions.checkState(result.isPresent());
         return result.get();
     }
+    
+    @Override
+    public int getOrder() {
+        return EncryptOrder.ORDER;
+    }
 }
diff --git 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskRule.java
 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskRule.java
index 8f53f93e4c8..5d9e546b686 100644
--- 
a/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskRule.java
+++ 
b/features/mask/core/src/main/java/org/apache/shardingsphere/mask/rule/MaskRule.java
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.infra.rule.scope.DatabaseRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mask.config.MaskRuleConfiguration;
 import org.apache.shardingsphere.mask.config.rule.MaskTableRuleConfiguration;
+import org.apache.shardingsphere.mask.constant.MaskOrder;
 import 
org.apache.shardingsphere.mask.rule.attribute.MaskTableMapperRuleAttribute;
 import org.apache.shardingsphere.mask.spi.MaskAlgorithm;
 
@@ -118,4 +119,9 @@ public final class MaskRule implements DatabaseRule, 
PartialRuleUpdateSupported<
         Preconditions.checkState(result.isPresent());
         return result.get();
     }
+    
+    @Override
+    public int getOrder() {
+        return MaskOrder.ORDER;
+    }
 }
diff --git 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
index 5ad0a7b30ed..6a9818a6c38 100644
--- 
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
+++ 
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.readwritesplitting.config.ReadwriteSplittingRuleConfiguration;
 import 
org.apache.shardingsphere.readwritesplitting.config.rule.ReadwriteSplittingDataSourceGroupRuleConfiguration;
 import 
org.apache.shardingsphere.readwritesplitting.constant.ReadwriteSplittingDataSourceType;
+import 
org.apache.shardingsphere.readwritesplitting.constant.ReadwriteSplittingOrder;
 import 
org.apache.shardingsphere.readwritesplitting.exception.ReadwriteSplittingRuleExceptionIdentifier;
 import 
org.apache.shardingsphere.readwritesplitting.exception.actual.InvalidReadwriteSplittingActualDataSourceInlineExpressionException;
 import 
org.apache.shardingsphere.readwritesplitting.rule.attribute.ReadwriteSplittingDataSourceMapperRuleAttribute;
@@ -139,4 +140,9 @@ public final class ReadwriteSplittingRule implements 
DatabaseRule {
     public Optional<ReadwriteSplittingDataSourceGroupRule> 
findDataSourceGroupRule(final String dataSourceName) {
         return Optional.ofNullable(dataSourceRuleGroups.get(dataSourceName));
     }
+    
+    @Override
+    public int getOrder() {
+        return ReadwriteSplittingOrder.ORDER;
+    }
 }
diff --git 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java
 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java
index d884826638a..d67d1ecf603 100644
--- 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java
+++ 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowRule.java
@@ -20,17 +20,18 @@ package org.apache.shardingsphere.shadow.rule;
 import lombok.Getter;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
-import org.apache.shardingsphere.infra.rule.scope.DatabaseRule;
 import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
+import org.apache.shardingsphere.infra.rule.scope.DatabaseRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.shadow.config.ShadowRuleConfiguration;
 import 
org.apache.shardingsphere.shadow.config.datasource.ShadowDataSourceConfiguration;
 import org.apache.shardingsphere.shadow.config.table.ShadowTableConfiguration;
+import org.apache.shardingsphere.shadow.constant.ShadowOrder;
+import 
org.apache.shardingsphere.shadow.rule.attribute.ShadowDataSourceMapperRuleAttribute;
+import org.apache.shardingsphere.shadow.spi.ShadowAlgorithm;
 import org.apache.shardingsphere.shadow.spi.ShadowOperationType;
 import org.apache.shardingsphere.shadow.spi.column.ColumnShadowAlgorithm;
 import org.apache.shardingsphere.shadow.spi.hint.HintShadowAlgorithm;
-import 
org.apache.shardingsphere.shadow.rule.attribute.ShadowDataSourceMapperRuleAttribute;
-import org.apache.shardingsphere.shadow.spi.ShadowAlgorithm;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -242,4 +243,9 @@ public final class ShadowRule implements DatabaseRule {
         ShadowDataSourceRule dataSourceRule = 
dataSourceRules.get(logicDataSourceName);
         return null == dataSourceRule ? Optional.empty() : 
Optional.of(dataSourceRule.getProductionDataSource());
     }
+    
+    @Override
+    public int getOrder() {
+        return ShadowOrder.ORDER;
+    }
 }
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index d6c0938ef5a..ffeb6588265 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -49,6 +49,7 @@ import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingS
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardShardingStrategyConfiguration;
 import 
org.apache.shardingsphere.sharding.api.sharding.ShardingAutoTableAlgorithm;
 import org.apache.shardingsphere.sharding.cache.ShardingCache;
+import org.apache.shardingsphere.sharding.constant.ShardingOrder;
 import 
org.apache.shardingsphere.sharding.exception.metadata.ShardingTableRuleNotFoundException;
 import 
org.apache.shardingsphere.sharding.rule.attribute.ShardingDataNodeRuleAttribute;
 import 
org.apache.shardingsphere.sharding.rule.attribute.ShardingTableNamesRuleAttribute;
@@ -634,4 +635,9 @@ public final class ShardingRule implements DatabaseRule {
         BinaryOperationExpression binaryExpression = 
(BinaryOperationExpression) expression;
         return binaryExpression.getLeft() instanceof ColumnSegment && 
binaryExpression.getRight() instanceof ColumnSegment && 
"=".equals(binaryExpression.getOperator());
     }
+    
+    @Override
+    public int getOrder() {
+        return ShardingOrder.ORDER;
+    }
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNodes.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNodes.java
index af70785fd3e..ac5e7a38bef 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNodes.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/datanode/DataNodes.java
@@ -23,9 +23,12 @@ import 
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import 
org.apache.shardingsphere.infra.rule.attribute.datanode.DataNodeRuleAttribute;
 import 
org.apache.shardingsphere.infra.rule.attribute.datasource.DataSourceMapperRuleAttribute;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 
@@ -49,7 +52,7 @@ public final class DataNodes {
         if (result.isEmpty()) {
             return result;
         }
-        for (ShardingSphereRule each : rules) {
+        for (ShardingSphereRule each : getOrderedRules()) {
             Optional<DataSourceMapperRuleAttribute> 
dataSourceMapperRuleAttribute = 
each.getAttributes().findAttribute(DataSourceMapperRuleAttribute.class);
             if (dataSourceMapperRuleAttribute.isPresent()) {
                 result = buildDataNodes(result, 
dataSourceMapperRuleAttribute.get());
@@ -72,6 +75,12 @@ public final class DataNodes {
         return 
rule.getAttributes().findAttribute(DataNodeRuleAttribute.class).map(optional -> 
optional.getDataNodesByTableName(tableName)).orElse(Collections.emptyList());
     }
     
+    private Collection<ShardingSphereRule> getOrderedRules() {
+        List<ShardingSphereRule> result = new ArrayList<>(rules);
+        result.sort(Comparator.comparingInt(ShardingSphereRule::getOrder));
+        return result;
+    }
+    
     private Collection<DataNode> buildDataNodes(final Collection<DataNode> 
dataNodes, final DataSourceMapperRuleAttribute dataSourceMapperRuleAttribute) {
         Collection<DataNode> result = new LinkedList<>();
         Map<String, Collection<String>> dataSourceMapper = 
dataSourceMapperRuleAttribute.getDataSourceMapper();
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/ShardingSphereRule.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/ShardingSphereRule.java
index 2eb12455c41..3ff32925957 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/ShardingSphereRule.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/ShardingSphereRule.java
@@ -40,4 +40,11 @@ public interface ShardingSphereRule {
     default RuleAttributes getAttributes() {
         return new RuleAttributes();
     }
+    
+    /**
+     * Get rule order.
+     *
+     * @return rule order
+     */
+    int getOrder();
 }
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/fixture/FixtureRule.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/fixture/FixtureRule.java
index d5599af2616..eaabe5670fa 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/fixture/FixtureRule.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/fixture/FixtureRule.java
@@ -35,4 +35,9 @@ public final class FixtureRule implements DatabaseRule {
     public RuleAttributes getAttributes() {
         return new RuleAttributes(mock(DataSourceMapperRuleAttribute.class));
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/rule/RuleMetaDataShardingSphereRuleFixture.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/rule/RuleMetaDataShardingSphereRuleFixture.java
index e7c3d8b4b09..28a54645d9a 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/rule/RuleMetaDataShardingSphereRuleFixture.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/rule/RuleMetaDataShardingSphereRuleFixture.java
@@ -28,4 +28,9 @@ public class RuleMetaDataShardingSphereRuleFixture implements 
ShardingSphereRule
     public RuleConfiguration getConfiguration() {
         return mock(RuleConfiguration.class);
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/fixture/FixtureGlobalRule.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/fixture/FixtureGlobalRule.java
index 7ca342e2b9f..19ffb5b1387 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/fixture/FixtureGlobalRule.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/fixture/FixtureGlobalRule.java
@@ -28,4 +28,9 @@ public final class FixtureGlobalRule implements GlobalRule {
     public RuleConfiguration getConfiguration() {
         return mock(RuleConfiguration.class);
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/fixture/DistSQLHandlerFixtureRule.java
 
b/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/fixture/DistSQLHandlerFixtureRule.java
index 34313dd132d..294e2914cb0 100644
--- 
a/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/fixture/DistSQLHandlerFixtureRule.java
+++ 
b/infra/distsql-handler/src/test/java/org/apache/shardingsphere/distsql/handler/fixture/DistSQLHandlerFixtureRule.java
@@ -52,4 +52,9 @@ public final class DistSQLHandlerFixtureRule implements 
ShardingSphereRule {
         when(result.findActualTableByCatalog(any(), 
any())).thenReturn(Optional.empty());
         return result;
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/rule/DecoratorRuleFixture.java
 
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/rule/DecoratorRuleFixture.java
index 6e2b3cdaa8c..f6c89580736 100644
--- 
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/rule/DecoratorRuleFixture.java
+++ 
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/rule/DecoratorRuleFixture.java
@@ -28,4 +28,9 @@ public final class DecoratorRuleFixture implements 
ShardingSphereRule {
     public RuleConfiguration getConfiguration() {
         return mock(RuleConfiguration.class);
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/rule/MergerRuleFixture.java
 
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/rule/MergerRuleFixture.java
index 6d15a2d293b..15472296102 100644
--- 
a/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/rule/MergerRuleFixture.java
+++ 
b/infra/merge/src/test/java/org/apache/shardingsphere/infra/merge/fixture/rule/MergerRuleFixture.java
@@ -28,4 +28,9 @@ public final class MergerRuleFixture implements 
ShardingSphereRule {
     public RuleConfiguration getConfiguration() {
         return mock(RuleConfiguration.class);
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/fixture/rule/RouteFailureRuleFixture.java
 
b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/fixture/rule/RouteFailureRuleFixture.java
index 3e0c24fea42..874aa25a49e 100644
--- 
a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/fixture/rule/RouteFailureRuleFixture.java
+++ 
b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/fixture/rule/RouteFailureRuleFixture.java
@@ -28,4 +28,9 @@ public final class RouteFailureRuleFixture implements 
ShardingSphereRule {
     public RuleConfiguration getConfiguration() {
         return mock(RuleConfiguration.class);
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/fixture/rule/RouteRuleFixture.java
 
b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/fixture/rule/RouteRuleFixture.java
index edb1c534dcf..d64bdaffd8f 100644
--- 
a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/fixture/rule/RouteRuleFixture.java
+++ 
b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/fixture/rule/RouteRuleFixture.java
@@ -28,4 +28,9 @@ public final class RouteRuleFixture implements 
ShardingSphereRule {
     public RuleConfiguration getConfiguration() {
         return mock(RuleConfiguration.class);
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
 
b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
index f468877d4b7..e422c04d4bc 100644
--- 
a/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
+++ 
b/kernel/authority/core/src/main/java/org/apache/shardingsphere/authority/rule/AuthorityRule.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.authority.rule;
 
 import lombok.Getter;
 import org.apache.shardingsphere.authority.config.AuthorityRuleConfiguration;
+import org.apache.shardingsphere.authority.constant.AuthorityOrder;
 import org.apache.shardingsphere.authority.model.ShardingSpherePrivileges;
 import org.apache.shardingsphere.authority.spi.PrivilegeProvider;
 import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
@@ -109,4 +110,9 @@ public final class AuthorityRule implements GlobalRule {
         }
         return Optional.empty();
     }
+    
+    @Override
+    public int getOrder() {
+        return AuthorityOrder.ORDER;
+    }
 }
diff --git 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
index a20512e8746..ccaf964a6e9 100644
--- 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
+++ 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/rule/GlobalClockRule.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.globalclock.rule;
 import lombok.Getter;
 import 
org.apache.shardingsphere.globalclock.config.GlobalClockRuleConfiguration;
 import org.apache.shardingsphere.globalclock.provider.GlobalClockProvider;
+import org.apache.shardingsphere.globalclock.rule.constant.GlobalClockOrder;
 import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 
@@ -50,4 +51,9 @@ public final class GlobalClockRule implements GlobalRule {
     public Optional<GlobalClockProvider> getGlobalClockProvider() {
         return Optional.ofNullable(globalClockProvider);
     }
+    
+    @Override
+    public int getOrder() {
+        return GlobalClockOrder.ORDER;
+    }
 }
diff --git 
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/rule/LoggingRule.java
 
b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/rule/LoggingRule.java
index 2ee2b786881..f4d9d359426 100644
--- 
a/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/rule/LoggingRule.java
+++ 
b/kernel/logging/core/src/main/java/org/apache/shardingsphere/logging/rule/LoggingRule.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import org.apache.shardingsphere.logging.config.LoggingRuleConfiguration;
 import org.apache.shardingsphere.logging.constant.LoggingConstants;
+import org.apache.shardingsphere.logging.constant.LoggingOrder;
 import org.apache.shardingsphere.logging.logger.ShardingSphereLogger;
 
 import java.util.Optional;
@@ -45,4 +46,9 @@ public final class LoggingRule implements GlobalRule {
     public Optional<ShardingSphereLogger> getSQLLogger() {
         return configuration.getLoggers().stream().filter(each -> 
LoggingConstants.SQL_LOG_TOPIC.equalsIgnoreCase(each.getLoggerName())).findFirst();
     }
+    
+    @Override
+    public int getOrder() {
+        return LoggingOrder.ORDER;
+    }
 }
diff --git 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
index 473026ea5a4..c84acb585ce 100644
--- 
a/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
+++ 
b/kernel/single/core/src/main/java/org/apache/shardingsphere/single/rule/SingleRule.java
@@ -33,6 +33,7 @@ import 
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
 import org.apache.shardingsphere.infra.rule.scope.DatabaseRule;
 import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
+import org.apache.shardingsphere.single.constant.SingleOrder;
 import org.apache.shardingsphere.single.datanode.SingleTableDataNodeLoader;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
 
@@ -186,4 +187,9 @@ public final class SingleRule implements DatabaseRule {
         }
         return result;
     }
+    
+    @Override
+    public int getOrder() {
+        return SingleOrder.ORDER;
+    }
 }
diff --git 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/rule/SQLFederationRule.java
 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/rule/SQLFederationRule.java
index b299213ed50..6fffda59320 100644
--- 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/rule/SQLFederationRule.java
+++ 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/rule/SQLFederationRule.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import 
org.apache.shardingsphere.sqlfederation.config.SQLFederationRuleConfiguration;
+import org.apache.shardingsphere.sqlfederation.constant.SQLFederationOrder;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.context.OptimizerContext;
 import 
org.apache.shardingsphere.sqlfederation.optimizer.context.OptimizerContextFactory;
 
@@ -55,4 +56,9 @@ public final class SQLFederationRule implements GlobalRule {
     public OptimizerContext getOptimizerContext() {
         return optimizerContext.get();
     }
+    
+    @Override
+    public int getOrder() {
+        return SQLFederationOrder.ORDER;
+    }
 }
diff --git 
a/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/engine/fixture/rule/SQLFederationDeciderRuleMatchFixture.java
 
b/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/engine/fixture/rule/SQLFederationDeciderRuleMatchFixture.java
index 6e48683b209..b92992058fa 100644
--- 
a/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/engine/fixture/rule/SQLFederationDeciderRuleMatchFixture.java
+++ 
b/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/engine/fixture/rule/SQLFederationDeciderRuleMatchFixture.java
@@ -30,4 +30,9 @@ public final class SQLFederationDeciderRuleMatchFixture 
implements ShardingSpher
     public RuleConfiguration getConfiguration() {
         return new SQLFederationRuleConfiguration(true, false, 
mock(CacheOption.class));
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/engine/fixture/rule/SQLFederationDeciderRuleNotMatchFixture.java
 
b/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/engine/fixture/rule/SQLFederationDeciderRuleNotMatchFixture.java
index d392506149a..b0d5145ebcb 100644
--- 
a/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/engine/fixture/rule/SQLFederationDeciderRuleNotMatchFixture.java
+++ 
b/kernel/sql-federation/core/src/test/java/org/apache/shardingsphere/sqlfederation/engine/fixture/rule/SQLFederationDeciderRuleNotMatchFixture.java
@@ -30,4 +30,9 @@ public final class SQLFederationDeciderRuleNotMatchFixture 
implements ShardingSp
     public RuleConfiguration getConfiguration() {
         return new SQLFederationRuleConfiguration(false, false, 
mock(CacheOption.class));
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
 
b/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
index 3d0b5ad6f1b..af34a0b572d 100644
--- 
a/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
+++ 
b/kernel/sql-parser/core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.infra.parser.SQLParserEngine;
 import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
 import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
+import org.apache.shardingsphere.parser.constant.SQLParserOrder;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 
 /**
@@ -52,4 +53,9 @@ public final class SQLParserRule implements GlobalRule {
     public SQLParserEngine getSQLParserEngine(final DatabaseType databaseType) 
{
         return new ShardingSphereSQLParserEngine(databaseType, 
sqlStatementCache, parseTreeCache);
     }
+    
+    @Override
+    public int getOrder() {
+        return SQLParserOrder.ORDER;
+    }
 }
diff --git 
a/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java
 
b/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java
index 013765e6be4..c8499978fce 100644
--- 
a/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java
+++ 
b/kernel/sql-translator/core/src/main/java/org/apache/shardingsphere/sqltranslator/rule/SQLTranslatorRule.java
@@ -25,6 +25,7 @@ import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.sqltranslator.config.SQLTranslatorRuleConfiguration;
+import org.apache.shardingsphere.sqltranslator.constant.SQLTranslatorOrder;
 import org.apache.shardingsphere.sqltranslator.context.SQLTranslatorContext;
 import 
org.apache.shardingsphere.sqltranslator.exception.SQLTranslationException;
 import org.apache.shardingsphere.sqltranslator.spi.SQLTranslator;
@@ -75,4 +76,9 @@ public final class SQLTranslatorRule implements GlobalRule {
             throw ex;
         }
     }
+    
+    @Override
+    public int getOrder() {
+        return SQLTranslatorOrder.ORDER;
+    }
 }
diff --git 
a/kernel/time-service/core/src/main/java/org/apache/shardingsphere/timeservice/core/rule/TimestampServiceRule.java
 
b/kernel/time-service/core/src/main/java/org/apache/shardingsphere/timeservice/core/rule/TimestampServiceRule.java
index 9fe58602bd4..79eacd8bdba 100644
--- 
a/kernel/time-service/core/src/main/java/org/apache/shardingsphere/timeservice/core/rule/TimestampServiceRule.java
+++ 
b/kernel/time-service/core/src/main/java/org/apache/shardingsphere/timeservice/core/rule/TimestampServiceRule.java
@@ -21,6 +21,7 @@ import lombok.Getter;
 import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.timeservice.config.TimestampServiceRuleConfiguration;
+import 
org.apache.shardingsphere.timeservice.core.rule.constant.TimestampServiceOrder;
 import org.apache.shardingsphere.timeservice.spi.TimestampService;
 
 import java.sql.Timestamp;
@@ -49,4 +50,9 @@ public final class TimestampServiceRule implements GlobalRule 
{
     public Timestamp getTimestamp() {
         return timestampService.getTimestamp();
     }
+    
+    @Override
+    public int getOrder() {
+        return TimestampServiceOrder.ORDER;
+    }
 }
diff --git 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
index 62cab89e7a9..892bb20ce98 100644
--- 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
+++ 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
@@ -32,6 +32,7 @@ import 
org.apache.shardingsphere.transaction.ConnectionTransaction;
 import 
org.apache.shardingsphere.transaction.ShardingSphereTransactionManagerEngine;
 import org.apache.shardingsphere.transaction.api.TransactionType;
 import 
org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration;
+import org.apache.shardingsphere.transaction.constant.TransactionOrder;
 
 import javax.sql.DataSource;
 import java.util.LinkedHashMap;
@@ -147,4 +148,9 @@ public final class TransactionRule implements GlobalRule, 
AutoCloseable {
             log.error("Close transaction engine failed.", ex);
         }
     }
+    
+    @Override
+    public int getOrder() {
+        return TransactionOrder.ORDER;
+    }
 }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/fixture/ModeRuleFixture.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/fixture/ModeRuleFixture.java
index f0130971eaf..a1cf91e2900 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/fixture/ModeRuleFixture.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/fixture/ModeRuleFixture.java
@@ -28,4 +28,9 @@ public final class ModeRuleFixture implements DatabaseRule {
     public RuleConfiguration getConfiguration() {
         return mock(RuleConfiguration.class);
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/processor/fixture/AlgorithmChangedProcessorFixtureRule.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/processor/fixture/AlgorithmChangedProcessorFixtureRule.java
index cb89211d9d3..66c0ce67adb 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/processor/fixture/AlgorithmChangedProcessorFixtureRule.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/processor/fixture/AlgorithmChangedProcessorFixtureRule.java
@@ -26,4 +26,9 @@ import 
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 public final class AlgorithmChangedProcessorFixtureRule implements 
ShardingSphereRule {
     
     private final AlgorithmChangedProcessorFixtureRuleConfiguration 
configuration;
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }
diff --git 
a/test/fixture/infra/src/main/java/org/apache/shardingsphere/test/fixture/infra/rule/MockedRule.java
 
b/test/fixture/infra/src/main/java/org/apache/shardingsphere/test/fixture/infra/rule/MockedRule.java
index 0425cec047c..a8c80a39ffc 100644
--- 
a/test/fixture/infra/src/main/java/org/apache/shardingsphere/test/fixture/infra/rule/MockedRule.java
+++ 
b/test/fixture/infra/src/main/java/org/apache/shardingsphere/test/fixture/infra/rule/MockedRule.java
@@ -31,4 +31,9 @@ public final class MockedRule implements ShardingSphereRule {
     public RuleConfiguration getConfiguration() {
         return mock(RuleConfiguration.class);
     }
+    
+    @Override
+    public int getOrder() {
+        return 0;
+    }
 }


Reply via email to