This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 113810c2e40 Aggregation switch global rule and props active versions 
(#31040)
113810c2e40 is described below

commit 113810c2e40c45c90fe619cf2008a28bec571bda
Author: zhaojinchao <[email protected]>
AuthorDate: Sun Apr 28 11:11:51 2024 +0800

    Aggregation switch global rule and props active versions (#31040)
    
    * Aggregation switch global rule and props active versions
    
    * Fix ci
---
 .../metadata/persist/MetaDataPersistService.java   |  4 ++--
 .../config/global/GlobalPersistService.java        | 11 ---------
 .../config/global/GlobalRulePersistService.java    | 27 ++++++++--------------
 .../config/global/PropertiesPersistService.java    | 22 +++++-------------
 .../manager/cluster/ClusterModeContextManager.java |  8 ++-----
 .../standalone/StandaloneModeContextManager.java   | 10 ++------
 .../ral/updatable/SetDistVariableExecutorTest.java |  7 +++++-
 7 files changed, 27 insertions(+), 62 deletions(-)

diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
index 6553944e7d4..6655c5d924e 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
@@ -77,8 +77,8 @@ public final class MetaDataPersistService implements 
MetaDataBasedPersistService
         dataSourceNodeService = new DataSourceNodePersistService(repository);
         databaseMetaDataService = new 
DatabaseMetaDataPersistService(repository, metaDataVersionPersistService);
         databaseRulePersistService = new 
DatabaseRulePersistService(repository);
-        globalRuleService = new GlobalRulePersistService(repository);
-        propsService = new PropertiesPersistService(repository);
+        globalRuleService = new GlobalRulePersistService(repository, 
metaDataVersionPersistService);
+        propsService = new PropertiesPersistService(repository, 
metaDataVersionPersistService);
         shardingSphereDataPersistService = new 
ShardingSphereDataPersistService(repository);
     }
     
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
index e12eed6107c..fbe10f83ab2 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalPersistService.java
@@ -18,9 +18,6 @@
 package org.apache.shardingsphere.metadata.persist.service.config.global;
 
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
-
-import java.util.Collection;
 
 /**
  * Global persist service.
@@ -36,14 +33,6 @@ public interface GlobalPersistService<T> {
      */
     void persist(T globalRuleConfigs);
     
-    /**
-     * Persist configurations.
-     *
-     * @param globalRuleConfigs global configurations
-     * @return meta data versions
-     */
-    Collection<MetaDataVersion> persistConfigurations(T globalRuleConfigs);
-    
     /**
      * Load configurations.
      *
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
index fcd68699859..aae50b2ab20 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/GlobalRulePersistService.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlDataNodeGlob
 import 
org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlDataNodeGlobalRuleConfigurationSwapperEngine;
 import org.apache.shardingsphere.metadata.persist.node.GlobalNode;
 import 
org.apache.shardingsphere.metadata.persist.service.config.RepositoryTuplePersistService;
+import 
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 
 import java.util.Collection;
@@ -42,37 +43,28 @@ public final class GlobalRulePersistService implements 
GlobalPersistService<Coll
     
     private final PersistRepository repository;
     
+    private final MetaDataVersionPersistService metaDataVersionPersistService;
+    
     private final RepositoryTuplePersistService repositoryTuplePersistService;
     
-    public GlobalRulePersistService(final PersistRepository repository) {
+    public GlobalRulePersistService(final PersistRepository repository, final 
MetaDataVersionPersistService metaDataVersionPersistService) {
         this.repository = repository;
+        this.metaDataVersionPersistService = metaDataVersionPersistService;
         repositoryTuplePersistService = new 
RepositoryTuplePersistService(repository);
     }
     
     @SuppressWarnings({"unchecked", "rawtypes"})
     @Override
     public void persist(final Collection<RuleConfiguration> globalRuleConfigs) 
{
+        Collection<MetaDataVersion> metaDataVersions = new LinkedList<>();
         for (Entry<RuleConfiguration, 
YamlDataNodeGlobalRuleConfigurationSwapper> entry : new 
YamlDataNodeGlobalRuleConfigurationSwapperEngine()
                 .swapToYamlRuleConfigurations(globalRuleConfigs).entrySet()) {
             Collection<RepositoryTuple> repositoryTuples = 
entry.getValue().swapToRepositoryTuples(entry.getKey());
             if (!repositoryTuples.isEmpty()) {
-                persistTuples(repositoryTuples);
+                metaDataVersions.addAll(persistTuples(repositoryTuples));
             }
         }
-    }
-    
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    @Override
-    public Collection<MetaDataVersion> persistConfigurations(final 
Collection<RuleConfiguration> globalRuleConfigs) {
-        Collection<MetaDataVersion> result = new LinkedList<>();
-        for (Entry<RuleConfiguration, 
YamlDataNodeGlobalRuleConfigurationSwapper> entry : new 
YamlDataNodeGlobalRuleConfigurationSwapperEngine()
-                .swapToYamlRuleConfigurations(globalRuleConfigs).entrySet()) {
-            Collection<RepositoryTuple> repositoryTuples = 
entry.getValue().swapToRepositoryTuples(entry.getKey());
-            if (!repositoryTuples.isEmpty()) {
-                result.addAll(persistTuples(repositoryTuples));
-            }
-        }
-        return result;
+        metaDataVersionPersistService.switchActiveVersion(metaDataVersions);
     }
     
     private Collection<MetaDataVersion> persistTuples(final 
Collection<RepositoryTuple> repositoryTuples) {
@@ -80,8 +72,7 @@ public final class GlobalRulePersistService implements 
GlobalPersistService<Coll
         for (RepositoryTuple each : repositoryTuples) {
             List<String> versions = 
repository.getChildrenKeys(GlobalNode.getGlobalRuleVersionsNode(each.getKey()));
             String nextActiveVersion = versions.isEmpty() ? DEFAULT_VERSION : 
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
-            String persistKey = 
GlobalNode.getGlobalRuleVersionNode(each.getKey(), nextActiveVersion);
-            repository.persist(persistKey, each.getValue());
+            
repository.persist(GlobalNode.getGlobalRuleVersionNode(each.getKey(), 
nextActiveVersion), each.getValue());
             if 
(Strings.isNullOrEmpty(repository.getDirectly(GlobalNode.getGlobalRuleActiveVersionNode(each.getKey()))))
 {
                 
repository.persist(GlobalNode.getGlobalRuleActiveVersionNode(each.getKey()), 
DEFAULT_VERSION);
             }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
index 3a37ec786f0..e38cf6c3fbf 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/config/global/PropertiesPersistService.java
@@ -22,9 +22,9 @@ import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import org.apache.shardingsphere.metadata.persist.node.GlobalNode;
+import 
org.apache.shardingsphere.metadata.persist.service.version.MetaDataVersionPersistService;
 import org.apache.shardingsphere.mode.spi.PersistRepository;
 
-import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Properties;
@@ -39,28 +39,18 @@ public final class PropertiesPersistService implements 
GlobalPersistService<Prop
     
     private final PersistRepository repository;
     
-    @Override
-    public void persist(final Properties props) {
-        if (Strings.isNullOrEmpty(getActiveVersion())) {
-            repository.persist(GlobalNode.getPropsActiveVersionNode(), 
DEFAULT_VERSION);
-        }
-        List<String> versions = 
repository.getChildrenKeys(GlobalNode.getPropsVersionsNode());
-        repository.persist(GlobalNode.getPropsVersionNode(versions.isEmpty()
-                ? DEFAULT_VERSION
-                : String.valueOf(Integer.parseInt(versions.get(0)) + 1)), 
YamlEngine.marshal(props));
-        
-    }
+    private final MetaDataVersionPersistService metaDataVersionPersistService;
     
     @Override
-    public Collection<MetaDataVersion> persistConfigurations(final Properties 
props) {
+    public void persist(final Properties props) {
         List<String> versions = 
repository.getChildrenKeys(GlobalNode.getPropsVersionsNode());
         String nextActiveVersion = versions.isEmpty() ? DEFAULT_VERSION : 
String.valueOf(Integer.parseInt(versions.get(0)) + 1);
-        String persistKey = GlobalNode.getPropsVersionNode(nextActiveVersion);
-        repository.persist(persistKey, YamlEngine.marshal(props));
+        repository.persist(GlobalNode.getPropsVersionNode(nextActiveVersion), 
YamlEngine.marshal(props));
         if (Strings.isNullOrEmpty(getActiveVersion())) {
             repository.persist(GlobalNode.getPropsActiveVersionNode(), 
DEFAULT_VERSION);
         }
-        return Collections.singletonList(new 
MetaDataVersion(GlobalNode.getPropsRootNode(), getActiveVersion(), 
nextActiveVersion));
+        
metaDataVersionPersistService.switchActiveVersion(Collections.singletonList(new 
MetaDataVersion(GlobalNode.getPropsRootNode(),
+                getActiveVersion(), nextActiveVersion)));
     }
     
     @Override
diff --git 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
index c3d212582ee..80cfe7ebf0e 100644
--- 
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
+++ 
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManager.java
@@ -27,7 +27,6 @@ import 
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchema
 import 
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
 import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import 
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseBasedPersistService;
-import 
org.apache.shardingsphere.metadata.persist.service.config.global.GlobalPersistService;
 import 
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataBasedPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.manager.ContextManagerAware;
@@ -148,15 +147,12 @@ public final class ClusterModeContextManager implements 
ModeContextManager, Cont
     
     @Override
     public void alterGlobalRuleConfiguration(final RuleConfiguration 
toBeAlteredRuleConfig) {
-        GlobalPersistService<Collection<RuleConfiguration>> globalRuleService 
= 
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService();
-        
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService()
-                
.switchActiveVersion(globalRuleService.persistConfigurations(Collections.singleton(toBeAlteredRuleConfig)));
+        
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
     }
     
     @Override
     public void alterProperties(final Properties props) {
-        Collection<MetaDataVersion> versions = 
contextManager.getMetaDataContexts().getPersistService().getPropsService().persistConfigurations(props);
-        
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(versions);
+        
contextManager.getMetaDataContexts().getPersistService().getPropsService().persist(props);
     }
     
     @Override
diff --git 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
index 7748699c0d5..41042cf9ee3 100644
--- 
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
+++ 
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneModeContextManager.java
@@ -35,7 +35,6 @@ import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
 import 
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType;
 import 
org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache;
 import 
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseBasedPersistService;
-import 
org.apache.shardingsphere.metadata.persist.service.config.global.GlobalPersistService;
 import 
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataBasedPersistService;
 import org.apache.shardingsphere.mode.event.DataChangedEvent;
 import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
@@ -305,19 +304,14 @@ public final class StandaloneModeContextManager 
implements ModeContextManager, C
     @Override
     public void alterGlobalRuleConfiguration(final RuleConfiguration 
toBeAlteredRuleConfig) {
         
contextManager.getConfigurationContextManager().alterGlobalRuleConfiguration(toBeAlteredRuleConfig);
-        GlobalPersistService<Collection<RuleConfiguration>> globalRuleService 
= 
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService();
-        
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService()
-                
.switchActiveVersion(globalRuleService.persistConfigurations(Collections.singleton(toBeAlteredRuleConfig)));
+        
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
         clearServiceCache();
     }
     
     @Override
     public void alterProperties(final Properties props) {
         contextManager.getConfigurationContextManager().alterProperties(props);
-        if (null != 
contextManager.getMetaDataContexts().getPersistService().getPropsService()) {
-            Collection<MetaDataVersion> versions = 
contextManager.getMetaDataContexts().getPersistService().getPropsService().persistConfigurations(props);
-            
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(versions);
-        }
+        
contextManager.getMetaDataContexts().getPersistService().getPropsService().persist(props);
         clearServiceCache();
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
index 71d990eab4f..c3ec0c8322e 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/SetDistVariableExecutorTest.java
@@ -30,6 +30,7 @@ import org.apache.shardingsphere.infra.lock.LockContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
+import 
org.apache.shardingsphere.metadata.persist.service.config.global.PropertiesPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.mode.manager.standalone.StandaloneModeContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
@@ -48,6 +49,8 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 
 @ExtendWith(AutoMockExtension.class)
 @StaticMockSettings(ProxyContext.class)
@@ -103,8 +106,10 @@ class SetDistVariableExecutorTest {
     }
     
     private ContextManager mockContextManager() {
+        MetaDataPersistService metaDataPersistService = 
mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS);
+        
when(metaDataPersistService.getPropsService()).thenReturn(mock(PropertiesPersistService.class));
         StandaloneModeContextManager standaloneModeContextManager = new 
StandaloneModeContextManager();
-        ContextManager result = new ContextManager(new 
MetaDataContexts(mock(MetaDataPersistService.class), new 
ShardingSphereMetaData()),
+        ContextManager result = new ContextManager(new 
MetaDataContexts(metaDataPersistService, new ShardingSphereMetaData()),
                 new InstanceContext(new 
ComputeNodeInstance(mock(InstanceMetaData.class)), 
mock(WorkerIdGenerator.class),
                         new ModeConfiguration("Standalone", null), 
standaloneModeContextManager, mock(LockContext.class), new EventBusContext()));
         standaloneModeContextManager.setContextManagerAware(result);

Reply via email to