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));
     }
 }