This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 91b360c9110 Optimize close resource when rebuild global rule (#34896)
91b360c9110 is described below
commit 91b360c91106be67a423be4c09c5c239949e3bb5
Author: jiangML <[email protected]>
AuthorDate: Thu Mar 6 14:10:13 2025 +0800
Optimize close resource when rebuild global rule (#34896)
* Optimize close resource when rebuild global rule
* Optimize GlobalConfigurationManager
---
.../manager/rule/GlobalConfigurationManager.java | 26 ++++++++++------------
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/GlobalConfigurationManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/GlobalConfigurationManager.java
index 19e402c4321..cc3cf9210e5 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/GlobalConfigurationManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/rule/GlobalConfigurationManager.java
@@ -25,16 +25,11 @@ import
org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import
org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration;
-import
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade;
-import
org.apache.shardingsphere.mode.node.rule.tuple.annotation.RuleNodeTupleEntity;
-import org.apache.shardingsphere.transaction.rule.TransactionRule;
import java.util.Collection;
import java.util.LinkedList;
-import java.util.Objects;
import java.util.Properties;
/**
@@ -57,9 +52,7 @@ public final class GlobalConfigurationManager {
if (null == ruleConfig) {
return;
}
- closeStaleTransactionRule(ruleConfig);
- Collection<ShardingSphereRule> rules = new
LinkedList<>(metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules());
- rules.removeIf(each ->
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
+ Collection<ShardingSphereRule> rules = removeGlobalRule(ruleConfig,
metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules());
rules.addAll(GlobalRulesBuilder.buildSingleRules(ruleConfig,
metaDataContexts.getMetaData().getAllDatabases(),
metaDataContexts.getMetaData().getProps()));
metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules().clear();
metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules().addAll(rules);
@@ -67,14 +60,19 @@ public final class GlobalConfigurationManager {
metaDataContexts.getMetaData().getGlobalResourceMetaData(),
metaDataContexts.getMetaData().getGlobalRuleMetaData(),
metaDataContexts.getMetaData().getProps()), metaDataPersistFacade);
}
- // TODO Optimize string comparison rule type.
@SneakyThrows(Exception.class)
- private void closeStaleTransactionRule(final RuleConfiguration ruleConfig)
{
- YamlRuleConfiguration yamlRuleConfig = new
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(ruleConfig);
- if
(!"transaction".equals(Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RuleNodeTupleEntity.class)).value()))
{
- return;
+ private Collection<ShardingSphereRule> removeGlobalRule(final
RuleConfiguration ruleConfig, final Collection<ShardingSphereRule> rules) {
+ Collection<ShardingSphereRule> result = new LinkedList<>();
+ for (ShardingSphereRule each : rules) {
+ if
(!each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass())) {
+ result.add(each);
+ continue;
+ }
+ if (each instanceof AutoCloseable) {
+ ((AutoCloseable) each).close();
+ }
}
-
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(TransactionRule.class).ifPresent(TransactionRule::close);
+ return result;
}
/**