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 20fbf141f70 Move checker to build rules and add load balance check
(#19546)
20fbf141f70 is described below
commit 20fbf141f7057f593af7742878c562f3e7273991
Author: zhaojinchao <[email protected]>
AuthorDate: Tue Jul 26 17:33:12 2022 +0800
Move checker to build rules and add load balance check (#19546)
* Move checker to build rules and add load balance check
* Add unit test
* Fix ci
* Fix ci
* Remove sharding table and auto table check
* Remove unless check
---
.../DatabaseDiscoveryRuleConfigurationChecker.java | 7 ++-
...abaseDiscoveryRuleConfigurationCheckerTest.java | 4 +-
.../AbstractEncryptRuleConfigurationChecker.java | 5 +-
...rovidedEncryptRuleConfigurationCheckerTest.java | 6 +-
.../EncryptRuleConfigurationCheckerTest.java | 6 +-
...ReadwriteSplittingRuleConfigurationChecker.java | 68 ++++++++++++++++++++--
...ReadwriteSplittingRuleConfigurationChecker.java | 7 +++
...ReadwriteSplittingRuleConfigurationChecker.java | 11 ++++
.../rule/ReadwriteSplittingDataSourceRule.java | 3 -
.../rule/ReadwriteSplittingRule.java | 11 +---
.../ReadwriteSplittingStrategyFactory.java | 5 --
...writeSplittingRuleConfigurationCheckerTest.java | 14 +++--
...writeSplittingRuleConfigurationCheckerTest.java | 44 ++++++++++++--
.../rule/ReadwriteSplittingDataSourceRuleTest.java | 22 -------
.../rule/ReadwriteSplittingRuleTest.java | 5 --
.../AbstractShadowRuleConfigurationChecker.java | 4 +-
...ProvidedShadowRuleConfigurationCheckerTest.java | 4 +-
.../ShadowRuleConfigurationCheckerTest.java | 3 +-
.../AbstractShardingRuleConfigurationChecker.java | 7 ++-
...ovidedShardingRuleConfigurationCheckerTest.java | 16 +----
.../ShardingRuleConfigurationCheckerTest.java | 10 +---
...orithmProviderConfigurationYamlSwapperTest.java | 1 -
.../config/checker/RuleConfigurationChecker.java | 9 ++-
.../builder/database/DatabaseRulesBuilder.java | 2 +
.../checker/RuleConfigurationCheckerFixture.java | 7 ++-
.../core/datasource/ShardingSphereDataSource.java | 7 ---
.../spring/boot/SpringBootStarterTest.java | 4 +-
.../src/test/resources/application.properties | 2 +-
.../proxy/initializer/BootstrapInitializer.java | 11 ----
.../fixture/RuleConfigurationFixtureChecker.java | 8 ++-
.../fixture/TestRuleConfigurationChecker.java | 7 ++-
31 files changed, 194 insertions(+), 126 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/checker/DatabaseDiscoveryRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/checker/DatabaseDiscoveryRuleConfigurationChecker.java
index 220b747fb0f..9a8e533981e 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/checker/DatabaseDiscoveryRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/main/java/org/apache/shardingsphere/dbdiscovery/checker/DatabaseDiscoveryRuleConfigurationChecker.java
@@ -21,6 +21,11 @@ import com.google.common.base.Preconditions;
import
org.apache.shardingsphere.dbdiscovery.api.config.DatabaseDiscoveryRuleConfiguration;
import org.apache.shardingsphere.dbdiscovery.constant.DatabaseDiscoveryOrder;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+
+import javax.sql.DataSource;
+import java.util.Collection;
+import java.util.Map;
/**
* Database discovery rule configuration checker.
@@ -28,7 +33,7 @@ import
org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
public final class DatabaseDiscoveryRuleConfigurationChecker implements
RuleConfigurationChecker<DatabaseDiscoveryRuleConfiguration> {
@Override
- public void check(final String databaseName, final
DatabaseDiscoveryRuleConfiguration config) {
+ public void check(final String databaseName, final
DatabaseDiscoveryRuleConfiguration config, final Map<String, DataSource>
dataSourceMap, final Collection<ShardingSphereRule> rules) {
config.getDataSources().forEach(each ->
Preconditions.checkState(!each.getDiscoveryTypeName().isEmpty(), "No available
database discovery rule configuration in database `%s.", databaseName));
}
diff --git
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/checker/DatabaseDiscoveryRuleConfigurationCheckerTest.java
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/checker/DatabaseDiscoveryRuleConfigurationCheckerTest.java
index 5668c8ad754..c6f2ffb9b23 100644
---
a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/checker/DatabaseDiscoveryRuleConfigurationCheckerTest.java
+++
b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-core/src/test/java/org/apache/shardingsphere/dbdiscovery/checker/DatabaseDiscoveryRuleConfigurationCheckerTest.java
@@ -41,7 +41,7 @@ public final class
DatabaseDiscoveryRuleConfigurationCheckerTest {
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(DatabaseDiscoveryRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
private DatabaseDiscoveryRuleConfiguration getValidConfiguration() {
@@ -59,7 +59,7 @@ public final class
DatabaseDiscoveryRuleConfigurationCheckerTest {
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(DatabaseDiscoveryRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
private DatabaseDiscoveryRuleConfiguration getInvalidConfiguration() {
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AbstractEncryptRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AbstractEncryptRuleConfigurationChecker.java
index 076914023f3..2d802f94705 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AbstractEncryptRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/main/java/org/apache/shardingsphere/encrypt/checker/AbstractEncryptRuleConfigurationChecker.java
@@ -23,8 +23,11 @@ import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptColumnRuleConfig
import
org.apache.shardingsphere.encrypt.api.config.rule.EncryptTableRuleConfiguration;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import javax.sql.DataSource;
import java.util.Collection;
+import java.util.Map;
/**
* Abstract encrypt rule configuration checker.
@@ -34,7 +37,7 @@ import java.util.Collection;
public abstract class AbstractEncryptRuleConfigurationChecker<T extends
RuleConfiguration> implements RuleConfigurationChecker<T> {
@Override
- public final void check(final String databaseName, final T config) {
+ public final void check(final String databaseName, final T config, final
Map<String, DataSource> dataSourceMap, final Collection<ShardingSphereRule>
rules) {
checkTableConfiguration(databaseName, getTables(config),
getEncryptors(config));
}
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
index 3440d21c59e..a1cc2beeb58 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/AlgorithmProvidedEncryptRuleConfigurationCheckerTest.java
@@ -44,7 +44,7 @@ public final class
AlgorithmProvidedEncryptRuleConfigurationCheckerTest {
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(AlgorithmProvidedEncryptRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
@SuppressWarnings("unchecked")
@@ -63,7 +63,7 @@ public final class
AlgorithmProvidedEncryptRuleConfigurationCheckerTest {
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(AlgorithmProvidedEncryptRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
private AlgorithmProvidedEncryptRuleConfiguration
createInvalidCipherColumnConfig() {
@@ -81,7 +81,7 @@ public final class
AlgorithmProvidedEncryptRuleConfigurationCheckerTest {
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(AlgorithmProvidedEncryptRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
private AlgorithmProvidedEncryptRuleConfiguration
createInvalidAssistColumnConfig() {
diff --git
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
index 306b652542d..2008743039b 100644
---
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
+++
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-core/src/test/java/org/apache/shardingsphere/encrypt/checker/EncryptRuleConfigurationCheckerTest.java
@@ -44,7 +44,7 @@ public final class EncryptRuleConfigurationCheckerTest {
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(EncryptRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
private EncryptRuleConfiguration createValidConfiguration() {
@@ -62,7 +62,7 @@ public final class EncryptRuleConfigurationCheckerTest {
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(EncryptRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
private EncryptRuleConfiguration createInvalidCipherColumnConfig() {
@@ -80,7 +80,7 @@ public final class EncryptRuleConfigurationCheckerTest {
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(EncryptRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
private EncryptRuleConfiguration createInvalidAssistColumnConfig() {
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java
index 32a77180269..1776658987c 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AbstractReadwriteSplittingRuleConfigurationChecker.java
@@ -18,14 +18,25 @@
package org.apache.shardingsphere.readwritesplitting.checker;
import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicDataSourceContainedRule;
+import
org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.TransactionWeightReadQueryLoadBalanceAlgorithm;
+import
org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.WeightReadQueryLoadBalanceAlgorithm;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
+import
org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
+import
org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;
+import javax.sql.DataSource;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Optional;
+import java.util.Map;
+import java.util.List;
/**
* Abstract readwrite-splitting rule configuration checker.
@@ -35,27 +46,72 @@ import java.util.Optional;
public abstract class AbstractReadwriteSplittingRuleConfigurationChecker<T
extends RuleConfiguration> implements RuleConfigurationChecker<T> {
@Override
- public final void check(final String databaseName, final T config) {
- checkDataSources(databaseName, getDataSources(config));
+ public final void check(final String databaseName, final T config, final
Map<String, DataSource> dataSourceMap, final Collection<ShardingSphereRule>
rules) {
+ Collection<ReadwriteSplittingDataSourceRuleConfiguration> configs =
getDataSources(config);
+ Preconditions.checkArgument(!configs.isEmpty(), "Replica query data
source rules can not be empty.");
+ checkDataSources(databaseName, configs, dataSourceMap, rules);
+ checkLoadBalancerDataSourceName(databaseName, configs,
getLoadBalancer(config), rules);
}
- private void checkDataSources(final String databaseName, final
Collection<ReadwriteSplittingDataSourceRuleConfiguration> dataSources) {
+ private void checkDataSources(final String databaseName, final
Collection<ReadwriteSplittingDataSourceRuleConfiguration> configs,
+ final Map<String, DataSource> dataSourceMap,
final Collection<ShardingSphereRule> rules) {
Collection<String> writeDataSourceNames = new HashSet<>();
Collection<String> readDataSourceNames = new HashSet<>();
- for (ReadwriteSplittingDataSourceRuleConfiguration each : dataSources)
{
+ for (ReadwriteSplittingDataSourceRuleConfiguration each : configs) {
+
Preconditions.checkArgument(!Strings.isNullOrEmpty(each.getName()), "Name is
required.");
Preconditions.checkState(null != each.getStaticStrategy() || null
!= each.getDynamicStrategy(),
"No available readwrite-splitting rule configuration in
database `%s`.", databaseName);
- Optional.ofNullable(each.getStaticStrategy()).ifPresent(optional
-> checkStaticStrategy(databaseName, writeDataSourceNames, readDataSourceNames,
optional));
+ Optional.ofNullable(each.getStaticStrategy()).ifPresent(optional
-> checkStaticStrategy(databaseName, dataSourceMap, writeDataSourceNames,
readDataSourceNames, optional));
+ Optional.ofNullable(each.getDynamicStrategy()).ifPresent(optional
-> checkDynamicStrategy(rules, optional));
}
}
- private void checkStaticStrategy(final String databaseName, final
Collection<String> writeDataSourceNames,
+ private void checkStaticStrategy(final String databaseName, final
Map<String, DataSource> dataSourceMap, final Collection<String>
writeDataSourceNames,
final Collection<String>
readDataSourceNames, final StaticReadwriteSplittingStrategyConfiguration
strategyConfig) {
+
Preconditions.checkArgument(!Strings.isNullOrEmpty(strategyConfig.getWriteDataSourceName()),
"Write data source name is required.");
+
Preconditions.checkArgument(!strategyConfig.getReadDataSourceNames().isEmpty(),
"Read data source names are required.");
+ strategyConfig.getReadDataSourceNames().forEach(each ->
Preconditions.checkState(null != dataSourceMap.get(each), "Read data source
name `%s` not in database `%s`.", each, databaseName));
Preconditions.checkState(writeDataSourceNames.add(strategyConfig.getWriteDataSourceName()),
"Can not config duplicate write dataSource `%s` in database
`%s`.", strategyConfig.getWriteDataSourceName(), databaseName);
Preconditions.checkState(readDataSourceNames.addAll(strategyConfig.getReadDataSourceNames()),
"Can not config duplicate read dataSources `%s` in database
`%s`.", strategyConfig.getReadDataSourceNames(), databaseName);
}
+ private void checkDynamicStrategy(final Collection<ShardingSphereRule>
rules, final DynamicReadwriteSplittingStrategyConfiguration dynamicStrategy) {
+
Preconditions.checkArgument(!Strings.isNullOrEmpty(dynamicStrategy.getAutoAwareDataSourceName()),
"Auto aware data source name is required.");
+ Optional<ShardingSphereRule> dynamicDataSourceStrategy =
rules.stream().filter(each -> each instanceof
DynamicDataSourceContainedRule).findFirst();
+ Preconditions.checkArgument(dynamicDataSourceStrategy.isPresent(),
"Dynamic data source strategy is required.");
+ }
+
+ private void checkLoadBalancerDataSourceName(final String databaseName,
final Collection<ReadwriteSplittingDataSourceRuleConfiguration> configs,
+ final Map<String,
ReadQueryLoadBalanceAlgorithm> loadBalancers, final
Collection<ShardingSphereRule> rules) {
+ for (ReadwriteSplittingDataSourceRuleConfiguration each : configs) {
+ if (Strings.isNullOrEmpty(each.getLoadBalancerName())) {
+ continue;
+ }
+ ReadQueryLoadBalanceAlgorithm loadBalancer =
loadBalancers.get(each.getLoadBalancerName());
+ Preconditions.checkState(null != loadBalancer, "Not found load
balance type in database `%s`.", databaseName);
+ if (loadBalancer instanceof WeightReadQueryLoadBalanceAlgorithm ||
loadBalancer instanceof TransactionWeightReadQueryLoadBalanceAlgorithm) {
+ Preconditions.checkState(!loadBalancer.getProps().isEmpty(),
"Readwrite-splitting data source weight config are required in database `%s`.",
databaseName);
+ List<String> dataSourceNames = getDataSourceNames(each, rules);
+ loadBalancer.getProps().keySet().forEach(dataSourceName ->
Preconditions.checkState(dataSourceNames.contains(dataSourceName),
+ "Load Balancer datasource name config does not match
datasource in database `%s`.", databaseName));
+ }
+ }
+ }
+
+ private List<String> getDataSourceNames(final
ReadwriteSplittingDataSourceRuleConfiguration config, final
Collection<ShardingSphereRule> rules) {
+ if (null != config.getStaticStrategy()) {
+ return config.getStaticStrategy().getReadDataSourceNames();
+ }
+ Optional<ShardingSphereRule> dynamicDataSourceStrategy =
rules.stream().filter(each -> each instanceof
DynamicDataSourceContainedRule).findFirst();
+ DynamicDataSourceContainedRule dynamicDataSourceRule =
(DynamicDataSourceContainedRule) dynamicDataSourceStrategy.get();
+ List<String> result = new
ArrayList<>(dynamicDataSourceRule.getReplicaDataSourceNames(config.getDynamicStrategy().getAutoAwareDataSourceName()));
+
result.add(dynamicDataSourceRule.getPrimaryDataSourceName(config.getDynamicStrategy().getAutoAwareDataSourceName()));
+ return result;
+ }
+
protected abstract
Collection<ReadwriteSplittingDataSourceRuleConfiguration> getDataSources(T
config);
+
+ protected abstract Map<String, ReadQueryLoadBalanceAlgorithm>
getLoadBalancer(T config);
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationChecker.java
index 9dcf467cb2e..7febd81903c 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationChecker.java
@@ -20,8 +20,10 @@ package org.apache.shardingsphere.readwritesplitting.checker;
import
org.apache.shardingsphere.readwritesplitting.algorithm.config.AlgorithmProvidedReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.constant.ReadwriteSplittingOrder;
+import
org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;
import java.util.Collection;
+import java.util.Map;
/**
* Algorithm provided readwrite-splitting ruleConfiguration checker.
@@ -33,6 +35,11 @@ public final class
AlgorithmProvidedReadwriteSplittingRuleConfigurationChecker e
return config.getDataSources();
}
+ @Override
+ protected Map<String, ReadQueryLoadBalanceAlgorithm> getLoadBalancer(final
AlgorithmProvidedReadwriteSplittingRuleConfiguration config) {
+ return config.getLoadBalanceAlgorithms();
+ }
+
@Override
public int getOrder() {
return ReadwriteSplittingOrder.ALGORITHM_PROVIDER_ORDER;
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
index 330fc72f61a..0481352e4e2 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationChecker.java
@@ -20,8 +20,12 @@ package org.apache.shardingsphere.readwritesplitting.checker;
import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.constant.ReadwriteSplittingOrder;
+import
org.apache.shardingsphere.readwritesplitting.factory.ReadQueryLoadBalanceAlgorithmFactory;
+import
org.apache.shardingsphere.readwritesplitting.spi.ReadQueryLoadBalanceAlgorithm;
import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
/**
* Readwrite-splitting rule configuration checker.
@@ -33,6 +37,13 @@ public final class
ReadwriteSplittingRuleConfigurationChecker extends AbstractRe
return config.getDataSources();
}
+ @Override
+ protected Map<String, ReadQueryLoadBalanceAlgorithm> getLoadBalancer(final
ReadwriteSplittingRuleConfiguration config) {
+ Map<String, ReadQueryLoadBalanceAlgorithm> result = new
LinkedHashMap<>(config.getLoadBalancers().size(), 1);
+ config.getLoadBalancers().forEach((key, value) -> result.put(key,
ReadQueryLoadBalanceAlgorithmFactory.newInstance(value)));
+ return result;
+ }
+
@Override
public int getOrder() {
return ReadwriteSplittingOrder.ORDER;
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
index a4c9faccd60..e9ec6dc4f78 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
@@ -17,8 +17,6 @@
package org.apache.shardingsphere.readwritesplitting.rule;
-import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.Getter;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
@@ -50,7 +48,6 @@ public final class ReadwriteSplittingDataSourceRule {
public ReadwriteSplittingDataSourceRule(final
ReadwriteSplittingDataSourceRuleConfiguration config, final
ReadQueryLoadBalanceAlgorithm loadBalancer,
final
Collection<ShardingSphereRule> builtRules) {
- Preconditions.checkArgument(!Strings.isNullOrEmpty(config.getName()),
"Name is required.");
name = config.getName();
this.loadBalancer = loadBalancer;
readwriteSplittingStrategy =
ReadwriteSplittingStrategyFactory.newInstance(config, builtRules);
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
index 3eaae151762..8d9bd52d9bf 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.readwritesplitting.rule;
import com.google.common.base.Preconditions;
-import com.google.common.base.Strings;
import lombok.Getter;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.distsql.constant.ExportableConstants;
@@ -62,13 +61,10 @@ public final class ReadwriteSplittingRule implements
DatabaseRule, DataSourceCon
public ReadwriteSplittingRule(final ReadwriteSplittingRuleConfiguration
ruleConfig, final Collection<ShardingSphereRule> builtRules) {
configuration = ruleConfig;
- Preconditions.checkArgument(!ruleConfig.getDataSources().isEmpty(),
"Replica query data source rules can not be empty.");
ruleConfig.getLoadBalancers().forEach((key, value) ->
loadBalancers.put(key,
ReadQueryLoadBalanceAlgorithmFactory.newInstance(value)));
dataSourceRules = new HashMap<>(ruleConfig.getDataSources().size(), 1);
for (ReadwriteSplittingDataSourceRuleConfiguration each :
ruleConfig.getDataSources()) {
- // TODO check if can not find load balancer should throw exception.
- ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm =
Strings.isNullOrEmpty(each.getLoadBalancerName()) ||
!loadBalancers.containsKey(each.getLoadBalancerName())
- ? ReadQueryLoadBalanceAlgorithmFactory.newInstance()
+ ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm = null ==
loadBalancers.get(each.getLoadBalancerName()) ?
ReadQueryLoadBalanceAlgorithmFactory.newInstance()
: loadBalancers.get(each.getLoadBalancerName());
dataSourceRules.put(each.getName(), new
ReadwriteSplittingDataSourceRule(each, loadBalanceAlgorithm, builtRules));
}
@@ -76,13 +72,10 @@ public final class ReadwriteSplittingRule implements
DatabaseRule, DataSourceCon
public ReadwriteSplittingRule(final
AlgorithmProvidedReadwriteSplittingRuleConfiguration ruleConfig, final
Collection<ShardingSphereRule> builtRules) {
configuration = ruleConfig;
- Preconditions.checkArgument(!ruleConfig.getDataSources().isEmpty(),
"Replica query data source rules can not be empty.");
loadBalancers.putAll(ruleConfig.getLoadBalanceAlgorithms());
dataSourceRules = new HashMap<>(ruleConfig.getDataSources().size(), 1);
for (ReadwriteSplittingDataSourceRuleConfiguration each :
ruleConfig.getDataSources()) {
- // TODO check if can not find load balancer should throw exception.
- ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm =
Strings.isNullOrEmpty(each.getLoadBalancerName()) ||
!loadBalancers.containsKey(each.getLoadBalancerName())
- ? ReadQueryLoadBalanceAlgorithmFactory.newInstance()
+ ReadQueryLoadBalanceAlgorithm loadBalanceAlgorithm = null ==
loadBalancers.get(each.getLoadBalancerName()) ?
ReadQueryLoadBalanceAlgorithmFactory.newInstance()
: loadBalancers.get(each.getLoadBalancerName());
dataSourceRules.put(each.getName(), new
ReadwriteSplittingDataSourceRule(each, loadBalanceAlgorithm, builtRules));
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
index 5243002abff..657a633e243 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/main/java/org/apache/shardingsphere/readwritesplitting/strategy/ReadwriteSplittingStrategyFactory.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.readwritesplitting.strategy;
-import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@@ -51,16 +50,12 @@ public final class ReadwriteSplittingStrategyFactory {
}
private static StaticReadwriteSplittingStrategy
createStaticReadwriteSplittingStrategy(final
StaticReadwriteSplittingStrategyConfiguration staticConfig) {
-
Preconditions.checkArgument(!Strings.isNullOrEmpty(staticConfig.getWriteDataSourceName()),
"Write data source name is required.");
-
Preconditions.checkArgument(!staticConfig.getReadDataSourceNames().isEmpty(),
"Read data source names are required.");
return new
StaticReadwriteSplittingStrategy(staticConfig.getWriteDataSourceName(),
staticConfig.getReadDataSourceNames());
}
private static DynamicReadwriteSplittingStrategy
createDynamicReadwriteSplittingStrategy(final
DynamicReadwriteSplittingStrategyConfiguration dynamicConfig,
final Collection<ShardingSphereRule> builtRules) {
-
Preconditions.checkArgument(!Strings.isNullOrEmpty(dynamicConfig.getAutoAwareDataSourceName()),
"Auto aware data source name is required.");
Optional<ShardingSphereRule> dynamicDataSourceStrategy =
builtRules.stream().filter(each -> each instanceof
DynamicDataSourceContainedRule).findFirst();
- Preconditions.checkArgument(dynamicDataSourceStrategy.isPresent(),
"Dynamic data source strategy is required.");
boolean allowWriteDataSourceQuery =
Strings.isNullOrEmpty(dynamicConfig.getWriteDataSourceQueryEnabled()) ?
Boolean.TRUE :
Boolean.parseBoolean(dynamicConfig.getWriteDataSourceQueryEnabled());
return new
DynamicReadwriteSplittingStrategy(dynamicConfig.getAutoAwareDataSourceName(),
allowWriteDataSourceQuery, (DynamicDataSourceContainedRule)
dynamicDataSourceStrategy.get());
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTest.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTest.java
index f43d5bb8518..4eec3ff77e5 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTest.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.readwritesplitting.checker;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
import
org.apache.shardingsphere.infra.config.checker.RuleConfigurationCheckerFactory;
+import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicDataSourceContainedRule;
import
org.apache.shardingsphere.readwritesplitting.algorithm.config.AlgorithmProvidedReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
@@ -45,7 +46,7 @@ public final class
AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTe
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(AlgorithmProvidedReadwriteSplittingRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Arrays.asList(mock(DynamicDataSourceContainedRule.class)));
}
private AlgorithmProvidedReadwriteSplittingRuleConfiguration
createValidConfiguration() {
@@ -53,6 +54,7 @@ public final class
AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTe
ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig =
mock(ReadwriteSplittingDataSourceRuleConfiguration.class);
when(dataSourceConfig.getDynamicStrategy()).thenReturn(new
DynamicReadwriteSplittingStrategyConfiguration("ds0", "false"));
when(result.getDataSources()).thenReturn(Collections.singleton(dataSourceConfig));
+ when(dataSourceConfig.getName()).thenReturn("readwrite_ds");
return result;
}
@@ -63,18 +65,19 @@ public final class
AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTe
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(AlgorithmProvidedReadwriteSplittingRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
private AlgorithmProvidedReadwriteSplittingRuleConfiguration
createInvalidConfiguration() {
AlgorithmProvidedReadwriteSplittingRuleConfiguration result =
mock(AlgorithmProvidedReadwriteSplittingRuleConfiguration.class);
ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig =
mock(ReadwriteSplittingDataSourceRuleConfiguration.class);
+ when(dataSourceConfig.getName()).thenReturn("readwrite_ds");
when(result.getDataSources()).thenReturn(Collections.singleton(dataSourceConfig));
return result;
}
@SuppressWarnings({"rawtypes", "unchecked"})
- @Test(expected = IllegalStateException.class)
+ @Test(expected = IllegalArgumentException.class)
public void assertCheckWhenConfigInvalidWriteDataSource() {
AlgorithmProvidedReadwriteSplittingRuleConfiguration config =
mock(AlgorithmProvidedReadwriteSplittingRuleConfiguration.class);
List<ReadwriteSplittingDataSourceRuleConfiguration> configurations =
Arrays.asList(createDataSourceRuleConfig(
@@ -83,7 +86,7 @@ public final class
AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTe
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(AlgorithmProvidedReadwriteSplittingRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
@SuppressWarnings({"rawtypes", "unchecked"})
@@ -96,7 +99,7 @@ public final class
AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTe
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(AlgorithmProvidedReadwriteSplittingRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
private ReadwriteSplittingDataSourceRuleConfiguration
createDataSourceRuleConfig(final String writeDataSource, final List<String>
readDataSources) {
@@ -105,6 +108,7 @@ public final class
AlgorithmProvidedReadwriteSplittingRuleConfigurationCheckerTe
when(readwriteSplittingStrategy.getWriteDataSourceName()).thenReturn(writeDataSource);
when(readwriteSplittingStrategy.getReadDataSourceNames()).thenReturn(readDataSources);
when(result.getStaticStrategy()).thenReturn(readwriteSplittingStrategy);
+ when(result.getName()).thenReturn("readwrite_ds");
return result;
}
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java
index 5e2b66e5301..68aa7d380d2 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/checker/ReadwriteSplittingRuleConfigurationCheckerTest.java
@@ -17,17 +17,23 @@
package org.apache.shardingsphere.readwritesplitting.checker;
+import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
import
org.apache.shardingsphere.infra.config.checker.RuleConfigurationCheckerFactory;
+import
org.apache.shardingsphere.infra.rule.identifier.type.DynamicDataSourceContainedRule;
import
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.strategy.DynamicReadwriteSplittingStrategyConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
import org.junit.Test;
+import javax.sql.DataSource;
import java.util.Arrays;
+import java.util.Properties;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.LinkedHashMap;
import java.util.Optional;
import static org.hamcrest.CoreMatchers.instanceOf;
@@ -45,12 +51,13 @@ public final class
ReadwriteSplittingRuleConfigurationCheckerTest {
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(ReadwriteSplittingRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Arrays.asList(mock(DynamicDataSourceContainedRule.class)));
}
private ReadwriteSplittingRuleConfiguration createValidConfiguration() {
ReadwriteSplittingRuleConfiguration result =
mock(ReadwriteSplittingRuleConfiguration.class);
ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig =
mock(ReadwriteSplittingDataSourceRuleConfiguration.class);
+ when(dataSourceConfig.getName()).thenReturn("readwrite_ds");
when(dataSourceConfig.getDynamicStrategy()).thenReturn(new
DynamicReadwriteSplittingStrategyConfiguration("ds0", "false"));
when(result.getDataSources()).thenReturn(Collections.singletonList(dataSourceConfig));
return result;
@@ -63,12 +70,13 @@ public final class
ReadwriteSplittingRuleConfigurationCheckerTest {
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(ReadwriteSplittingRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, Collections.emptyMap(),
Collections.emptyList());
}
private ReadwriteSplittingRuleConfiguration createInvalidConfiguration() {
ReadwriteSplittingRuleConfiguration result =
mock(ReadwriteSplittingRuleConfiguration.class);
ReadwriteSplittingDataSourceRuleConfiguration dataSourceConfig =
mock(ReadwriteSplittingDataSourceRuleConfiguration.class);
+ when(dataSourceConfig.getName()).thenReturn("readwrite_ds");
when(result.getDataSources()).thenReturn(Collections.singleton(dataSourceConfig));
return result;
}
@@ -78,12 +86,12 @@ public final class
ReadwriteSplittingRuleConfigurationCheckerTest {
public void assertCheckWhenConfigInvalidWriteDataSource() {
ReadwriteSplittingRuleConfiguration config =
mock(ReadwriteSplittingRuleConfiguration.class);
List<ReadwriteSplittingDataSourceRuleConfiguration> configurations =
Arrays.asList(createDataSourceRuleConfig(
- "write_ds", Collections.emptyList()),
createDataSourceRuleConfig("write_ds", Collections.emptyList()));
+ "write_ds", Arrays.asList("ds_0", "ds_1")),
createDataSourceRuleConfig("write_ds", Arrays.asList("ds_2", "ds_3")));
when(config.getDataSources()).thenReturn(configurations);
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(ReadwriteSplittingRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, mockDataSources(),
Collections.emptyList());
}
@SuppressWarnings({"rawtypes", "unchecked"})
@@ -96,7 +104,24 @@ public final class
ReadwriteSplittingRuleConfigurationCheckerTest {
Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
assertTrue(checker.isPresent());
assertThat(checker.get(),
instanceOf(ReadwriteSplittingRuleConfigurationChecker.class));
- checker.get().check("test", config);
+ checker.get().check("test", config, mockDataSources(),
Collections.emptyList());
+ }
+
+ @SuppressWarnings({"rawtypes", "unchecked"})
+ @Test(expected = IllegalStateException.class)
+ public void assertCheckWeightLoadBalanceInvalidDataSourceName() {
+ ReadwriteSplittingRuleConfiguration config =
mock(ReadwriteSplittingRuleConfiguration.class);
+ List<ReadwriteSplittingDataSourceRuleConfiguration> configurations =
Arrays.asList(createDataSourceRuleConfig("write_ds_0",
Arrays.asList("read_ds_0", "read_ds_1")));
+ when(config.getDataSources()).thenReturn(configurations);
+ Properties props = new Properties();
+ props.setProperty("read_ds_2", "1");
+ props.setProperty("read_ds_1", "2");
+ ShardingSphereAlgorithmConfiguration algorithm = new
ShardingSphereAlgorithmConfiguration("WEIGHT", props);
+
when(config.getLoadBalancers()).thenReturn(Collections.singletonMap("weight_ds",
algorithm));
+ Optional<RuleConfigurationChecker> checker =
RuleConfigurationCheckerFactory.findInstance(config);
+ assertTrue(checker.isPresent());
+ assertThat(checker.get(),
instanceOf(ReadwriteSplittingRuleConfigurationChecker.class));
+ checker.get().check("test", config, mockDataSources(),
Collections.emptyList());
}
private ReadwriteSplittingDataSourceRuleConfiguration
createDataSourceRuleConfig(final String writeDataSource, final List<String>
readDataSources) {
@@ -105,6 +130,15 @@ public final class
ReadwriteSplittingRuleConfigurationCheckerTest {
when(readwriteSplittingStrategy.getWriteDataSourceName()).thenReturn(writeDataSource);
when(readwriteSplittingStrategy.getReadDataSourceNames()).thenReturn(readDataSources);
when(result.getStaticStrategy()).thenReturn(readwriteSplittingStrategy);
+ when(result.getName()).thenReturn("readwrite_ds");
+ when(result.getLoadBalancerName()).thenReturn("weight_ds");
+ return result;
+ }
+
+ private Map<String, DataSource> mockDataSources() {
+ Map<String, DataSource> result = new LinkedHashMap<>(2, 1);
+ result.put("read_ds_0", mock(DataSource.class));
+ result.put("read_ds_1", mock(DataSource.class));
return result;
}
}
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
index 4e516c28ca1..1fe8be71ca6 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRuleTest.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.readwritesplitting.rule;
import
org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.RandomReadQueryLoadBalanceAlgorithm;
-import
org.apache.shardingsphere.readwritesplitting.algorithm.loadbalance.RoundRobinReadQueryLoadBalanceAlgorithm;
import
org.apache.shardingsphere.readwritesplitting.api.rule.ReadwriteSplittingDataSourceRuleConfiguration;
import
org.apache.shardingsphere.readwritesplitting.api.strategy.StaticReadwriteSplittingStrategyConfiguration;
import org.junit.Before;
@@ -42,27 +41,6 @@ public final class ReadwriteSplittingDataSourceRuleTest {
new RandomReadQueryLoadBalanceAlgorithm(),
Collections.emptyList());
}
- @Test(expected = IllegalArgumentException.class)
- public void assertNewReadwriteSplittingDataSourceRuleWithoutName() {
- new ReadwriteSplittingDataSourceRule(new
ReadwriteSplittingDataSourceRuleConfiguration("",
- new StaticReadwriteSplittingStrategyConfiguration("write_ds",
Arrays.asList("read_ds")),
- null, null), new RoundRobinReadQueryLoadBalanceAlgorithm(),
Collections.emptyList());
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void
assertNewReadwriteSplittingDataSourceRuleWithoutWriteDataSourceName() {
- new ReadwriteSplittingDataSourceRule(new
ReadwriteSplittingDataSourceRuleConfiguration("ds",
- new StaticReadwriteSplittingStrategyConfiguration("",
Arrays.asList("read_ds")),
- null, null), new RoundRobinReadQueryLoadBalanceAlgorithm(),
Collections.emptyList());
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void
assertNewReadwriteSplittingDataSourceRuleWithEmptyReadDataSourceName() {
- new ReadwriteSplittingDataSourceRule(new
ReadwriteSplittingDataSourceRuleConfiguration("ds",
- new StaticReadwriteSplittingStrategyConfiguration("write_ds",
Collections.emptyList()),
- null, null), new RoundRobinReadQueryLoadBalanceAlgorithm(),
Collections.emptyList());
- }
-
@Test
public void assertGetReadDataSourceNamesWithoutDisabledDataSourceNames() {
assertThat(readwriteSplittingDataSourceRule.getEnabledReplicaDataSources(),
is(Arrays.asList("read_ds_0", "read_ds_1")));
diff --git
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
index 56631c05064..170a0b9086b 100644
---
a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
+++
b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-core/src/test/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRuleTest.java
@@ -41,11 +41,6 @@ import static org.junit.Assert.assertTrue;
public final class ReadwriteSplittingRuleTest {
- @Test(expected = IllegalArgumentException.class)
- public void assertNewWithEmptyDataSourceRule() {
- new ReadwriteSplittingRule(new
ReadwriteSplittingRuleConfiguration(Collections.emptyList(),
Collections.emptyMap()), Collections.emptyList());
- }
-
@Test
public void assertFindDataSourceRule() {
Optional<ReadwriteSplittingDataSourceRule> actual =
createReadwriteSplittingRule().findDataSourceRule("readwrite");
diff --git
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/checker/AbstractShadowRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/checker/AbstractShadowRuleConfigurationChecker.java
index c8f3054a0d8..5c55d05a2f3 100644
---
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/checker/AbstractShadowRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/main/java/org/apache/shardingsphere/shadow/checker/AbstractShadowRuleConfigurationChecker.java
@@ -21,11 +21,13 @@ import com.google.common.base.Preconditions;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import
org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.shadow.api.config.datasource.ShadowDataSourceConfiguration;
import
org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
import org.apache.shardingsphere.shadow.api.shadow.hint.HintShadowAlgorithm;
import org.apache.shardingsphere.shadow.spi.ShadowAlgorithm;
+import javax.sql.DataSource;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
@@ -39,7 +41,7 @@ import java.util.Set;
public abstract class AbstractShadowRuleConfigurationChecker<T extends
RuleConfiguration> implements RuleConfigurationChecker<T> {
@Override
- public final void check(final String databaseName, final T config) {
+ public final void check(final String databaseName, final T config, final
Map<String, DataSource> dataSourceMap, final Collection<ShardingSphereRule>
rules) {
checkShadowRuleConfiguration(config);
}
diff --git
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/checker/AlgorithmProvidedShadowRuleConfigurationCheckerTest.java
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/checker/AlgorithmProvidedShadowRuleConfigurationCheckerTest.java
index 133ec45de1d..a94589a1662 100644
---
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/checker/AlgorithmProvidedShadowRuleConfigurationCheckerTest.java
+++
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/checker/AlgorithmProvidedShadowRuleConfigurationCheckerTest.java
@@ -24,15 +24,15 @@ import
org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguratio
import org.apache.shardingsphere.shadow.factory.ShadowAlgorithmFactory;
import org.junit.Test;
-import java.util.Collections;
import java.util.LinkedList;
import java.util.Properties;
+import java.util.Collections;
public final class AlgorithmProvidedShadowRuleConfigurationCheckerTest {
@Test
public void assertCheck() {
- new AlgorithmProvidedShadowRuleConfigurationChecker().check("",
createAlgorithmProvidedShadowRuleConfiguration());
+ new AlgorithmProvidedShadowRuleConfigurationChecker().check("",
createAlgorithmProvidedShadowRuleConfiguration(), Collections.emptyMap(),
Collections.emptyList());
}
private AlgorithmProvidedShadowRuleConfiguration
createAlgorithmProvidedShadowRuleConfiguration() {
diff --git
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/checker/ShadowRuleConfigurationCheckerTest.java
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/checker/ShadowRuleConfigurationCheckerTest.java
index 2ec912b02c5..857e4a1f5dc 100644
---
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/checker/ShadowRuleConfigurationCheckerTest.java
+++
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-core/src/test/java/org/apache/shardingsphere/shadow/checker/ShadowRuleConfigurationCheckerTest.java
@@ -28,12 +28,13 @@ import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Properties;
+import java.util.Collections;
public final class ShadowRuleConfigurationCheckerTest {
@Test
public void assertCheck() {
- new ShadowRuleConfigurationChecker().check("",
createShadowRuleConfiguration());
+ new ShadowRuleConfigurationChecker().check("",
createShadowRuleConfiguration(), Collections.emptyMap(),
Collections.emptyList());
}
private ShadowRuleConfiguration createShadowRuleConfiguration() {
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/AbstractShardingRuleConfigurationChecker.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/AbstractShardingRuleConfigurationChecker.java
index a1fb1d7c7ce..d877e2c5cc8 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/AbstractShardingRuleConfigurationChecker.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/checker/AbstractShardingRuleConfigurationChecker.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.checker;
import com.google.common.base.Preconditions;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.strategy.audit.ShardingAuditStrategyConfiguration;
@@ -27,7 +28,9 @@ import
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerate
import
org.apache.shardingsphere.sharding.api.config.strategy.sharding.NoneShardingStrategyConfiguration;
import
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ShardingStrategyConfiguration;
+import javax.sql.DataSource;
import java.util.Collection;
+import java.util.Map;
/**
* Abstract sharding rule configuration checker.
@@ -37,7 +40,7 @@ import java.util.Collection;
public abstract class AbstractShardingRuleConfigurationChecker<T extends
RuleConfiguration> implements RuleConfigurationChecker<T> {
@Override
- public final void check(final String databaseName, final T config) {
+ public final void check(final String databaseName, final T config, final
Map<String, DataSource> dataSourceMap, final Collection<ShardingSphereRule>
rules) {
Collection<String> keyGenerators = getKeyGenerators(config);
Collection<String> auditors = getAuditors(config);
Collection<String> shardingAlgorithms = getShardingAlgorithms(config);
@@ -50,8 +53,6 @@ public abstract class
AbstractShardingRuleConfigurationChecker<T extends RuleCon
private void checkTableConfiguration(final String databaseName, final
Collection<ShardingTableRuleConfiguration> tables, final
Collection<ShardingAutoTableRuleConfiguration> autoTables,
final Collection<String>
keyGenerators, final Collection<String> auditors, final Collection<String>
shardingAlgorithms) {
- Preconditions.checkState(!tables.isEmpty() || !autoTables.isEmpty(),
- "No available sharding table or autoTable configurations in
database `%s`.", databaseName);
for (ShardingTableRuleConfiguration each : tables) {
checkKeyGenerateStrategy(databaseName,
each.getKeyGenerateStrategy(), keyGenerators);
checkAuditStrategy(databaseName, each.getAuditStrategy(),
auditors);
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/checker/AlgorithmProvidedShardingRuleConfigurationCheckerTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/checker/AlgorithmProvidedShardingRuleConfigurationCheckerTest.java
index 01805ec023f..744e5b1f8a6 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/checker/AlgorithmProvidedShardingRuleConfigurationCheckerTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/checker/AlgorithmProvidedShardingRuleConfigurationCheckerTest.java
@@ -46,21 +46,7 @@ public final class
AlgorithmProvidedShardingRuleConfigurationCheckerTest {
ShardingStrategyConfiguration shardingStrategyConfig =
createShardingStrategyConfiguration();
ruleConfig.setTables(Collections.singleton(createShardingTableRuleConfiguration(shardingStrategyConfig,
shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
ruleConfig.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(shardingStrategyConfig,
shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
- getChecker(ruleConfig).check("foo_db", ruleConfig);
- }
-
- @Test(expected = IllegalStateException.class)
- public void assertCheckTableConfigurationInitFailed() {
- AlgorithmProvidedShardingRuleConfiguration ruleConfig =
createRuleConfiguration();
- getChecker(ruleConfig).check("foo_db", ruleConfig);
- }
-
- @Test(expected = IllegalStateException.class)
- public void assertCheckTableConfigurationFailed() {
- AlgorithmProvidedShardingRuleConfiguration ruleConfig =
createRuleConfiguration();
-
ruleConfig.setTables(Collections.singleton(createShardingTableRuleConfiguration(null,
null, null)));
-
ruleConfig.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(null,
null, null)));
- getChecker(ruleConfig).check("foo_db", ruleConfig);
+ getChecker(ruleConfig).check("foo_db", ruleConfig,
Collections.emptyMap(), Collections.emptyList());
}
private AlgorithmProvidedShardingRuleConfiguration
createRuleConfiguration() {
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
index 0162ac07192..198fc08cfaf 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/checker/ShardingRuleConfigurationCheckerTest.java
@@ -44,13 +44,7 @@ public final class ShardingRuleConfigurationCheckerTest {
ShardingStrategyConfiguration shardingStrategyConfig =
createShardingStrategyConfiguration();
ruleConfig.setTables(Collections.singleton(createShardingTableRuleConfiguration(shardingStrategyConfig,
shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
ruleConfig.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(shardingStrategyConfig,
shardingAuditStrategyConfig, ruleConfig.getDefaultKeyGenerateStrategy())));
- getChecker(ruleConfig).check("foo_db", ruleConfig);
- }
-
- @Test(expected = IllegalStateException.class)
- public void assertCheckTableConfigurationInitFailed() {
- ShardingRuleConfiguration ruleConfig = createRuleConfiguration();
- getChecker(ruleConfig).check("foo_db", ruleConfig);
+ getChecker(ruleConfig).check("foo_db", ruleConfig,
Collections.emptyMap(), Collections.emptyList());
}
@Test(expected = IllegalStateException.class)
@@ -58,7 +52,7 @@ public final class ShardingRuleConfigurationCheckerTest {
ShardingRuleConfiguration configuration = createRuleConfiguration();
configuration.setTables(Collections.singletonList(createShardingTableRuleConfiguration(null,
null, null)));
configuration.setAutoTables(Collections.singleton(createShardingAutoTableRuleConfiguration(null,
null, null)));
- getChecker(configuration).check("foo_db", configuration);
+ getChecker(configuration).check("foo_db", configuration,
Collections.emptyMap(), Collections.emptyList());
}
private ShardingRuleConfiguration createRuleConfiguration() {
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleAlgorithmProviderConfigurationYamlSwapperTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleAlgorithmProviderConfigurationYamlSwapperTest.java
index f6100c803ff..660b942e9c9 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleAlgorithmProviderConfigurationYamlSwapperTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/yaml/swapper/ShardingRuleAlgorithmProviderConfigurationYamlSwapperTest.java
@@ -91,7 +91,6 @@ public final class
ShardingRuleAlgorithmProviderConfigurationYamlSwapperTest {
yamlKeyGenerateStrategyConfiguration.setColumn("foo_column");
result.setDefaultKeyGenerateStrategy(yamlKeyGenerateStrategyConfiguration);
result.setDefaultAuditStrategy(mock(YamlShardingAuditStrategyConfiguration.class));
-
result.setDefaultShardingColumn("foo_column");
return result;
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/checker/RuleConfigurationChecker.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/checker/RuleConfigurationChecker.java
index 7e877151f30..fba1d3a025f 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/checker/RuleConfigurationChecker.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/config/checker/RuleConfigurationChecker.java
@@ -18,9 +18,14 @@
package org.apache.shardingsphere.infra.config.checker;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.spi.annotation.SingletonSPI;
import org.apache.shardingsphere.spi.type.ordered.OrderedSPI;
+import javax.sql.DataSource;
+import java.util.Collection;
+import java.util.Map;
+
/**
* Rule configuration checker.
*
@@ -34,6 +39,8 @@ public interface RuleConfigurationChecker<T extends
RuleConfiguration> extends O
*
* @param databaseName database name to be checked
* @param config rule configuration to be checked
+ * @param dataSourceMap data sources to be checked
+ * @param rules rules to be checked
*/
- void check(String databaseName, T config);
+ void check(String databaseName, T config, Map<String, DataSource>
dataSourceMap, Collection<ShardingSphereRule> rules);
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
index 4039e9402ff..775b050540c 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.rule.builder.database;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import
org.apache.shardingsphere.infra.config.checker.RuleConfigurationCheckerFactory;
import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
import
org.apache.shardingsphere.infra.config.function.DistributedRuleConfiguration;
import
org.apache.shardingsphere.infra.config.function.EnhancedRuleConfiguration;
@@ -53,6 +54,7 @@ public final class DatabaseRulesBuilder {
public static Collection<ShardingSphereRule> build(final String
databaseName, final DatabaseConfiguration databaseConfig, final InstanceContext
instanceContext) {
Collection<ShardingSphereRule> result = new LinkedList<>();
for (Entry<RuleConfiguration, DatabaseRuleBuilder> entry :
getRuleBuilderMap(databaseConfig).entrySet()) {
+
RuleConfigurationCheckerFactory.findInstance(entry.getKey()).ifPresent(optional
-> optional.check(databaseName, entry.getKey(),
databaseConfig.getDataSources(), result));
result.add(entry.getValue().build(entry.getKey(), databaseName,
databaseConfig.getDataSources(), result, instanceContext));
}
return result;
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/config/checker/RuleConfigurationCheckerFixture.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/config/checker/RuleConfigurationCheckerFixture.java
index adc74c93f95..36a817f95c6 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/config/checker/RuleConfigurationCheckerFixture.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/config/checker/RuleConfigurationCheckerFixture.java
@@ -18,11 +18,16 @@
package org.apache.shardingsphere.infra.config.checker;
import org.apache.shardingsphere.infra.fixture.TestRuleConfiguration;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+
+import javax.sql.DataSource;
+import java.util.Collection;
+import java.util.Map;
public final class RuleConfigurationCheckerFixture implements
RuleConfigurationChecker<TestRuleConfiguration> {
@Override
- public void check(final String databaseName, final TestRuleConfiguration
config) {
+ public void check(final String databaseName, final TestRuleConfiguration
config, final Map<String, DataSource> dataSourceMap, final
Collection<ShardingSphereRule> rules) {
}
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
index 39f71dc5522..04b23a596ed 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
@@ -21,7 +21,6 @@ import
org.apache.shardingsphere.driver.jdbc.adapter.AbstractDataSourceAdapter;
import org.apache.shardingsphere.driver.jdbc.context.JDBCContext;
import org.apache.shardingsphere.driver.state.DriverStateContext;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import
org.apache.shardingsphere.infra.config.checker.RuleConfigurationCheckerFactory;
import
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.scope.GlobalRuleConfiguration;
@@ -61,17 +60,11 @@ public final class ShardingSphereDataSource extends
AbstractDataSourceAdapter im
public ShardingSphereDataSource(final String databaseName, final
ModeConfiguration modeConfig, final Map<String, DataSource> dataSourceMap,
final Collection<RuleConfiguration>
ruleConfigs, final Properties props) throws SQLException {
- checkRuleConfiguration(databaseName, ruleConfigs);
this.databaseName = databaseName;
contextManager = createContextManager(databaseName, modeConfig,
dataSourceMap, ruleConfigs, null == props ? new Properties() : props);
jdbcContext = new
JDBCContext(contextManager.getDataSourceMap(databaseName));
}
- @SuppressWarnings("unchecked")
- private void checkRuleConfiguration(final String databaseName, final
Collection<RuleConfiguration> ruleConfigs) {
- ruleConfigs.forEach(each ->
RuleConfigurationCheckerFactory.findInstance(each).ifPresent(optional ->
optional.check(databaseName, each)));
- }
-
private ContextManager createContextManager(final String databaseName,
final ModeConfiguration modeConfig, final Map<String, DataSource> dataSourceMap,
final
Collection<RuleConfiguration> ruleConfigs, final Properties props) throws
SQLException {
InstanceMetaData instanceMetaData =
InstanceMetaDataBuilderFactory.create("JDBC", -1);
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
index a9ae7026c06..86446c7e915 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
@@ -138,12 +138,12 @@ public class SpringBootStarterTest {
}
private void assertReadwriteSplittingRule(final ReadwriteSplittingRule
actual) {
- assertThat(actual.getDataSourceMapper(),
is(Collections.singletonMap("readwrite_ds", Arrays.asList("write_ds",
"read_ds_0", "read_ds_1"))));
+ assertThat(actual.getDataSourceMapper(),
is(Collections.singletonMap("readwrite_ds", Arrays.asList("write_ds", "ds0",
"ds1"))));
ReadwriteSplittingDataSourceRule dataSourceRule =
actual.getSingleDataSourceRule();
assertThat(dataSourceRule.getName(), is("readwrite_ds"));
StaticReadwriteSplittingStrategy staticReadwriteSplittingType =
(StaticReadwriteSplittingStrategy)
dataSourceRule.getReadwriteSplittingStrategy();
assertThat(staticReadwriteSplittingType.getWriteDataSource(),
is("write_ds"));
- assertThat(staticReadwriteSplittingType.getReadDataSources(),
is(Arrays.asList("read_ds_0", "read_ds_1")));
+ assertThat(staticReadwriteSplittingType.getReadDataSources(),
is(Arrays.asList("ds0", "ds1")));
assertThat(dataSourceRule.getLoadBalancer(),
instanceOf(RandomReadQueryLoadBalanceAlgorithm.class));
}
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application.properties
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application.properties
index e31ac8b356e..f6dcc0e00cd 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application.properties
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/resources/application.properties
@@ -25,7 +25,7 @@
spring.shardingsphere.datasource.ds1.type=org.apache.shardingsphere.test.mock.Mo
spring.shardingsphere.rules.readwrite-splitting.load-balancers.random.type=RANDOM
spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.write-data-source-name=write_ds
-spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.read-data-source-names=read_ds_0,read_ds_1
+spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.static-strategy.read-data-source-names=ds0,ds1
spring.shardingsphere.rules.readwrite-splitting.data-sources.readwrite_ds.load-balancer-name=random
spring.shardingsphere.rules.sharding.sharding-algorithms.databaseShardingAlgorithm.type=INLINE
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/BootstrapInitializer.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/BootstrapInitializer.java
index e4317feca1a..dda3d0e5fad 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/BootstrapInitializer.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/main/java/org/apache/shardingsphere/proxy/initializer/BootstrapInitializer.java
@@ -19,8 +19,6 @@ package org.apache.shardingsphere.proxy.initializer;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import
org.apache.shardingsphere.infra.config.checker.RuleConfigurationCheckerFactory;
-import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
@@ -38,7 +36,6 @@ import
org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.version.ShardingSphereProxyVersion;
import java.sql.SQLException;
-import java.util.Map.Entry;
/**
* Bootstrap initializer.
@@ -57,20 +54,12 @@ public final class BootstrapInitializer {
public void init(final YamlProxyConfiguration yamlConfig, final int port)
throws SQLException {
ModeConfiguration modeConfig = null ==
yamlConfig.getServerConfiguration().getMode() ? null : new
ModeConfigurationYamlSwapper().swapToObject(yamlConfig.getServerConfiguration().getMode());
ProxyConfiguration proxyConfig = new
YamlProxyConfigurationSwapper().swap(yamlConfig);
- checkRuleConfiguration(proxyConfig);
ContextManager contextManager = createContextManager(proxyConfig,
modeConfig, port);
ProxyContext.init(contextManager);
contextManagerInitializedCallback(modeConfig, contextManager);
ShardingSphereProxyVersion.setVersion(contextManager);
}
- @SuppressWarnings("unchecked")
- private void checkRuleConfiguration(final ProxyConfiguration proxyConfig) {
- for (Entry<String, DatabaseConfiguration> entry :
proxyConfig.getDatabaseConfigurations().entrySet()) {
- entry.getValue().getRuleConfigurations().forEach(each ->
RuleConfigurationCheckerFactory.findInstance(each).ifPresent(optional ->
optional.check(entry.getKey(), each)));
- }
- }
-
private ContextManager createContextManager(final ProxyConfiguration
proxyConfig, final ModeConfiguration modeConfig, final int port) throws
SQLException {
ContextManagerBuilderParameter parameter = new
ContextManagerBuilderParameter(modeConfig,
proxyConfig.getDatabaseConfigurations(),
proxyConfig.getGlobalConfiguration().getRules(),
proxyConfig.getGlobalConfiguration().getProperties(),
proxyConfig.getGlobalConfiguration().getLabels(),
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/RuleConfigurationFixtureChecker.java
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/RuleConfigurationFixtureChecker.java
index b2385bc4320..e6f729b0207 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/RuleConfigurationFixtureChecker.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-bootstrap/src/test/java/org/apache/shardingsphere/proxy/fixture/RuleConfigurationFixtureChecker.java
@@ -18,11 +18,17 @@
package org.apache.shardingsphere.proxy.fixture;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+
+import javax.sql.DataSource;
+import java.util.Collection;
+import java.util.Map;
public final class RuleConfigurationFixtureChecker implements
RuleConfigurationChecker<RuleConfigurationFixture> {
@Override
- public void check(final String databaseName, final
RuleConfigurationFixture config) {
+ public void check(final String databaseName, final
RuleConfigurationFixture config,
+ final Map<String, DataSource> dataSourceMap, final
Collection<ShardingSphereRule> rules) {
}
@Override
diff --git
a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/java/org/apache/shardingsphere/driver/fixture/TestRuleConfigurationChecker.java
b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/java/org/apache/shardingsphere/driver/fixture/TestRuleConfigurationChecker.java
index ee10ff6a547..f320e56619f 100644
---
a/shardingsphere-test/shardingsphere-integration-driver-test/src/test/java/org/apache/shardingsphere/driver/fixture/TestRuleConfigurationChecker.java
+++
b/shardingsphere-test/shardingsphere-integration-driver-test/src/test/java/org/apache/shardingsphere/driver/fixture/TestRuleConfigurationChecker.java
@@ -18,11 +18,16 @@
package org.apache.shardingsphere.driver.fixture;
import org.apache.shardingsphere.infra.config.checker.RuleConfigurationChecker;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+
+import javax.sql.DataSource;
+import java.util.Collection;
+import java.util.Map;
public final class TestRuleConfigurationChecker implements
RuleConfigurationChecker<TestRuleConfiguration> {
@Override
- public void check(final String databaseName, final TestRuleConfiguration
config) {
+ public void check(final String databaseName, final TestRuleConfiguration
config, final Map<String, DataSource> dataSourceMap, final
Collection<ShardingSphereRule> rules) {
}
@Override