From d47e4bdcf70bdefec9a3f876f52a2f72a0ace492 Mon Sep 17 00:00:00 2001 From: zhangliang Date: Sat, 1 Feb 2025 12:24:26 +0800 Subject: [PATCH] Refactor DatabaseRulesBuilder --- .../database/DatabaseRulesBuilder.java | 23 ++++++++----------- .../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 11e8e9487896d..8a614a452f0b3 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 static Collection build(final String databaseName, fi } /** - * Build database rules. + * Build database rule. * * @param databaseName database name * @param protocolType protocol type @@ -80,22 +80,17 @@ public static Collection build(final String databaseName, fi * @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 build(final String databaseName, final DatabaseType protocolType, final Collection rules, final RuleConfiguration ruleConfig, - final ComputeNodeInstanceContext computeNodeInstanceContext, final ResourceMetaData resourceMetaData) { - Collection result = new LinkedList<>(); - for (Entry 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 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 bbc6040c32b67..8c252fd25e5b5 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 synchronized void alterRuleConfiguration(final String databaseName, final 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 synchronized void dropRuleConfiguration(final String databaseName, final } 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 ruleConfigurations) throws SQLException { - metaDataContexts.update(new MetaDataContextsFactory(metaDataPersistFacade, computeNodeInstanceContext).createByAlterRule(databaseName, false, ruleConfigurations, metaDataContexts)); - } - - private Collection getRuleConfigurations(final Collection rules) { - return rules.stream().map(ShardingSphereRule::getConfiguration).collect(Collectors.toList()); + private void refreshMetadata(final String databaseName, final Collection rules) throws SQLException { + Collection ruleConfigs = rules.stream().map(ShardingSphereRule::getConfiguration).collect(Collectors.toList()); + metaDataContexts.update(new MetaDataContextsFactory(metaDataPersistFacade, computeNodeInstanceContext).createByAlterRule(databaseName, false, ruleConfigs, metaDataContexts)); } }