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

jianglongtao 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 e9f622b82de Add ReadwriteSplittingImportRuleConfigurationProvider 
(#30403)
e9f622b82de is described below

commit e9f622b82de3e20a2d0fe74c87bd67e604e36140
Author: yx9o <[email protected]>
AuthorDate: Wed Mar 6 13:35:19 2024 +0800

    Add ReadwriteSplittingImportRuleConfigurationProvider (#30403)
---
 ...teSplittingImportRuleConfigurationProvider.java | 37 ++++++++++++++--------
 ...le.spi.database.ImportRuleConfigurationProvider | 18 +++++++++++
 ...littingImportRuleConfigurationProviderTest.java | 10 +++---
 .../YamlDatabaseConfigurationImportExecutor.java   | 18 +----------
 4 files changed, 48 insertions(+), 35 deletions(-)

diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/checker/ReadwriteSplittingRuleConfigurationImportChecker.java
 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingImportRuleConfigurationProvider.java
similarity index 66%
rename from 
proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/checker/ReadwriteSplittingRuleConfigurationImportChecker.java
rename to 
features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingImportRuleConfigurationProvider.java
index 4a876638384..c21e016a268 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/checker/ReadwriteSplittingRuleConfigurationImportChecker.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingImportRuleConfigurationProvider.java
@@ -15,37 +15,43 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.common.checker;
+package org.apache.shardingsphere.readwritesplitting.distsql.handler.provider;
 
+import 
org.apache.shardingsphere.distsql.handler.engine.update.ral.rule.spi.database.ImportRuleConfigurationProvider;
 import 
org.apache.shardingsphere.distsql.handler.exception.storageunit.MissingRequiredStorageUnitsException;
 import 
org.apache.shardingsphere.infra.algorithm.load.balancer.core.LoadBalanceAlgorithm;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.rule.identifier.scope.DatabaseRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
 import 
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import 
org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 
 import java.util.Collection;
 import java.util.LinkedHashSet;
 
 /**
- * Readwrite-splitting rule configuration import checker.
+ * Readwrite-splitting import rule configuration provider.
  */
-public final class ReadwriteSplittingRuleConfigurationImportChecker {
+public final class ReadwriteSplittingImportRuleConfigurationProvider 
implements ImportRuleConfigurationProvider {
     
-    /**
-     * Check readwrite-splitting rule configuration.
-     *
-     * @param database          database
-     * @param currentRuleConfig current rule configuration
-     */
-    public void check(final ShardingSphereDatabase database, final 
ReadwriteSplittingRuleConfiguration currentRuleConfig) {
-        if (null == database || null == currentRuleConfig) {
+    @Override
+    public void check(final ShardingSphereDatabase database, final 
RuleConfiguration ruleConfig) {
+        if (null == database || null == ruleConfig) {
             return;
         }
+        ReadwriteSplittingRuleConfiguration readwriteSplittingRuleConfig = 
(ReadwriteSplittingRuleConfiguration) ruleConfig;
         String databaseName = database.getName();
-        checkDataSources(databaseName, database, currentRuleConfig);
-        checkLoadBalancers(currentRuleConfig);
+        checkDataSources(databaseName, database, readwriteSplittingRuleConfig);
+        checkLoadBalancers(readwriteSplittingRuleConfig);
+    }
+    
+    @Override
+    public DatabaseRule build(final ShardingSphereDatabase database, final 
RuleConfiguration ruleConfig, final InstanceContext instanceContext) {
+        return new ReadwriteSplittingRule(database.getName(), 
(ReadwriteSplittingRuleConfiguration) ruleConfig, instanceContext);
     }
     
     private void checkDataSources(final String databaseName, final 
ShardingSphereDatabase database, final ReadwriteSplittingRuleConfiguration 
currentRuleConfig) {
@@ -65,4 +71,9 @@ public final class 
ReadwriteSplittingRuleConfigurationImportChecker {
     private void checkLoadBalancers(final ReadwriteSplittingRuleConfiguration 
currentRuleConfig) {
         currentRuleConfig.getLoadBalancers().values().forEach(each -> 
TypedSPILoader.checkService(LoadBalanceAlgorithm.class, each.getType(), 
each.getProps()));
     }
+    
+    @Override
+    public Class<? extends RuleConfiguration> getType() {
+        return ReadwriteSplittingRuleConfiguration.class;
+    }
 }
diff --git 
a/features/readwrite-splitting/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.engine.update.ral.rule.spi.database.ImportRuleConfigurationProvider
 
b/features/readwrite-splitting/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.engine.update.ral.rule.spi.database.ImportRuleConfigurationProvider
new file mode 100644
index 00000000000..0ada7c83e45
--- /dev/null
+++ 
b/features/readwrite-splitting/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.engine.update.ral.rule.spi.database.ImportRuleConfigurationProvider
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.shardingsphere.readwritesplitting.distsql.handler.provider.ReadwriteSplittingImportRuleConfigurationProvider
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/checker/ReadwriteSplittingRuleConfigurationImportCheckerTest.java
 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingImportRuleConfigurationProviderTest.java
similarity index 90%
rename from 
proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/checker/ReadwriteSplittingRuleConfigurationImportCheckerTest.java
rename to 
features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingImportRuleConfigurationProviderTest.java
index 77d6a2ad67b..ea052aa6aba 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/common/checker/ReadwriteSplittingRuleConfigurationImportCheckerTest.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/provider/ReadwriteSplittingImportRuleConfigurationProviderTest.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.common.checker;
+package org.apache.shardingsphere.readwritesplitting.distsql.handler.provider;
 
 import 
org.apache.shardingsphere.distsql.handler.exception.storageunit.MissingRequiredStorageUnitsException;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
@@ -37,22 +37,22 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-class ReadwriteSplittingRuleConfigurationImportCheckerTest {
+class ReadwriteSplittingImportRuleConfigurationProviderTest {
     
-    private final ReadwriteSplittingRuleConfigurationImportChecker 
importChecker = new ReadwriteSplittingRuleConfigurationImportChecker();
+    private final ReadwriteSplittingImportRuleConfigurationProvider 
importRuleConfigProvider = new 
ReadwriteSplittingImportRuleConfigurationProvider();
     
     @Test
     void assertCheckDataSources() {
         ShardingSphereDatabase database = mockDatabaseWithDataSource();
         ReadwriteSplittingRuleConfiguration currentRuleConfig = 
getRuleConfigWithNotExistedDataSources();
-        assertThrows(MissingRequiredStorageUnitsException.class, () -> 
importChecker.check(database, currentRuleConfig));
+        assertThrows(MissingRequiredStorageUnitsException.class, () -> 
importRuleConfigProvider.check(database, currentRuleConfig));
     }
     
     @Test
     void assertCheckLoadBalancers() {
         ShardingSphereDatabase database = mockDatabase();
         ReadwriteSplittingRuleConfiguration currentRuleConfig = 
createInvalidLoadBalancerRuleConfig();
-        assertThrows(ServiceProviderNotFoundException.class, () -> 
importChecker.check(database, currentRuleConfig));
+        assertThrows(ServiceProviderNotFoundException.class, () -> 
importRuleConfigProvider.check(database, currentRuleConfig));
     }
     
     private ShardingSphereDatabase mockDatabaseWithDataSource() {
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
index aca52d5b604..9c5d2dc9d86 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
@@ -40,7 +40,6 @@ import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitNodeMapCreator;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
@@ -55,10 +54,8 @@ import 
org.apache.shardingsphere.proxy.backend.config.yaml.swapper.YamlProxyData
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.common.checker.EncryptRuleConfigurationImportChecker;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.common.checker.MaskRuleConfigurationImportChecker;
-import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.common.checker.ReadwriteSplittingRuleConfigurationImportChecker;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.common.checker.ShadowRuleConfigurationImportChecker;
 import 
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
-import 
org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
 import org.apache.shardingsphere.shadow.rule.ShadowRule;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -81,8 +78,6 @@ import java.util.stream.Collectors;
  */
 public final class YamlDatabaseConfigurationImportExecutor {
     
-    private final ReadwriteSplittingRuleConfigurationImportChecker 
readwriteSplittingRuleConfigImportChecker = new 
ReadwriteSplittingRuleConfigurationImportChecker();
-    
     private final EncryptRuleConfigurationImportChecker 
encryptRuleConfigImportChecker = new EncryptRuleConfigurationImportChecker();
     
     private final ShadowRuleConfigurationImportChecker 
shadowRuleConfigImportChecker = new ShadowRuleConfigurationImportChecker();
@@ -168,13 +163,11 @@ public final class 
YamlDatabaseConfigurationImportExecutor {
             return;
         }
         InstanceContext instanceContext = 
ProxyContext.getInstance().getContextManager().getInstanceContext();
-        if (ruleConfig instanceof ShardingRuleConfiguration) {
+        if (ruleConfig instanceof ShardingRuleConfiguration || ruleConfig 
instanceof ReadwriteSplittingRuleConfiguration) {
             ImportRuleConfigurationProvider importRuleConfigurationProvider = 
TypedSPILoader.getService(ImportRuleConfigurationProvider.class, 
ruleConfig.getClass());
             importRuleConfigurationProvider.check(database, ruleConfig);
             allRuleConfigs.add(ruleConfig);
             
database.getRuleMetaData().getRules().add(importRuleConfigurationProvider.build(database,
 ruleConfig, instanceContext));
-        } else if (ruleConfig instanceof ReadwriteSplittingRuleConfiguration) {
-            ruleConfigs.forEach(each -> 
addReadwriteSplittingRuleConfiguration((ReadwriteSplittingRuleConfiguration) 
each, allRuleConfigs, database));
         } else if (ruleConfig instanceof EncryptRuleConfiguration) {
             ruleConfigs.forEach(each -> 
addEncryptRuleConfiguration((EncryptRuleConfiguration) each, allRuleConfigs, 
database));
         } else if (ruleConfig instanceof ShadowRuleConfiguration) {
@@ -200,15 +193,6 @@ public final class YamlDatabaseConfigurationImportExecutor 
{
         return result;
     }
     
-    private void addReadwriteSplittingRuleConfiguration(final 
ReadwriteSplittingRuleConfiguration readwriteSplittingRuleConfig,
-                                                        final 
Collection<RuleConfiguration> allRuleConfigs, final ShardingSphereDatabase 
database) {
-        InstanceContext instanceContext = 
ProxyContext.getInstance().getContextManager().getInstanceContext();
-        Collection<ShardingSphereRule> rules = 
database.getRuleMetaData().getRules();
-        readwriteSplittingRuleConfigImportChecker.check(database, 
readwriteSplittingRuleConfig);
-        allRuleConfigs.add(readwriteSplittingRuleConfig);
-        rules.add(new ReadwriteSplittingRule(database.getName(), 
readwriteSplittingRuleConfig, instanceContext));
-    }
-    
     private void addEncryptRuleConfiguration(final EncryptRuleConfiguration 
encryptRuleConfig, final Collection<RuleConfiguration> allRuleConfigs, final 
ShardingSphereDatabase database) {
         encryptRuleConfigImportChecker.check(database, encryptRuleConfig);
         allRuleConfigs.add(encryptRuleConfig);

Reply via email to