This is an automated email from the ASF dual-hosted git repository. zhangliang 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 402398ffd9d Refactor DatabaseRulesBuilder (#34546) 402398ffd9d is described below commit 402398ffd9df3c55ac1361a9b350b7ff22960c73 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sat Feb 1 12:30:43 2025 +0800 Refactor DatabaseRulesBuilder (#34546) --- .../builder/database/DatabaseRulesBuilder.java | 23 +++++++++------------- .../manager/DatabaseRuleConfigurationManager.java | 18 +++++++---------- 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java index 11e8e948789..8a614a452f0 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java @@ -72,7 +72,7 @@ public final class DatabaseRulesBuilder { } /** - * Build database rules. + * Build database rule. * * @param databaseName database name * @param protocolType protocol type @@ -80,22 +80,17 @@ public final class DatabaseRulesBuilder { * @param ruleConfig rule configuration * @param computeNodeInstanceContext compute node instance context * @param resourceMetaData resource meta data - * @return built rules + * @return built rule */ @SuppressWarnings({"unchecked", "rawtypes"}) - public static Collection<ShardingSphereRule> build(final String databaseName, final DatabaseType protocolType, final Collection<ShardingSphereRule> rules, final RuleConfiguration ruleConfig, - final ComputeNodeInstanceContext computeNodeInstanceContext, final ResourceMetaData resourceMetaData) { - Collection<ShardingSphereRule> result = new LinkedList<>(); - for (Entry<RuleConfiguration, DatabaseRuleBuilder> entry : OrderedSPILoader.getServices(DatabaseRuleBuilder.class, - Collections.singletonList(ruleConfig), Comparator.reverseOrder()).entrySet()) { - RuleConfigurationChecker configChecker = OrderedSPILoader.getServicesByClass( - RuleConfigurationChecker.class, Collections.singleton(entry.getKey().getClass())).get(entry.getKey().getClass()); - if (null != configChecker) { - configChecker.check(databaseName, entry.getKey(), resourceMetaData.getDataSourceMap(), rules); - } - result.add(entry.getValue().build(entry.getKey(), databaseName, protocolType, resourceMetaData, rules, computeNodeInstanceContext)); + public static ShardingSphereRule build(final String databaseName, final DatabaseType protocolType, final Collection<ShardingSphereRule> rules, final RuleConfiguration ruleConfig, + final ComputeNodeInstanceContext computeNodeInstanceContext, final ResourceMetaData resourceMetaData) { + DatabaseRuleBuilder databaseRuleBuilder = OrderedSPILoader.getServices(DatabaseRuleBuilder.class, Collections.singleton(ruleConfig)).get(ruleConfig); + RuleConfigurationChecker configChecker = OrderedSPILoader.getServicesByClass(RuleConfigurationChecker.class, Collections.singleton(ruleConfig.getClass())).get(ruleConfig.getClass()); + if (null != configChecker) { + configChecker.check(databaseName, ruleConfig, resourceMetaData.getDataSourceMap(), rules); } - return result; + return databaseRuleBuilder.build(ruleConfig, databaseName, protocolType, resourceMetaData, rules, computeNodeInstanceContext); } @SuppressWarnings("rawtypes") diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java index bbc6040c32b..8c252fd25e5 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java @@ -66,9 +66,8 @@ public final class DatabaseRuleConfigurationManager { return; } rules.removeIf(each -> each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass())); - rules.addAll(DatabaseRulesBuilder.build( - databaseName, database.getProtocolType(), database.getRuleMetaData().getRules(), ruleConfig, computeNodeInstanceContext, database.getResourceMetaData())); - refreshMetadata(databaseName, getRuleConfigurations(rules)); + rules.add(DatabaseRulesBuilder.build(databaseName, database.getProtocolType(), database.getRuleMetaData().getRules(), ruleConfig, computeNodeInstanceContext, database.getResourceMetaData())); + refreshMetadata(databaseName, rules); } /** @@ -89,17 +88,14 @@ public final class DatabaseRuleConfigurationManager { } rules.removeIf(each -> each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass())); if (!TypedSPILoader.getService(DatabaseRuleConfigurationEmptyChecker.class, ruleConfig.getClass()).isEmpty((DatabaseRuleConfiguration) ruleConfig)) { - rules.addAll(DatabaseRulesBuilder.build( + rules.add(DatabaseRulesBuilder.build( databaseName, database.getProtocolType(), database.getRuleMetaData().getRules(), ruleConfig, computeNodeInstanceContext, database.getResourceMetaData())); } - refreshMetadata(databaseName, getRuleConfigurations(rules)); + refreshMetadata(databaseName, rules); } - private void refreshMetadata(final String databaseName, final Collection<RuleConfiguration> ruleConfigurations) throws SQLException { - metaDataContexts.update(new MetaDataContextsFactory(metaDataPersistFacade, computeNodeInstanceContext).createByAlterRule(databaseName, false, ruleConfigurations, metaDataContexts)); - } - - private Collection<RuleConfiguration> getRuleConfigurations(final Collection<ShardingSphereRule> rules) { - return rules.stream().map(ShardingSphereRule::getConfiguration).collect(Collectors.toList()); + private void refreshMetadata(final String databaseName, final Collection<ShardingSphereRule> rules) throws SQLException { + Collection<RuleConfiguration> ruleConfigs = rules.stream().map(ShardingSphereRule::getConfiguration).collect(Collectors.toList()); + metaDataContexts.update(new MetaDataContextsFactory(metaDataPersistFacade, computeNodeInstanceContext).createByAlterRule(databaseName, false, ruleConfigs, metaDataContexts)); } }