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