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 <[email protected]>
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));
}
}