You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/06/20 07:58:11 UTC
[shardingsphere] branch master updated: Refactor AlterTransactionRuleHandler (#18447)
This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 46db40693db Refactor AlterTransactionRuleHandler (#18447)
46db40693db is described below
commit 46db40693db87c4e054ff4d87a7a6e9f47a13fa8
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Mon Jun 20 15:58:05 2022 +0800
Refactor AlterTransactionRuleHandler (#18447)
---
.../updatable/AlterSQLParserRuleHandler.java | 17 ++++----
.../updatable/AlterTransactionRuleHandler.java | 45 ++++++++++++----------
2 files changed, 35 insertions(+), 27 deletions(-)
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandler.java
index c5eee413480..62844a77ae1 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterSQLParserRuleHandler.java
@@ -37,10 +37,19 @@ public final class AlterSQLParserRuleHandler extends UpdatableRALBackendHandler<
@Override
protected void update(final ContextManager contextManager) {
- replaceSQLParserRule(createToBeAlteredRuleConfiguration());
+ replaceNewRule(contextManager, createToBeAlteredRuleConfiguration());
persistNewRuleConfigurations();
}
+ private void replaceNewRule(final ContextManager contextManager, final SQLParserRuleConfiguration toBeAlteredRuleConfig) {
+ Collection<ShardingSphereRule> globalRules = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules();
+ globalRules.removeIf(each -> each instanceof SQLParserRule);
+ globalRules.add(new SQLParserRule(toBeAlteredRuleConfig));
+ // TODO remove me after ShardingSphereRuleMetaData.configuration removed
+ contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations().removeIf(each -> each instanceof SQLParserRuleConfiguration);
+ contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations().add(toBeAlteredRuleConfig);
+ }
+
private SQLParserRuleConfiguration createToBeAlteredRuleConfiguration() {
AlterSQLParserRuleStatement sqlStatement = getSqlStatement();
SQLParserRuleConfiguration currentConfig = ProxyContext
@@ -59,12 +68,6 @@ public final class AlterSQLParserRuleHandler extends UpdatableRALBackendHandler<
return new CacheOption(initialCapacity, maximumSize);
}
- private void replaceSQLParserRule(final SQLParserRuleConfiguration toBeAlteredRuleConfig) {
- Collection<ShardingSphereRule> globalRules = ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules();
- globalRules.removeIf(each -> each instanceof SQLParserRule);
- globalRules.add(new SQLParserRule(toBeAlteredRuleConfig));
- }
-
private void persistNewRuleConfigurations() {
MetaDataContexts metaDataContexts = ProxyContext.getInstance().getContextManager().getMetaDataContexts();
metaDataContexts.getPersistService().ifPresent(optional -> optional.getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(), true));
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterTransactionRuleHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterTransactionRuleHandler.java
index efd78b560d2..a2a9837286e 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterTransactionRuleHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/common/updatable/AlterTransactionRuleHandler.java
@@ -18,18 +18,17 @@
package org.apache.shardingsphere.proxy.backend.text.distsql.ral.common.updatable;
import org.apache.shardingsphere.distsql.parser.statement.ral.common.updatable.AlterTransactionRuleStatement;
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.text.distsql.ral.UpdatableRALBackendHandler;
import org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration;
import org.apache.shardingsphere.transaction.rule.TransactionRule;
import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Optional;
+import java.util.Map;
/**
* Alter transaction rule statement handler.
@@ -38,25 +37,31 @@ public final class AlterTransactionRuleHandler extends UpdatableRALBackendHandle
@Override
protected void update(final ContextManager contextManager) {
- ShardingSphereRuleMetaData globalRuleMetaData = contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData();
- Collection<ShardingSphereRule> globalRules = globalRuleMetaData.getRules();
+ replaceNewRule(contextManager, createToBeAlteredRuleConfiguration());
+ persistNewRuleConfigurations();
+ }
+
+ private void replaceNewRule(final ContextManager contextManager, final TransactionRuleConfiguration toBeAlteredRuleConfig) {
+ Collection<ShardingSphereRule> globalRules = contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules();
globalRules.removeIf(each -> each instanceof TransactionRule);
- Collection<RuleConfiguration> globalRuleConfigs = new LinkedList<>(globalRuleMetaData.getConfigurations());
- globalRuleConfigs.removeIf(each -> each instanceof TransactionRuleConfiguration);
- TransactionRuleConfiguration toBeAlteredRuleConfig = buildTransactionRuleConfiguration();
- globalRules.add(new TransactionRule(toBeAlteredRuleConfig, contextManager.getMetaDataContexts().getMetaData().getDatabases()));
- globalRuleConfigs.add(toBeAlteredRuleConfig);
- TransactionRule transactionRule = contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(TransactionRule.class);
+ Map<String, ShardingSphereDatabase> databases = contextManager.getMetaDataContexts().getMetaData().getDatabases();
+ TransactionRule transactionRule = new TransactionRule(toBeAlteredRuleConfig, databases);
for (String each : transactionRule.getResources().keySet()) {
- transactionRule.addResource(contextManager.getMetaDataContexts().getMetaData().getDatabases().get(each));
- }
- Optional<MetaDataPersistService> metaDataPersistService = contextManager.getMetaDataContexts().getPersistService();
- if (metaDataPersistService.isPresent() && null != metaDataPersistService.get().getGlobalRuleService()) {
- metaDataPersistService.get().getGlobalRuleService().persist(globalRuleConfigs, true);
+ transactionRule.addResource(databases.get(each));
}
+ globalRules.add(transactionRule);
+ // TODO remove me after ShardingSphereRuleMetaData.configuration removed
+ contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations().removeIf(each -> each instanceof TransactionRuleConfiguration);
+ contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations().add(toBeAlteredRuleConfig);
+ }
+
+ private TransactionRuleConfiguration createToBeAlteredRuleConfiguration() {
+ AlterTransactionRuleStatement sqlStatement = getSqlStatement();
+ return new TransactionRuleConfiguration(sqlStatement.getDefaultType(), sqlStatement.getProvider().getProviderType(), sqlStatement.getProvider().getProps());
}
- private TransactionRuleConfiguration buildTransactionRuleConfiguration() {
- return new TransactionRuleConfiguration(getSqlStatement().getDefaultType(), getSqlStatement().getProvider().getProviderType(), getSqlStatement().getProvider().getProps());
+ private void persistNewRuleConfigurations() {
+ MetaDataContexts metaDataContexts = ProxyContext.getInstance().getContextManager().getMetaDataContexts();
+ metaDataContexts.getPersistService().ifPresent(optional -> optional.getGlobalRuleService().persist(metaDataContexts.getMetaData().getGlobalRuleMetaData().getConfigurations(), true));
}
}