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