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 3c63464cdaf Split MetaDataVersion to MetaDataVersionNodePath (#34578) 3c63464cdaf is described below commit 3c63464cdaf936e10ba0a52d69b84ea07b0bfafe Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Thu Feb 6 22:12:04 2025 +0800 Split MetaDataVersion to MetaDataVersionNodePath (#34578) --- .../infra/metadata/version/MetaDataVersion.java | 32 ---------------------- .../version/MetaDataVersionPersistService.java | 7 +++-- .../database/DataSourceUnitPersistServiceTest.java | 2 -- .../database/DatabaseRulePersistServiceTest.java | 3 -- .../node/path/version/MetaDataVersionNodePath.java | 16 ++--------- .../path/version/MetaDataVersionNodePathTest.java | 10 +++---- .../standalone/changed/RuleItemChangedBuilder.java | 3 +- .../type/RuleItemAlteredBuildExecutor.java | 13 +++++---- .../type/RuleItemDroppedBuildExecutor.java | 6 ++-- 9 files changed, 26 insertions(+), 66 deletions(-) diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java index a303deb49a6..fe6190a0d0b 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java @@ -29,10 +29,6 @@ public final class MetaDataVersion { public static final int DEFAULT_VERSION = 0; - private static final String ACTIVE_VERSION = "active_version"; - - private static final String VERSIONS = "versions"; - private final String path; private final Integer currentActiveVersion; @@ -42,32 +38,4 @@ public final class MetaDataVersion { public MetaDataVersion(final String path) { this(path, null, null); } - - /** - * Get active version path. - * - * @return path of active version node - */ - public String getActiveVersionPath() { - return String.join("/", path, ACTIVE_VERSION); - } - - /** - * Get versions path. - * - * @return path of versions - */ - public String getVersionsPath() { - return String.join("/", path, VERSIONS); - } - - /** - * Get version path. - * - * @param version version - * @return version path - */ - public String getVersionPath(final int version) { - return String.join("/", getVersionsPath(), String.valueOf(version)); - } } 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 a1323cee046..44dabe630c8 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 @@ -21,6 +21,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; import org.apache.shardingsphere.mode.node.path.metadata.DatabaseMetaDataNodePath; +import org.apache.shardingsphere.mode.node.path.version.MetaDataVersionNodePath; import org.apache.shardingsphere.mode.spi.repository.PersistRepository; import java.util.Collection; @@ -47,8 +48,10 @@ public final class MetaDataVersionPersistService { if (each.getNextActiveVersion().equals(each.getCurrentActiveVersion())) { continue; } - repository.persist(each.getActiveVersionPath(), String.valueOf(each.getNextActiveVersion())); - getVersions(each.getVersionsPath()).stream().filter(version -> version < each.getNextActiveVersion()).forEach(version -> repository.delete(each.getVersionPath(version))); + repository.persist(new MetaDataVersionNodePath(each.getPath()).getActiveVersionPath(), String.valueOf(each.getNextActiveVersion())); + MetaDataVersionNodePath versionNodePath = new MetaDataVersionNodePath(each.getPath()); + getVersions(versionNodePath.getVersionsPath()).stream() + .filter(version -> version < each.getNextActiveVersion()).forEach(version -> repository.delete(versionNodePath.getVersionPath(version))); } } diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java index b5f95506adf..b17a26d1c26 100644 --- a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java +++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/persist/config/database/DataSourceUnitPersistServiceTest.java @@ -71,10 +71,8 @@ class DataSourceUnitPersistServiceTest { when(repository.getChildrenKeys("/metadata/foo_db/data_sources/units/foo_ds/versions")).thenReturn(Collections.singletonList("10")); List<MetaDataVersion> actual = new ArrayList<>(persistService.persist("foo_db", dataSourcePropsMap)); assertThat(actual.size(), is(2)); - assertThat(actual.get(0).getActiveVersionPath(), is("/metadata/foo_db/data_sources/units/foo_ds/active_version")); assertThat(actual.get(0).getCurrentActiveVersion(), is(10)); assertThat(actual.get(0).getNextActiveVersion(), is(11)); - assertThat(actual.get(1).getActiveVersionPath(), is("/metadata/foo_db/data_sources/units/bar_ds/active_version")); assertNull(actual.get(1).getCurrentActiveVersion()); assertThat(actual.get(1).getNextActiveVersion(), is(0)); } 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 a42ef45a24e..9d11693b3a2 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,7 +66,6 @@ class DatabaseRulePersistServiceTest { void assertPersistWithoutActiveVersion() { Collection<MetaDataVersion> actual = persistService.persist("foo_db", Arrays.asList(new MetaDataRuleConfigurationFixture("test"), new NoTupleRuleConfigurationFixture("test"))); assertThat(actual.size(), is(1)); - assertThat(actual.iterator().next().getActiveVersionPath(), is("/metadata/foo_db/rules/fixture/fixture/active_version")); assertNull(actual.iterator().next().getCurrentActiveVersion()); assertThat(actual.iterator().next().getNextActiveVersion(), is(0)); } @@ -77,7 +76,6 @@ class DatabaseRulePersistServiceTest { 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)); - assertThat(actual.iterator().next().getActiveVersionPath(), is("/metadata/foo_db/rules/fixture/fixture/active_version")); assertThat(actual.iterator().next().getCurrentActiveVersion(), is(10)); assertThat(actual.iterator().next().getNextActiveVersion(), is(11)); } @@ -92,7 +90,6 @@ class DatabaseRulePersistServiceTest { void assertDeleteWithRuleConfigurations() { Collection<MetaDataVersion> actual = persistService.delete("foo_db", Arrays.asList(new MetaDataRuleConfigurationFixture("test"), new NoTupleRuleConfigurationFixture("test"))); assertThat(actual.size(), is(1)); - assertThat(actual.iterator().next().getActiveVersionPath(), is("/metadata/foo_db/rules/fixture/fixture/active_version")); assertNull(actual.iterator().next().getCurrentActiveVersion()); assertNull(actual.iterator().next().getNextActiveVersion()); } diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/version/MetaDataVersionNodePath.java similarity index 82% copy from infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java copy to mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/version/MetaDataVersionNodePath.java index a303deb49a6..d1cd6ff5196 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersion.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/version/MetaDataVersionNodePath.java @@ -15,19 +15,17 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.metadata.version; +package org.apache.shardingsphere.mode.node.path.version; import lombok.Getter; import lombok.RequiredArgsConstructor; /** - * Meta data version. + * Meta data version node path. */ @RequiredArgsConstructor @Getter -public final class MetaDataVersion { - - public static final int DEFAULT_VERSION = 0; +public final class MetaDataVersionNodePath { private static final String ACTIVE_VERSION = "active_version"; @@ -35,14 +33,6 @@ public final class MetaDataVersion { private final String path; - private final Integer currentActiveVersion; - - private final Integer nextActiveVersion; - - public MetaDataVersion(final String path) { - this(path, null, null); - } - /** * Get active version path. * diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersionTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/version/MetaDataVersionNodePathTest.java similarity index 74% rename from infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersionTest.java rename to mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/version/MetaDataVersionNodePathTest.java index 71389546223..6ebfd984c9e 100644 --- a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/version/MetaDataVersionTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/version/MetaDataVersionNodePathTest.java @@ -15,27 +15,27 @@ * limitations under the License. */ -package org.apache.shardingsphere.infra.metadata.version; +package org.apache.shardingsphere.mode.node.path.version; import org.junit.jupiter.api.Test; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; -class MetaDataVersionTest { +class MetaDataVersionNodePathTest { @Test void assertGetActiveVersionPath() { - assertThat(new MetaDataVersion("foo", 0, 1).getActiveVersionPath(), is("foo/active_version")); + assertThat(new MetaDataVersionNodePath("foo").getActiveVersionPath(), is("foo/active_version")); } @Test void assertGetVersionsPath() { - assertThat(new MetaDataVersion("foo", 0, 1).getVersionsPath(), is("foo/versions")); + assertThat(new MetaDataVersionNodePath("foo").getVersionsPath(), is("foo/versions")); } @Test void assertGetVersionPath() { - assertThat(new MetaDataVersion("foo", 0, 1).getVersionPath(0), is("foo/versions/0")); + assertThat(new MetaDataVersionNodePath("foo").getVersionPath(0), is("foo/versions/0")); } } diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java index 60fba5d69b4..7ca9d8e3a13 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java @@ -20,6 +20,7 @@ package org.apache.shardingsphere.mode.manager.standalone.changed; import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader; import org.apache.shardingsphere.mode.manager.standalone.changed.executor.RuleItemChangedBuildExecutor; +import org.apache.shardingsphere.mode.node.path.version.MetaDataVersionNodePath; import org.apache.shardingsphere.mode.node.spi.RuleNodePathProvider; import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItem; @@ -41,7 +42,7 @@ public final class RuleItemChangedBuilder { */ public <T extends RuleChangedItem> Optional<T> build(final String databaseName, final MetaDataVersion metaDataVersion, final RuleItemChangedBuildExecutor<T> executor) { for (RuleNodePathProvider each : ShardingSphereServiceLoader.getServiceInstances(RuleNodePathProvider.class)) { - if (!each.getRuleNodePath().getRoot().isValidatedPath(metaDataVersion.getActiveVersionPath())) { + if (!each.getRuleNodePath().getRoot().isValidatedPath(new MetaDataVersionNodePath(metaDataVersion.getPath()).getActiveVersionPath())) { continue; } Optional<T> result = executor.build(each.getRuleNodePath(), databaseName, metaDataVersion); diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemAlteredBuildExecutor.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemAlteredBuildExecutor.java index 253f75437d6..4c060fa2bd2 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemAlteredBuildExecutor.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemAlteredBuildExecutor.java @@ -22,6 +22,7 @@ import org.apache.shardingsphere.mode.manager.standalone.changed.executor.RuleIt import org.apache.shardingsphere.mode.node.path.config.rule.RuleNodePath; import org.apache.shardingsphere.mode.node.path.config.rule.item.NamedRuleItemNodePath; import org.apache.shardingsphere.mode.node.path.config.rule.item.UniqueRuleItemNodePath; +import org.apache.shardingsphere.mode.node.path.version.MetaDataVersionNodePath; import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterNamedRuleItem; import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem; import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterUniqueRuleItem; @@ -36,17 +37,17 @@ public final class RuleItemAlteredBuildExecutor implements RuleItemChangedBuildE @Override public Optional<AlterRuleItem> build(final RuleNodePath ruleNodePath, final String databaseName, final MetaDataVersion metaDataVersion) { + String activeVersionPath = new MetaDataVersionNodePath(metaDataVersion.getPath()).getActiveVersionPath(); for (Entry<String, NamedRuleItemNodePath> entry : ruleNodePath.getNamedItems().entrySet()) { - Optional<String> itemName = entry.getValue().getNameByActiveVersion(metaDataVersion.getActiveVersionPath()); + Optional<String> itemName = entry.getValue().getNameByActiveVersion(activeVersionPath); if (itemName.isPresent()) { - return Optional.of(new AlterNamedRuleItem(databaseName, - itemName.get(), metaDataVersion.getActiveVersionPath(), metaDataVersion.getNextActiveVersion(), ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); + return Optional.of( + new AlterNamedRuleItem(databaseName, itemName.get(), activeVersionPath, metaDataVersion.getNextActiveVersion(), ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); } } for (Entry<String, UniqueRuleItemNodePath> entry : ruleNodePath.getUniqueItems().entrySet()) { - if (entry.getValue().isActiveVersionPath(metaDataVersion.getActiveVersionPath())) { - return Optional.of(new AlterUniqueRuleItem(databaseName, - metaDataVersion.getActiveVersionPath(), metaDataVersion.getNextActiveVersion(), ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); + if (entry.getValue().isActiveVersionPath(activeVersionPath)) { + return Optional.of(new AlterUniqueRuleItem(databaseName, activeVersionPath, metaDataVersion.getNextActiveVersion(), ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); } } return Optional.empty(); diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemDroppedBuildExecutor.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemDroppedBuildExecutor.java index b4ec607d881..767a35e42be 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemDroppedBuildExecutor.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemDroppedBuildExecutor.java @@ -22,6 +22,7 @@ import org.apache.shardingsphere.mode.manager.standalone.changed.executor.RuleIt import org.apache.shardingsphere.mode.node.path.config.rule.RuleNodePath; import org.apache.shardingsphere.mode.node.path.config.rule.item.NamedRuleItemNodePath; import org.apache.shardingsphere.mode.node.path.config.rule.item.UniqueRuleItemNodePath; +import org.apache.shardingsphere.mode.node.path.version.MetaDataVersionNodePath; import org.apache.shardingsphere.mode.spi.rule.item.drop.DropNamedRuleItem; import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem; import org.apache.shardingsphere.mode.spi.rule.item.drop.DropUniqueRuleItem; @@ -36,14 +37,15 @@ public final class RuleItemDroppedBuildExecutor implements RuleItemChangedBuildE @Override public Optional<DropRuleItem> build(final RuleNodePath ruleNodePath, final String databaseName, final MetaDataVersion metaDataVersion) { + String activeVersionPath = new MetaDataVersionNodePath(metaDataVersion.getPath()).getActiveVersionPath(); for (Entry<String, NamedRuleItemNodePath> entry : ruleNodePath.getNamedItems().entrySet()) { - Optional<String> itemName = entry.getValue().getNameByItemPath(metaDataVersion.getActiveVersionPath()); + Optional<String> itemName = entry.getValue().getNameByItemPath(activeVersionPath); if (itemName.isPresent()) { return Optional.of(new DropNamedRuleItem(databaseName, itemName.get(), ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); } } for (Entry<String, UniqueRuleItemNodePath> entry : ruleNodePath.getUniqueItems().entrySet()) { - if (entry.getValue().isActiveVersionPath(metaDataVersion.getActiveVersionPath())) { + if (entry.getValue().isActiveVersionPath(activeVersionPath)) { return Optional.of(new DropUniqueRuleItem(databaseName, ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); } }