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

zhangliang 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 a49d446892b Refactor PropertiesPersistService (#34610)
a49d446892b is described below

commit a49d446892b894e39a73323ce29a1196b6c7b973
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Sat Feb 8 18:53:49 2025 +0800

    Refactor PropertiesPersistService (#34610)
---
 .../config/global/PropertiesPersistService.java    | 27 +++++++++-------------
 .../version/MetaDataVersionPersistService.java     | 14 +++++++++++
 .../global/PropertiesPersistServiceTest.java       |  3 +--
 ...tandaloneMetaDataManagerPersistServiceTest.java |  2 +-
 4 files changed, 27 insertions(+), 19 deletions(-)

diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
index 56fafd4dde7..3ce84fa012e 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistService.java
@@ -19,13 +19,12 @@ package 
org.apache.shardingsphere.mode.metadata.persist.config.global;
 
 import com.google.common.base.Strings;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import 
org.apache.shardingsphere.mode.metadata.persist.version.MetaDataVersionPersistService;
 import 
org.apache.shardingsphere.mode.node.path.config.GlobalPropertiesNodePath;
 import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
 
-import java.util.Collections;
+import java.util.Optional;
 import java.util.Properties;
 
 /**
@@ -44,9 +43,13 @@ public final class PropertiesPersistService {
      * @return properties
      */
     public Properties load() {
-        Integer activeVersion = getActiveVersion();
-        String yamlContent = 
repository.query(GlobalPropertiesNodePath.getVersionNodePathGenerator().getVersionPath(null
 == activeVersion ? 0 : activeVersion));
-        return Strings.isNullOrEmpty(yamlContent) ? new Properties() : 
YamlEngine.unmarshal(yamlContent, Properties.class);
+        return loadActiveVersion()
+                .map(optional -> 
YamlEngine.unmarshal(repository.query(GlobalPropertiesNodePath.getVersionNodePathGenerator().getVersionPath(optional)),
 Properties.class)).orElse(new Properties());
+    }
+    
+    private Optional<Integer> loadActiveVersion() {
+        String value = 
repository.query(GlobalPropertiesNodePath.getVersionNodePathGenerator().getActiveVersionPath());
+        return Strings.isNullOrEmpty(value) ? Optional.empty() : 
Optional.of(Integer.parseInt(value));
     }
     
     /**
@@ -55,16 +58,8 @@ public final class PropertiesPersistService {
      * @param props properties
      */
     public void persist(final Properties props) {
-        int nextActiveVersion = 
metaDataVersionPersistService.getNextVersion(GlobalPropertiesNodePath.getVersionNodePathGenerator().getVersionsPath());
-        
repository.persist(GlobalPropertiesNodePath.getVersionNodePathGenerator().getVersionPath(nextActiveVersion),
 YamlEngine.marshal(props));
-        if (null == getActiveVersion()) {
-            
repository.persist(GlobalPropertiesNodePath.getVersionNodePathGenerator().getActiveVersionPath(),
 String.valueOf(MetaDataVersion.INIT_VERSION));
-        }
-        
metaDataVersionPersistService.switchActiveVersion(Collections.singleton(new 
MetaDataVersion(GlobalPropertiesNodePath.getRootPath(), getActiveVersion(), 
nextActiveVersion)));
-    }
-    
-    private Integer getActiveVersion() {
-        String value = 
repository.query(GlobalPropertiesNodePath.getVersionNodePathGenerator().getActiveVersionPath());
-        return Strings.isNullOrEmpty(value) ? null : Integer.parseInt(value);
+        int nextVersion = 
metaDataVersionPersistService.getNextVersion(GlobalPropertiesNodePath.getVersionNodePathGenerator().getVersionsPath());
+        
repository.persist(GlobalPropertiesNodePath.getVersionNodePathGenerator().getVersionPath(nextVersion),
 YamlEngine.marshal(props));
+        
metaDataVersionPersistService.switchActiveVersion(GlobalPropertiesNodePath.getRootPath(),
 nextVersion);
     }
 }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistService.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistService.java
index f65bdfeacc1..ecb5b880ee0 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistService.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistService.java
@@ -38,6 +38,20 @@ public final class MetaDataVersionPersistService {
     
     private final PersistRepository repository;
     
+    /**
+     * Switch active version.
+     *
+     * @param path path
+     * @param currentVersion current version
+     */
+    public void switchActiveVersion(final String path, final int 
currentVersion) {
+        VersionNodePathGenerator nodePathGenerator = new 
VersionNodePathGenerator(path);
+        repository.persist(nodePathGenerator.getActiveVersionPath(), 
String.valueOf(currentVersion));
+        if (MetaDataVersion.INIT_VERSION != currentVersion) {
+            
getVersions(nodePathGenerator.getVersionsPath()).stream().filter(version -> 
version < currentVersion).forEach(version -> 
repository.delete(nodePathGenerator.getVersionPath(version)));
+        }
+    }
+    
     /**
      * Switch active version.
      *
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistServiceTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistServiceTest.java
index 8ae9f251794..2c24fa3127d 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistServiceTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/global/PropertiesPersistServiceTest.java
@@ -48,7 +48,6 @@ class PropertiesPersistServiceTest {
     void setUp() {
         MetaDataVersionPersistService metaDataVersionPersistService = new 
MetaDataVersionPersistService(repository);
         persistService = new PropertiesPersistService(repository, 
metaDataVersionPersistService);
-        when(repository.query("/props/active_version")).thenReturn("0");
     }
     
     @Test
@@ -58,6 +57,7 @@ class PropertiesPersistServiceTest {
     
     @Test
     void assertLoad() {
+        when(repository.query("/props/active_version")).thenReturn("0");
         
when(repository.query("/props/versions/0")).thenReturn("{\"k\":\"v\"}");
         Properties props = persistService.load();
         assertThat(props.size(), is(1));
@@ -66,7 +66,6 @@ class PropertiesPersistServiceTest {
     
     @Test
     void assertPersistWithEmptyActiveVersion() {
-        when(repository.query("/props/active_version")).thenReturn("", "0");
         persistService.persist(PropertiesBuilder.build(new Property("k", 
"v")));
         verify(repository).persist("/props/versions/0", "k: v" + 
System.lineSeparator());
         verify(repository).persist("/props/active_version", "0");
diff --git 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
index f14a595a20a..ec433eea0b4 100644
--- 
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
+++ 
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
@@ -155,7 +155,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
         when(singleRule.getConfiguration()).thenReturn(singleRuleConfig);
         metaDataManagerPersistService.alterSingleRuleConfiguration(
                 new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), 
Collections.emptyList()), new RuleMetaData(Collections.singleton(singleRule)));
-        
verify(metaDataPersistFacade.getMetaDataVersionService()).switchActiveVersion(any());
+        
verify(metaDataPersistFacade.getMetaDataVersionService()).switchActiveVersion(anyCollection());
         
verify(metaDataContextManager.getDatabaseRuleConfigurationManager()).alter("foo_db",
 singleRuleConfig);
     }
     

Reply via email to