This is an automated email from the ASF dual-hosted git repository. wuweijie 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 97cb498c2fc Refactor ShadowRuleConfigurationChecker (#30662) 97cb498c2fc is described below commit 97cb498c2fccb57882cad440688f343885c52f0d Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Tue Mar 26 23:44:44 2024 +0800 Refactor ShadowRuleConfigurationChecker (#30662) --- .../checker/ShadowRuleConfigurationChecker.java | 65 +++++++++------------- 1 file changed, 25 insertions(+), 40 deletions(-) diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/checker/ShadowRuleConfigurationChecker.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/checker/ShadowRuleConfigurationChecker.java index cda7406e9c6..0b2dde8770e 100644 --- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/checker/ShadowRuleConfigurationChecker.java +++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/checker/ShadowRuleConfigurationChecker.java @@ -35,11 +35,9 @@ import org.apache.shardingsphere.shadow.spi.ShadowAlgorithm; import javax.sql.DataSource; import java.util.Collection; -import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; +import java.util.stream.Collectors; /** * Shadow rule configuration checker. @@ -48,42 +46,37 @@ public final class ShadowRuleConfigurationChecker implements RuleConfigurationCh @Override public void check(final String databaseName, final ShadowRuleConfiguration ruleConfig, final Map<String, DataSource> dataSourceMap, final Collection<ShardingSphereRule> builtRules) { - checkShadowAlgorithms(ruleConfig); - Map<String, ShadowDataSourceConfiguration> dataSources = initShadowDataSources(ruleConfig.getDataSources()); - checkDataSources(dataSources, dataSourceMap, databaseName); - Map<String, ShadowTableConfiguration> shadowTables = ruleConfig.getTables(); - checkShadowTableDataSourcesAutoReferences(shadowTables, dataSources); - checkShadowTableDataSourcesReferences(shadowTables, dataSources); - Map<String, AlgorithmConfiguration> shadowAlgorithmConfigs = ruleConfig.getShadowAlgorithms(); - String defaultShadowAlgorithmName = ruleConfig.getDefaultShadowAlgorithmName(); - checkDefaultShadowAlgorithmConfiguration(defaultShadowAlgorithmName, shadowAlgorithmConfigs); - checkShadowTableAlgorithmsAutoReferences(shadowTables, shadowAlgorithmConfigs.keySet(), defaultShadowAlgorithmName); - checkShadowTableAlgorithmsReferences(shadowTables, databaseName); + checkShadowAlgorithms(ruleConfig.getShadowAlgorithms()); + checkDefaultShadowAlgorithmConfiguration(ruleConfig.getDefaultShadowAlgorithmName(), ruleConfig.getShadowAlgorithms()); + checkDataSources(ruleConfig.getDataSources(), dataSourceMap, databaseName); + checkShadowTableDataSourcesAutoReferences(ruleConfig.getTables(), ruleConfig.getDataSources()); + checkShadowTableDataSourcesReferences(ruleConfig.getTables(), ruleConfig.getDataSources()); + checkShadowTableAlgorithmsAutoReferences(ruleConfig.getTables(), ruleConfig.getShadowAlgorithms(), ruleConfig.getDefaultShadowAlgorithmName()); + checkShadowTableAlgorithmsReferences(ruleConfig.getTables(), databaseName); } - private void checkShadowAlgorithms(final ShadowRuleConfiguration ruleConfig) { - ruleConfig.getShadowAlgorithms().values().forEach(each -> TypedSPILoader.checkService(ShadowAlgorithm.class, each.getType(), each.getProps())); + private void checkShadowAlgorithms(final Map<String, AlgorithmConfiguration> shadowAlgorithmConfigs) { + shadowAlgorithmConfigs.values().forEach(each -> TypedSPILoader.checkService(ShadowAlgorithm.class, each.getType(), each.getProps())); } - private void checkDataSources(final Map<String, ShadowDataSourceConfiguration> shadowDataSources, final Map<String, DataSource> dataSourceMap, final String databaseName) { - Set<String> dataSourceName = dataSourceMap.keySet(); - for (Entry<String, ShadowDataSourceConfiguration> entry : shadowDataSources.entrySet()) { - ShardingSpherePreconditions.checkState(dataSourceName.contains(entry.getValue().getProductionDataSourceName()), + private void checkDataSources(final Collection<ShadowDataSourceConfiguration> shadowDataSources, final Map<String, DataSource> dataSourceMap, final String databaseName) { + for (ShadowDataSourceConfiguration each : shadowDataSources) { + ShardingSpherePreconditions.checkState(dataSourceMap.containsKey(each.getProductionDataSourceName()), () -> new MissingRequiredShadowConfigurationException("ProductionDataSourceName", databaseName)); - ShardingSpherePreconditions.checkState(dataSourceName.contains(entry.getValue().getShadowDataSourceName()), + ShardingSpherePreconditions.checkState(dataSourceMap.containsKey(each.getShadowDataSourceName()), () -> new MissingRequiredShadowConfigurationException("ShadowDataSourceName", databaseName)); } } - private void checkShadowTableDataSourcesAutoReferences(final Map<String, ShadowTableConfiguration> shadowTables, final Map<String, ShadowDataSourceConfiguration> dataSources) { - if (1 == dataSources.size()) { - String dataSourceName = dataSources.keySet().iterator().next(); + private void checkShadowTableDataSourcesAutoReferences(final Map<String, ShadowTableConfiguration> shadowTables, final Collection<ShadowDataSourceConfiguration> shadowDataSources) { + if (1 == shadowDataSources.size()) { + String dataSourceName = shadowDataSources.iterator().next().getName(); shadowTables.values().stream().map(ShadowTableConfiguration::getDataSourceNames).filter(Collection::isEmpty).forEach(dataSourceNames -> dataSourceNames.add(dataSourceName)); } } - private void checkShadowTableDataSourcesReferences(final Map<String, ShadowTableConfiguration> shadowTables, final Map<String, ShadowDataSourceConfiguration> dataSources) { - Set<String> dataSourceNames = dataSources.keySet(); + private void checkShadowTableDataSourcesReferences(final Map<String, ShadowTableConfiguration> shadowTables, final Collection<ShadowDataSourceConfiguration> shadowDataSources) { + Collection<String> dataSourceNames = shadowDataSources.stream().map(ShadowDataSourceConfiguration::getName).collect(Collectors.toSet()); shadowTables.forEach((key, value) -> { for (String each : value.getDataSourceNames()) { ShardingSpherePreconditions.checkState(dataSourceNames.contains(each), () -> new ShadowDataSourceMappingNotFoundException(key)); @@ -94,15 +87,15 @@ public final class ShadowRuleConfigurationChecker implements RuleConfigurationCh private void checkDefaultShadowAlgorithmConfiguration(final String defaultShadowAlgorithmName, final Map<String, AlgorithmConfiguration> shadowAlgorithmConfigs) { if (null != defaultShadowAlgorithmName) { AlgorithmConfiguration algorithmConfig = shadowAlgorithmConfigs.get(defaultShadowAlgorithmName); - boolean state = null != algorithmConfig && "SQL_HINT".equals(algorithmConfig.getType()); - ShardingSpherePreconditions.checkState(state, NotImplementHintShadowAlgorithmException::new); + ShardingSpherePreconditions.checkState(null != algorithmConfig && "SQL_HINT".equals(algorithmConfig.getType()), NotImplementHintShadowAlgorithmException::new); } } - private void checkShadowTableAlgorithmsAutoReferences(final Map<String, ShadowTableConfiguration> shadowTables, final Set<String> shadowAlgorithmNames, final String defaultShadowAlgorithmName) { - for (Entry<String, ShadowTableConfiguration> entry : shadowTables.entrySet()) { - Collection<String> names = entry.getValue().getShadowAlgorithmNames(); - names.removeIf(next -> !shadowAlgorithmNames.contains(next)); + private void checkShadowTableAlgorithmsAutoReferences(final Map<String, ShadowTableConfiguration> shadowTables, + final Map<String, AlgorithmConfiguration> shadowAlgorithms, final String defaultShadowAlgorithmName) { + for (ShadowTableConfiguration each : shadowTables.values()) { + Collection<String> names = each.getShadowAlgorithmNames(); + names.removeIf(next -> !shadowAlgorithms.containsKey(next)); if (null != defaultShadowAlgorithmName && names.isEmpty()) { names.add(defaultShadowAlgorithmName); } @@ -114,14 +107,6 @@ public final class ShadowRuleConfigurationChecker implements RuleConfigurationCh () -> new EmptyAlgorithmException("Shadow", new SQLExceptionIdentifier(databaseName)))); } - private Map<String, ShadowDataSourceConfiguration> initShadowDataSources(final Collection<ShadowDataSourceConfiguration> dataSourceConfigs) { - Map<String, ShadowDataSourceConfiguration> result = new LinkedHashMap<>(); - for (ShadowDataSourceConfiguration each : dataSourceConfigs) { - result.put(each.getName(), each); - } - return result; - } - @Override public Collection<String> getRequiredDataSourceNames(final ShadowRuleConfiguration ruleConfig) { Collection<String> result = new LinkedHashSet<>();