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 c73abead0e6 Add VersionNodePath.findIdentifierByActiveVersionPath() (#34592) c73abead0e6 is described below commit c73abead0e645fbec6d1c20f25221ede05192468 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Fri Feb 7 20:10:06 2025 +0800 Add VersionNodePath.findIdentifierByActiveVersionPath() (#34592) * Add VersionNodePath.findIdentifierByActiveVersionPath() * Add VersionNodePath.findIdentifierByActiveVersionPath() * Add VersionNodePath.findIdentifierByActiveVersionPath() * Add VersionNodePath.findIdentifierByActiveVersionPath() * Add VersionNodePath.findIdentifierByActiveVersionPath() * Add VersionNodePath.findIdentifierByActiveVersionPath() * Add VersionNodePath.findIdentifierByActiveVersionPath() * Add VersionNodePath.findIdentifierByActiveVersionPath() --- .../node/path/config/GlobalPropertiesNodePath.java | 13 ---------- .../mode/node/path/config/GlobalRuleNodePath.java | 15 +++-------- .../path/metadata/DataSourceMetaDataNodePath.java | 30 +++++++++------------- .../node/path/metadata/TableMetaDataNodePath.java | 22 +++------------- .../node/path/metadata/ViewMetaDataNodePath.java | 22 +++------------- .../mode/node/path/version/VersionNodePath.java | 26 +++++++++++++++++++ .../path/config/GlobalPropertiesNodePathTest.java | 6 ----- .../node/path/config/GlobalRuleNodePathTest.java | 17 ------------ .../metadata/DataSourceMetaDataNodePathTest.java | 24 ----------------- .../path/metadata/TableMetaDataNodePathTest.java | 17 ------------ .../path/metadata/ViewMetaDataNodePathTest.java | 17 ------------ .../node/path/version/VersionNodePathTest.java | 30 +++++++++++++++++++--- .../database/metadata/MetaDataChangedHandler.java | 12 ++++----- .../metadata/type/TableChangedHandler.java | 3 ++- .../database/metadata/type/ViewChangedHandler.java | 2 +- .../global/type/GlobalRuleChangedHandler.java | 2 +- .../global/type/PropertiesChangedHandler.java | 2 +- .../metadata/MetaDataChangedHandlerTest.java | 12 ++++----- 18 files changed, 93 insertions(+), 179 deletions(-) diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePath.java index 5eba611e8ef..5b30e622b4a 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePath.java @@ -21,8 +21,6 @@ import lombok.AccessLevel; import lombok.NoArgsConstructor; import org.apache.shardingsphere.mode.node.path.version.VersionNodePath; -import java.util.regex.Pattern; - /** * Global properties node path. */ @@ -48,15 +46,4 @@ public final class GlobalPropertiesNodePath { public static VersionNodePath getVersionNodePath() { return new VersionNodePath(getRootPath()); } - - /** - * Is properties active version path. - * - * @param path path - * @return true or false - */ - public static boolean isActiveVersionPath(final String path) { - Pattern pattern = Pattern.compile(getVersionNodePath().getActiveVersionPath() + "$", Pattern.CASE_INSENSITIVE); - return pattern.matcher(path).find(); - } } diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePath.java index 7cd2105580a..5e12a06969c 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePath.java @@ -22,10 +22,6 @@ import lombok.NoArgsConstructor; import org.apache.shardingsphere.mode.node.path.NodePathPattern; import org.apache.shardingsphere.mode.node.path.version.VersionNodePath; -import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - /** * Global props node path. */ @@ -64,14 +60,11 @@ public final class GlobalRuleNodePath { } /** - * Find rule type name from active version. + * Get global rule version pattern node path. * - * @param path path to be found - * @return found rule type name + * @return global rule version pattern node path */ - public static Optional<String> findRuleTypeNameFromActiveVersion(final String path) { - Pattern pattern = Pattern.compile(getVersionNodePath(NodePathPattern.IDENTIFIER).getActiveVersionPath() + "$", Pattern.CASE_INSENSITIVE); - Matcher matcher = pattern.matcher(path); - return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty(); + public static VersionNodePath getVersionPatternNodePath() { + return new VersionNodePath(NodePathPattern.IDENTIFIER); } } diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePath.java index 07fe36ec461..a511e3f5917 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePath.java @@ -115,37 +115,31 @@ public final class DataSourceMetaDataNodePath { } /** - * Find storage unit name by active version path. + * Get storage unit version pattern unit path. * - * @param path path - * @return found storage unit name + * @return storage unit version pattern node path */ - public static Optional<String> findStorageUnitNameByActiveVersionPath(final String path) { - Pattern pattern = Pattern.compile(getStorageUnitVersionNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER).getActiveVersionPath(), Pattern.CASE_INSENSITIVE); - Matcher matcher = pattern.matcher(path); - return matcher.find() ? Optional.of(matcher.group(2)) : Optional.empty(); + public static VersionNodePath getStorageUnitVersionPatternNodePath() { + return new VersionNodePath(String.join("/", getStorageUnitsPath(NodePathPattern.IDENTIFIER), NodePathPattern.IDENTIFIER)); } /** - * Find storage unit name by storage unit path. + * Get storage node version pattern node path. * - * @param path path - * @return found storage unit name + * @return storage node version pattern node path */ - public static Optional<String> findStorageUnitNameByStorageUnitPath(final String path) { - Pattern pattern = Pattern.compile(getStorageUnitPath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER) + "$", Pattern.CASE_INSENSITIVE); - Matcher matcher = pattern.matcher(path); - return matcher.find() ? Optional.of(matcher.group(2)) : Optional.empty(); + public static VersionNodePath getStorageNodeVersionPatternNodePath() { + return new VersionNodePath(String.join("/", getStorageNodesPath(NodePathPattern.IDENTIFIER), NodePathPattern.IDENTIFIER)); } /** - * Find storage node name by active version path. + * Find storage unit name by storage unit path. * * @param path path * @return found storage unit name */ - public static Optional<String> findStorageNodeNameByActiveVersionPath(final String path) { - Pattern pattern = Pattern.compile(getStorageNodeVersionNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER).getActiveVersionPath(), Pattern.CASE_INSENSITIVE); + public static Optional<String> findStorageUnitNameByStorageUnitPath(final String path) { + Pattern pattern = Pattern.compile(getStorageUnitPath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER) + "$", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(path); return matcher.find() ? Optional.of(matcher.group(2)) : Optional.empty(); } @@ -166,7 +160,7 @@ public final class DataSourceMetaDataNodePath { * Is data source root path. * * @param path path - * @return true or false + * @return is data source root path or not */ public static boolean isDataSourceRootPath(final String path) { return Pattern.compile(getDataSourceRootPath(NodePathPattern.IDENTIFIER) + "?", Pattern.CASE_INSENSITIVE).matcher(path).find(); diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePath.java index 330709a36e1..96d649836e4 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePath.java @@ -92,25 +92,11 @@ public final class TableMetaDataNodePath { } /** - * Get table name by active version path. + * Get table version pattern node path. * - * @param path path - * @return table name - */ - public static Optional<String> findTableNameByActiveVersionPath(final String path) { - Pattern pattern = Pattern.compile( - getVersionNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER).getActiveVersionPath(), Pattern.CASE_INSENSITIVE); - Matcher matcher = pattern.matcher(path); - return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty(); - } - - /** - * Is table active version path. - * - * @param path path - * @return is table active version path or not + * @return table version node path */ - public static boolean isTableActiveVersionPath(final String path) { - return findTableNameByActiveVersionPath(path).isPresent(); + public static VersionNodePath getVersionPatternNodePath() { + return new VersionNodePath(getTablePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER)); } } diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePath.java index e0892d236bc..913e1628bdd 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePath.java @@ -92,25 +92,11 @@ public final class ViewMetaDataNodePath { } /** - * Find view name by active version path. + * Get view version pattern node path. * - * @param path path - * @return view name - */ - public static Optional<String> findViewNameByActiveVersionPath(final String path) { - Pattern pattern = Pattern.compile( - getVersionNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER).getActiveVersionPath(), Pattern.CASE_INSENSITIVE); - Matcher matcher = pattern.matcher(path); - return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty(); - } - - /** - * Is view active version path. - * - * @param path path - * @return true or false + * @return view version node path */ - public static boolean isViewActiveVersionPath(final String path) { - return findViewNameByActiveVersionPath(path).isPresent(); + public static VersionNodePath getVersionPatternNodePath() { + return new VersionNodePath(getViewPath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER)); } } diff --git a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePath.java b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePath.java index 24ac29b3498..18534fb1f8a 100644 --- a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePath.java +++ b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePath.java @@ -20,6 +20,8 @@ package org.apache.shardingsphere.mode.node.path.version; import lombok.Getter; import lombok.RequiredArgsConstructor; +import java.util.Optional; +import java.util.regex.Matcher; import java.util.regex.Pattern; /** @@ -75,4 +77,28 @@ public final class VersionNodePath { Pattern pattern = Pattern.compile(String.join("/", getVersionsPath(), VERSION_PATTERN) + "$", Pattern.CASE_INSENSITIVE); return pattern.matcher(path).find(); } + + /** + * Judge whether to active version path. + * + * @param path to be judged path + * @return is active version path or not + */ + public boolean isActiveVersionPath(final String path) { + Pattern pattern = Pattern.compile(getActiveVersionPath() + "$", Pattern.CASE_INSENSITIVE); + return pattern.matcher(path).find(); + } + + /** + * Find identifier name by active version path. + * + * @param activeVersionPath active version path + * @param identifierGroupIndex identifier group index + * @return found identifier + */ + public Optional<String> findIdentifierByActiveVersionPath(final String activeVersionPath, final int identifierGroupIndex) { + Pattern pattern = Pattern.compile(getActiveVersionPath() + "$", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(activeVersionPath); + return matcher.find() ? Optional.of(matcher.group(identifierGroupIndex)) : Optional.empty(); + } } diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePathTest.java index 2ebd63b13a8..442f7d096e9 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalPropertiesNodePathTest.java @@ -21,7 +21,6 @@ import org.junit.jupiter.api.Test; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.jupiter.api.Assertions.assertTrue; class GlobalPropertiesNodePathTest { @@ -36,9 +35,4 @@ class GlobalPropertiesNodePathTest { assertThat(GlobalPropertiesNodePath.getVersionNodePath().getVersionsPath(), is("/props/versions")); assertThat(GlobalPropertiesNodePath.getVersionNodePath().getVersionPath(0), is("/props/versions/0")); } - - @Test - void assertIsActiveVersionPath() { - assertTrue(GlobalPropertiesNodePath.isActiveVersionPath("/props/active_version")); - } } diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePathTest.java index 9717e6f657f..296ff40fb3f 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/config/GlobalRuleNodePathTest.java @@ -19,12 +19,8 @@ package org.apache.shardingsphere.mode.node.path.config; import org.junit.jupiter.api.Test; -import java.util.Optional; - import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; class GlobalRuleNodePathTest { @@ -44,17 +40,4 @@ class GlobalRuleNodePathTest { assertThat(GlobalRuleNodePath.getVersionNodePath("foo_rule").getVersionsPath(), is("/rules/foo_rule/versions")); assertThat(GlobalRuleNodePath.getVersionNodePath("foo_rule").getVersionPath(0), is("/rules/foo_rule/versions/0")); } - - @Test - void assertFindRuleTypeNameFromActiveVersion() { - Optional<String> actual = GlobalRuleNodePath.findRuleTypeNameFromActiveVersion("/rules/foo_rule/active_version"); - assertTrue(actual.isPresent()); - assertThat(actual.get(), is("foo_rule")); - } - - @Test - void assertNotFindRuleTypeNameFromActiveVersion() { - Optional<String> actual = GlobalRuleNodePath.findRuleTypeNameFromActiveVersion("/rules/foo_rule/active_version/xxx"); - assertFalse(actual.isPresent()); - } } diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePathTest.java index 24911d5e611..30259835d3a 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/DataSourceMetaDataNodePathTest.java @@ -67,18 +67,6 @@ class DataSourceMetaDataNodePathTest { assertThat(DataSourceMetaDataNodePath.getStorageNodeVersionNodePath("foo_db", "foo_ds").getVersionPath(0), is("/metadata/foo_db/data_sources/nodes/foo_ds/versions/0")); } - @Test - void assertFindStorageUnitNameByActiveVersionPath() { - Optional<String> actual = DataSourceMetaDataNodePath.findStorageUnitNameByActiveVersionPath("/metadata/foo_db/data_sources/units/foo_ds/active_version"); - assertTrue(actual.isPresent()); - assertThat(actual.get(), is("foo_ds")); - } - - @Test - void assertFindStorageUnitNameByActiveVersionPathIfNotFound() { - assertFalse(DataSourceMetaDataNodePath.findStorageUnitNameByActiveVersionPath("/xxx/foo_db/data_sources/units/foo_ds/active_version").isPresent()); - } - @Test void assertFindStorageUnitNameByStorageUnitPath() { Optional<String> actual = DataSourceMetaDataNodePath.findStorageUnitNameByStorageUnitPath("/metadata/foo_db/data_sources/units/foo_ds"); @@ -91,18 +79,6 @@ class DataSourceMetaDataNodePathTest { assertFalse(DataSourceMetaDataNodePath.findStorageUnitNameByStorageUnitPath("/xxx/foo_db/data_sources/units/foo_ds").isPresent()); } - @Test - void assertFindStorageNodeNameByActiveVersionPath() { - Optional<String> actual = DataSourceMetaDataNodePath.findStorageNodeNameByActiveVersionPath("/metadata/foo_db/data_sources/nodes/foo_ds/active_version"); - assertTrue(actual.isPresent()); - assertThat(actual.get(), is("foo_ds")); - } - - @Test - void assertFindStorageNodeNameByActiveVersionPathIfNotFound() { - assertFalse(DataSourceMetaDataNodePath.findStorageNodeNameByActiveVersionPath("/xxx/foo_db/data_sources/nodes/foo_ds/active_version").isPresent()); - } - @Test void assertFindStorageNodeNameByStorageNodePath() { Optional<String> actual = DataSourceMetaDataNodePath.findStorageNodeNameByStorageNodePath("/metadata/foo_db/data_sources/nodes/foo_ds"); diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePathTest.java index 418bc674688..dc28a763848 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/TableMetaDataNodePathTest.java @@ -61,21 +61,4 @@ class TableMetaDataNodePathTest { void assertIsTablePath() { assertTrue(TableMetaDataNodePath.isTablePath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl")); } - - @Test - void assertFindTableNameByActiveVersionPath() { - Optional<String> actual = TableMetaDataNodePath.findTableNameByActiveVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version"); - assertTrue(actual.isPresent()); - assertThat(actual.get(), is("foo_tbl")); - } - - @Test - void assertFindTableNameByActiveVersionPathIfNotFound() { - assertFalse(TableMetaDataNodePath.findTableNameByActiveVersionPath("/xxx/foo_db/schemas/foo_schema/tables/foo_tbl/active_version").isPresent()); - } - - @Test - void assertIsTableActiveVersionPath() { - assertTrue(TableMetaDataNodePath.isTableActiveVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version")); - } } diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePathTest.java index a2535e530a8..a4447b1dbe8 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/metadata/ViewMetaDataNodePathTest.java @@ -61,21 +61,4 @@ class ViewMetaDataNodePathTest { void assertIsViewPath() { assertTrue(ViewMetaDataNodePath.isViewPath("/metadata/foo_db/schemas/foo_schema/views/foo_view")); } - - @Test - void assertGetTableNameByActiveVersionNode() { - Optional<String> actual = ViewMetaDataNodePath.findViewNameByActiveVersionPath("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version"); - assertTrue(actual.isPresent()); - assertThat(actual.get(), is("foo_view")); - } - - @Test - void assertGetTableNameByActiveVersionNodeIfNotFound() { - assertFalse(ViewMetaDataNodePath.findViewNameByActiveVersionPath("/xxx/foo_db/schemas/foo_schema/views/foo_view/active_version").isPresent()); - } - - @Test - void assertIsViewActiveVersionPath() { - assertTrue(ViewMetaDataNodePath.isViewActiveVersionPath("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version")); - } } diff --git a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePathTest.java b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePathTest.java index 0936d6cf139..a6431e37e47 100644 --- a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePathTest.java +++ b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/version/VersionNodePathTest.java @@ -19,6 +19,8 @@ package org.apache.shardingsphere.mode.node.path.version; import org.junit.jupiter.api.Test; +import java.util.Optional; + import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -26,7 +28,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue; class VersionNodePathTest { - private static final String IDENTIFIER_PATTERN = "([\\w\\-]+)"; + private final VersionNodePath versionPatternNodePath = new VersionNodePath("/metadata/([\\w\\-]+)/schemas/([\\w\\-]+)/tables/([\\w\\-]+)"); @Test void assertGetActiveVersionPath() { @@ -45,8 +47,28 @@ class VersionNodePathTest { @Test void assertIsVersionPath() { - assertTrue(new VersionNodePath(IDENTIFIER_PATTERN).isVersionPath("foo/versions/0")); - assertFalse(new VersionNodePath(IDENTIFIER_PATTERN).isVersionPath("foo/versions")); - assertFalse(new VersionNodePath(IDENTIFIER_PATTERN).isVersionPath("foo/versions/0/xxx")); + assertTrue(versionPatternNodePath.isVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions/0")); + assertFalse(versionPatternNodePath.isVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions")); + assertFalse(versionPatternNodePath.isVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions/xxx")); + } + + @Test + void assertIsActiveVersionPath() { + assertTrue(versionPatternNodePath.isActiveVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version")); + assertFalse(versionPatternNodePath.isVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions")); + } + + @Test + void assertFindIdentifierByActiveVersionPath() { + String path = "/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version"; + assertThat(versionPatternNodePath.findIdentifierByActiveVersionPath(path, 1), is(Optional.of("foo_db"))); + assertThat(versionPatternNodePath.findIdentifierByActiveVersionPath(path, 2), is(Optional.of("foo_schema"))); + assertThat(versionPatternNodePath.findIdentifierByActiveVersionPath(path, 3), is(Optional.of("foo_tbl"))); + } + + @Test + void assertNotFindIdentifierByActiveVersionPath() { + String path = "/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/versions"; + assertFalse(versionPatternNodePath.findIdentifierByActiveVersionPath(path, 1).isPresent()); } } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java index c2309bd92fe..aacfbd68a2e 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java @@ -94,11 +94,11 @@ public final class MetaDataChangedHandler { } private boolean isTableMetaDataChanged(final String key) { - return TableMetaDataNodePath.isTablePath(key) || TableMetaDataNodePath.isTableActiveVersionPath(key); + return TableMetaDataNodePath.isTablePath(key) || TableMetaDataNodePath.getVersionPatternNodePath().isActiveVersionPath(key); } private void handleTableChanged(final String databaseName, final String schemaName, final DataChangedEvent event) { - if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) && TableMetaDataNodePath.isTableActiveVersionPath(event.getKey())) { + if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) && TableMetaDataNodePath.getVersionPatternNodePath().isActiveVersionPath(event.getKey())) { tableChangedHandler.handleCreatedOrAltered(databaseName, schemaName, event); } else if (Type.DELETED == event.getType() && TableMetaDataNodePath.isTablePath(event.getKey())) { tableChangedHandler.handleDropped(databaseName, schemaName, event); @@ -106,11 +106,11 @@ public final class MetaDataChangedHandler { } private boolean isViewMetaDataChanged(final String key) { - return ViewMetaDataNodePath.isViewActiveVersionPath(key) || ViewMetaDataNodePath.isViewPath(key); + return ViewMetaDataNodePath.getVersionPatternNodePath().isActiveVersionPath(key) || ViewMetaDataNodePath.isViewPath(key); } private void handleViewChanged(final String databaseName, final String schemaName, final DataChangedEvent event) { - if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) && ViewMetaDataNodePath.isViewActiveVersionPath(event.getKey())) { + if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType()) && ViewMetaDataNodePath.getVersionPatternNodePath().isActiveVersionPath(event.getKey())) { viewChangedHandler.handleCreatedOrAltered(databaseName, schemaName, event); } else if (Type.DELETED == event.getType() && ViewMetaDataNodePath.isViewPath(event.getKey())) { viewChangedHandler.handleDropped(databaseName, schemaName, event); @@ -118,7 +118,7 @@ public final class MetaDataChangedHandler { } private void handleDataSourceChanged(final String databaseName, final DataChangedEvent event) { - Optional<String> storageUnitName = DataSourceMetaDataNodePath.findStorageUnitNameByActiveVersionPath(event.getKey()); + Optional<String> storageUnitName = DataSourceMetaDataNodePath.getStorageUnitVersionPatternNodePath().findIdentifierByActiveVersionPath(event.getKey(), 2); boolean isActiveVersion = true; if (!storageUnitName.isPresent()) { storageUnitName = DataSourceMetaDataNodePath.findStorageUnitNameByStorageUnitPath(event.getKey()); @@ -128,7 +128,7 @@ public final class MetaDataChangedHandler { handleStorageUnitChanged(databaseName, event, storageUnitName.get(), isActiveVersion); return; } - Optional<String> storageNodeName = DataSourceMetaDataNodePath.findStorageNodeNameByActiveVersionPath(event.getKey()); + Optional<String> storageNodeName = DataSourceMetaDataNodePath.getStorageNodeVersionPatternNodePath().findIdentifierByActiveVersionPath(event.getKey(), 2); isActiveVersion = true; if (!storageNodeName.isPresent()) { storageNodeName = DataSourceMetaDataNodePath.findStorageNodeNameByStorageNodePath(event.getKey()); diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/TableChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/TableChangedHandler.java index a3260f86697..65869661ebb 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/TableChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/TableChangedHandler.java @@ -46,7 +46,8 @@ public final class TableChangedHandler { * @param event data changed event */ public void handleCreatedOrAltered(final String databaseName, final String schemaName, final DataChangedEvent event) { - String tableName = TableMetaDataNodePath.findTableNameByActiveVersionPath(event.getKey()).orElseThrow(() -> new IllegalStateException("Table name not found.")); + String tableName = TableMetaDataNodePath.getVersionPatternNodePath().findIdentifierByActiveVersionPath(event.getKey(), 3) + .orElseThrow(() -> new IllegalStateException("Table name not found.")); ActiveVersionChecker.checkActiveVersion(contextManager, event); ShardingSphereTable table = contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load(databaseName, schemaName, tableName); contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().alterTable(databaseName, schemaName, table); diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java index 034676bc49d..01e4535f8c4 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java @@ -46,7 +46,7 @@ public final class ViewChangedHandler { * @param event data changed event */ public void handleCreatedOrAltered(final String databaseName, final String schemaName, final DataChangedEvent event) { - String viewName = ViewMetaDataNodePath.findViewNameByActiveVersionPath(event.getKey()).orElseThrow(() -> new IllegalStateException("View name not found.")); + String viewName = ViewMetaDataNodePath.getVersionPatternNodePath().findIdentifierByActiveVersionPath(event.getKey(), 3).orElseThrow(() -> new IllegalStateException("View name not found.")); ActiveVersionChecker.checkActiveVersion(contextManager, event); ShardingSphereView view = contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load(databaseName, schemaName, viewName); contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().alterView(databaseName, schemaName, view); diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java index 936e114049c..bf3541f70c7 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/GlobalRuleChangedHandler.java @@ -47,7 +47,7 @@ public final class GlobalRuleChangedHandler implements GlobalDataChangedEventHan @Override public void handle(final ContextManager contextManager, final DataChangedEvent event) { - Optional<String> ruleTypeName = GlobalRuleNodePath.findRuleTypeNameFromActiveVersion(event.getKey()); + Optional<String> ruleTypeName = GlobalRuleNodePath.getVersionPatternNodePath().findIdentifierByActiveVersionPath(event.getKey(), 1); if (!ruleTypeName.isPresent()) { return; } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java index 912f51882ed..2f6b07ea1c1 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/PropertiesChangedHandler.java @@ -44,7 +44,7 @@ public final class PropertiesChangedHandler implements GlobalDataChangedEventHan @Override public void handle(final ContextManager contextManager, final DataChangedEvent event) { - if (!GlobalPropertiesNodePath.isActiveVersionPath(event.getKey())) { + if (!GlobalPropertiesNodePath.getVersionNodePath().isActiveVersionPath(event.getKey())) { return; } ActiveVersionChecker.checkActiveVersion(contextManager, event); diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java index 3057d6e0cbe..53a4a1e9c21 100644 --- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java +++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java @@ -77,7 +77,7 @@ class MetaDataChangedHandlerTest { ShardingSphereTable table = mock(ShardingSphereTable.class); when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load("foo_db", "foo_schema", "foo_tbl")) .thenReturn(table); - handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0", "0", Type.ADDED)); + handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version", "0", Type.ADDED)); verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db", "foo_schema", table); } @@ -87,7 +87,7 @@ class MetaDataChangedHandlerTest { ShardingSphereTable table = mock(ShardingSphereTable.class); when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load("foo_db", "foo_schema", "foo_tbl")) .thenReturn(table); - handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0", "0", Type.UPDATED)); + handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version", "0", Type.UPDATED)); verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db", "foo_schema", table); } @@ -103,7 +103,7 @@ class MetaDataChangedHandlerTest { ShardingSphereView view = mock(ShardingSphereView.class); when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load("foo_db", "foo_schema", "foo_view")) .thenReturn(view); - handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0", "0", Type.ADDED)); + handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version", "0", Type.ADDED)); verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db", "foo_schema", view); } @@ -113,7 +113,7 @@ class MetaDataChangedHandlerTest { ShardingSphereView view = mock(ShardingSphereView.class); when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load("foo_db", "foo_schema", "foo_view")) .thenReturn(view); - handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0", "0", Type.UPDATED)); + handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version", "0", Type.UPDATED)); verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db", "foo_schema", view); } @@ -127,7 +127,7 @@ class MetaDataChangedHandlerTest { void assertHandleStorageUnitRegistered() { when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value"); when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDataSourceUnitService().load("foo_db", "foo_unit")).thenReturn(mock(DataSourcePoolProperties.class)); - handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version/0", "0", Type.ADDED)); + handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version", "0", Type.ADDED)); verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).register(eq("foo_db"), any()); } @@ -135,7 +135,7 @@ class MetaDataChangedHandlerTest { void assertHandleStorageUnitAltered() { when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value"); when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDataSourceUnitService().load("foo_db", "foo_unit")).thenReturn(mock(DataSourcePoolProperties.class)); - handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version/0", "0", Type.UPDATED)); + handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version", "0", Type.UPDATED)); verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).alter(eq("foo_db"), any()); }