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