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 de3ddee659f Refactor DatabaseRulePersistService (#34615) de3ddee659f is described below commit de3ddee659ff823b3de3b1e73b99d63946ed2c93 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sun Feb 9 00:57:19 2025 +0800 Refactor DatabaseRulePersistService (#34615) * Refactor DatabaseRulePersistService * Refactor DatabaseRulePersistService * Refactor DatabaseRulePersistService --- .../database/DatabaseRulePersistService.java | 23 ++++++++-------------- .../database/DatabaseRulePersistServiceTest.java | 3 +-- .../version/MetaDataVersionPersistServiceTest.java | 14 ++++++++++--- .../ClusterMetaDataManagerPersistService.java | 7 ++----- .../ClusterMetaDataManagerPersistServiceTest.java | 2 +- .../StandaloneMetaDataManagerPersistService.java | 7 ++----- ...tandaloneMetaDataManagerPersistServiceTest.java | 6 ++---- 7 files changed, 27 insertions(+), 35 deletions(-) diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java index 39dfc9c043e..e7a4dfa7009 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistService.java @@ -17,18 +17,18 @@ package org.apache.shardingsphere.mode.metadata.persist.config.database; -import com.google.common.base.Strings; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; import org.apache.shardingsphere.infra.yaml.config.pojo.rule.YamlRuleConfiguration; import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigurationSwapperEngine; -import org.apache.shardingsphere.mode.node.path.metadata.DatabaseRuleMetaDataNodePath; import org.apache.shardingsphere.mode.metadata.persist.config.RepositoryTuplePersistService; import org.apache.shardingsphere.mode.metadata.persist.version.MetaDataVersionPersistService; -import org.apache.shardingsphere.mode.spi.repository.PersistRepository; +import org.apache.shardingsphere.mode.node.path.metadata.DatabaseRuleMetaDataNodePath; +import org.apache.shardingsphere.mode.node.path.version.VersionNodePathGenerator; import org.apache.shardingsphere.mode.node.tuple.RepositoryTuple; import org.apache.shardingsphere.mode.node.tuple.YamlRepositoryTupleSwapperEngine; import org.apache.shardingsphere.mode.node.tuple.annotation.RepositoryTupleEntity; +import org.apache.shardingsphere.mode.spi.repository.PersistRepository; import java.util.Collection; import java.util.Collections; @@ -90,22 +90,15 @@ public final class DatabaseRulePersistService { private Collection<MetaDataVersion> persistDataNodes(final String databaseName, final String ruleName, final Collection<RepositoryTuple> repositoryTuples) { Collection<MetaDataVersion> result = new LinkedList<>(); for (RepositoryTuple each : repositoryTuples) { - int nextVersion = metaDataVersionPersistService.getNextVersion(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName, ruleName, each.getKey()).getVersionsPath()); - repository.persist(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName, ruleName, each.getKey()).getVersionPath(nextVersion), each.getValue()); - if (null == getActiveVersion(databaseName, ruleName, each.getKey())) { - repository.persist(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName, ruleName, each.getKey()).getActiveVersionPath(), - String.valueOf(MetaDataVersion.INIT_VERSION)); - } - result.add(new MetaDataVersion(DatabaseRuleMetaDataNodePath.getRulePath(databaseName, ruleName, each.getKey()), getActiveVersion(databaseName, ruleName, each.getKey()), nextVersion)); + VersionNodePathGenerator versionNodePathGenerator = DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName, ruleName, each.getKey()); + int nextVersion = metaDataVersionPersistService.getNextVersion(versionNodePathGenerator.getVersionsPath()); + repository.persist(versionNodePathGenerator.getVersionPath(nextVersion), each.getValue()); + metaDataVersionPersistService.switchActiveVersion(DatabaseRuleMetaDataNodePath.getRulePath(databaseName, ruleName, each.getKey()), nextVersion); + result.add(new MetaDataVersion(DatabaseRuleMetaDataNodePath.getRulePath(databaseName, ruleName, each.getKey()), Math.max(MetaDataVersion.INIT_VERSION, nextVersion - 1), nextVersion)); } return result; } - private Integer getActiveVersion(final String databaseName, final String ruleName, final String key) { - String value = repository.query(DatabaseRuleMetaDataNodePath.getVersionNodePathGenerator(databaseName, ruleName, key).getActiveVersionPath()); - return Strings.isNullOrEmpty(value) ? null : Integer.parseInt(value); - } - /** * Delete configurations. * diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java index 9d11693b3a2..415c8b59326 100644 --- a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java +++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DatabaseRulePersistServiceTest.java @@ -66,13 +66,12 @@ class DatabaseRulePersistServiceTest { void assertPersistWithoutActiveVersion() { Collection<MetaDataVersion> actual = persistService.persist("foo_db", Arrays.asList(new MetaDataRuleConfigurationFixture("test"), new NoTupleRuleConfigurationFixture("test"))); assertThat(actual.size(), is(1)); - assertNull(actual.iterator().next().getCurrentActiveVersion()); + assertThat(actual.iterator().next().getCurrentActiveVersion(), is(0)); assertThat(actual.iterator().next().getNextActiveVersion(), is(0)); } @Test void assertPersistWithActiveVersion() { - when(repository.query("/metadata/foo_db/rules/fixture/fixture/active_version")).thenReturn("10"); when(repository.getChildrenKeys("/metadata/foo_db/rules/fixture/fixture/versions")).thenReturn(Collections.singletonList("10")); Collection<MetaDataVersion> actual = persistService.persist("foo_db", Collections.singleton(new MetaDataRuleConfigurationFixture("test"))); assertThat(actual.size(), is(1)); diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java index bd162f7af00..c4c76ffb425 100644 --- a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java +++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/version/MetaDataVersionPersistServiceTest.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.mode.metadata.persist.version; -import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; import org.apache.shardingsphere.mode.spi.repository.PersistRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -30,6 +29,8 @@ import java.util.Collections; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -47,9 +48,16 @@ class MetaDataVersionPersistServiceTest { } @Test - void assertSwitchActiveVersion() { + void assertSwitchActiveVersionWithCreate() { + persistService.switchActiveVersion("foo_db", 0); + verify(repository).persist("foo_db/active_version", "0"); + verify(repository, times(0)).delete(any()); + } + + @Test + void assertSwitchActiveVersionWithAlter() { when(repository.getChildrenKeys("foo_db/versions")).thenReturn(Arrays.asList("1", "0")); - persistService.switchActiveVersion(Arrays.asList(new MetaDataVersion("foo_db", 0, 1), new MetaDataVersion("bar_db", 2, 2))); + persistService.switchActiveVersion("foo_db", 1); verify(repository).persist("foo_db/active_version", "1"); verify(repository).delete("foo_db/versions/0"); } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java index 746353e52e9..7167a273182 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java @@ -25,7 +25,6 @@ import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView; -import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; import org.apache.shardingsphere.mode.manager.cluster.persist.coordinator.database.ClusterDatabaseListenerCoordinatorType; import org.apache.shardingsphere.mode.manager.cluster.persist.coordinator.database.ClusterDatabaseListenerPersistCoordinator; import org.apache.shardingsphere.mode.metadata.MetaDataContexts; @@ -171,8 +170,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag @Override public void alterSingleRuleConfiguration(final ShardingSphereDatabase database, final RuleMetaData ruleMetaData) { SingleRuleConfiguration singleRuleConfig = ruleMetaData.getSingleRule(SingleRule.class).getConfiguration(); - Collection<MetaDataVersion> metaDataVersions = metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(singleRuleConfig)); - metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(metaDataVersions); + metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(singleRuleConfig)); } @Override @@ -181,8 +179,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag return; } MetaDataContexts originalMetaDataContexts = new MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), metaDataContextManager.getMetaDataContexts().getStatistics()); - Collection<MetaDataVersion> metaDataVersions = metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(toBeAlteredRuleConfig)); - metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(metaDataVersions); + metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(toBeAlteredRuleConfig)); afterRuleConfigurationAltered(database.getName(), originalMetaDataContexts); } diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java index 242359075f3..c23b7e7d5c7 100644 --- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java +++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java @@ -135,7 +135,7 @@ class ClusterMetaDataManagerPersistServiceTest { when(metaDataPersistFacade.getDatabaseRuleService().persist("foo_db", Collections.singleton(singleRuleConfig))).thenReturn(Collections.emptyList()); metaDataManagerPersistService.alterSingleRuleConfiguration( new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), new RuleMetaData(Collections.singleton(singleRule))); - verify(metaDataPersistFacade.getMetaDataVersionService()).switchActiveVersion(Collections.emptyList()); + verify(metaDataPersistFacade.getDatabaseRuleService()).persist("foo_db", Collections.singleton(singleRuleConfig)); } @Test diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java index 74a5ead6edc..62fc471b63d 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java @@ -194,8 +194,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa @Override public void alterSingleRuleConfiguration(final ShardingSphereDatabase database, final RuleMetaData ruleMetaData) throws SQLException { SingleRuleConfiguration singleRuleConfig = ruleMetaData.getSingleRule(SingleRule.class).getConfiguration(); - Collection<MetaDataVersion> metaDataVersions = metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(singleRuleConfig)); - metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(metaDataVersions); + metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(singleRuleConfig)); metaDataContextManager.getDatabaseRuleConfigurationManager().alter(database.getName(), singleRuleConfig); clearServiceCache(); } @@ -205,9 +204,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa if (null == toBeAlteredRuleConfig) { return; } - Collection<MetaDataVersion> metaDataVersions = metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(toBeAlteredRuleConfig)); - metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(metaDataVersions); - for (MetaDataVersion each : metaDataVersions) { + for (MetaDataVersion each : metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(toBeAlteredRuleConfig))) { Optional<AlterRuleItem> alterRuleItem = ruleItemChangedBuilder.build(database.getName(), each.getPath(), each.getCurrentActiveVersion(), new RuleItemAlteredBuildExecutor()); if (alterRuleItem.isPresent()) { metaDataContextManager.getDatabaseRuleItemManager().alter(alterRuleItem.get()); 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 ec433eea0b4..5b6654098be 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,6 @@ 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(anyCollection()); verify(metaDataContextManager.getDatabaseRuleConfigurationManager()).alter("foo_db", singleRuleConfig); } @@ -172,14 +171,13 @@ class StandaloneMetaDataManagerPersistServiceTest { ShardingSphereMetaData metaData = new ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new ConfigurationProperties(new Properties())); when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData); RuleConfiguration ruleConfig = mock(RuleConfiguration.class, RETURNS_DEEP_STUBS); - Collection<MetaDataVersion> metaDataVersion = Collections.singleton(mock(MetaDataVersion.class)); - when(metaDataPersistFacade.getDatabaseRuleService().persist("foo_db", Collections.singleton(ruleConfig))).thenReturn(metaDataVersion); + Collection<MetaDataVersion> metaDataVersions = Collections.singleton(mock(MetaDataVersion.class)); + when(metaDataPersistFacade.getDatabaseRuleService().persist("foo_db", Collections.singleton(ruleConfig))).thenReturn(metaDataVersions); AlterRuleItem alterRuleItem = mock(AlterRuleItem.class); RuleItemChangedBuilder ruleItemChangedBuilder = mock(RuleItemChangedBuilder.class); when(ruleItemChangedBuilder.build(eq("foo_db"), any(), any(), any())).thenReturn(Optional.of(alterRuleItem)); setRuleConfigurationEventBuilder(ruleItemChangedBuilder); metaDataManagerPersistService.alterRuleConfiguration(database, ruleConfig); - verify(metaDataPersistFacade.getMetaDataVersionService()).switchActiveVersion(metaDataVersion); verify(metaDataContextManager.getDatabaseRuleItemManager()).alter(any(AlterRuleItem.class)); }