Skip to content

Commit

Permalink
Refactor DatabaseRulesBuilder
Browse files Browse the repository at this point in the history
  • Loading branch information
terrymanu committed Feb 1, 2025
1 parent fac91db commit d47e4bd
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -72,30 +72,25 @@ public static Collection<ShardingSphereRule> build(final String databaseName, fi
}

/**
* Build database rules.
* Build database rule.
*
* @param databaseName database name
* @param protocolType protocol type
* @param rules rules
* @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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

/**
Expand All @@ -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<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));
}
}

0 comments on commit d47e4bd

Please sign in to comment.