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 24eb6881d13 Refactor TableMetaDataNodePath (#34565) 24eb6881d13 is described below commit 24eb6881d136beb805cc541b85be1a81cf2c93bb Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Thu Feb 6 01:20:24 2025 +0800 Refactor TableMetaDataNodePath (#34565) * Refactor TableMetaDataNodePath * Refactor TableMetaDataNodePath --- .../node/path/metadata/TableMetaDataNodePath.java | 44 ++++++++++------------ .../path/metadata/TableMetaDataNodePathTest.java | 34 ++++++++--------- .../database/metadata/MetaDataChangedHandler.java | 2 +- .../metadata/type/TableChangedHandler.java | 2 +- 4 files changed, 38 insertions(+), 44 deletions(-) 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 86d5ca54858..57c82685521 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 @@ -30,19 +30,13 @@ import java.util.regex.Pattern; @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class TableMetaDataNodePath { - private static final String ROOT_NODE = "/metadata"; - private static final String TABLES_NODE = "tables"; private static final String VERSIONS_NODE = "versions"; private static final String ACTIVE_VERSION_NODE = "active_version"; - private static final String TABLES_PATTERN = "/([\\w\\-]+)/schemas/([\\w\\-]+)/tables"; - - private static final String ACTIVE_VERSION_SUFFIX = "/([\\w\\-]+)/active_version"; - - private static final String TABLE_SUFFIX = "/([\\w\\-]+)$"; + private static final String IDENTIFIER_PATTERN = "([\\w\\-]+)"; /** * Get table root path. @@ -105,46 +99,46 @@ public final class TableMetaDataNodePath { } /** - * Get table name by active version path. + * Find table name. * * @param path path - * @return table name + * @return found table name */ - public static Optional<String> getTableNameByActiveVersionPath(final String path) { - Pattern pattern = Pattern.compile(ROOT_NODE + TABLES_PATTERN + ACTIVE_VERSION_SUFFIX, Pattern.CASE_INSENSITIVE); + public static Optional<String> findTableName(final String path) { + Pattern pattern = Pattern.compile(getTablePath(IDENTIFIER_PATTERN, IDENTIFIER_PATTERN, IDENTIFIER_PATTERN) + "$", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(path); return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty(); } /** - * Find table name. + * Is table path. * * @param path path - * @return found table name + * @return true or false */ - public static Optional<String> findTableName(final String path) { - Pattern pattern = Pattern.compile(ROOT_NODE + TABLES_PATTERN + "/([\\w\\-]+)$", Pattern.CASE_INSENSITIVE); - Matcher matcher = pattern.matcher(path); - return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty(); + public static boolean isTablePath(final String path) { + return findTableName(path).isPresent(); } /** - * Is table active version path. + * Get table name by active version path. * * @param path path - * @return true or false + * @return table name */ - public static boolean isTableActiveVersionPath(final String path) { - return Pattern.compile(ROOT_NODE + TABLES_PATTERN + ACTIVE_VERSION_SUFFIX, Pattern.CASE_INSENSITIVE).matcher(path).find(); + public static Optional<String> findTableNameByActiveVersionPath(final String path) { + Pattern pattern = Pattern.compile(getTableActiveVersionPath(IDENTIFIER_PATTERN, IDENTIFIER_PATTERN, IDENTIFIER_PATTERN), Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(path); + return matcher.find() ? Optional.of(matcher.group(3)) : Optional.empty(); } /** - * Is table path. + * Is table active version path. * * @param path path - * @return true or false + * @return is table active version path or not */ - public static boolean isTablePath(final String path) { - return Pattern.compile(ROOT_NODE + TABLES_PATTERN + TABLE_SUFFIX, Pattern.CASE_INSENSITIVE).matcher(path).find(); + public static boolean isTableActiveVersionPath(final String path) { + return findTableNameByActiveVersionPath(path).isPresent(); } } 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 275e1873929..a0e1c61cd26 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 @@ -33,6 +33,11 @@ class TableMetaDataNodePathTest { assertThat(TableMetaDataNodePath.getTableRootPath("foo_db", "foo_schema"), is("/metadata/foo_db/schemas/foo_schema/tables")); } + @Test + void assertGetTablePath() { + assertThat(TableMetaDataNodePath.getTablePath("foo_db", "foo_schema", "foo_tbl"), is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl")); + } + @Test void assertGetTableActiveVersionPath() { assertThat(TableMetaDataNodePath.getTableActiveVersionPath("foo_db", "foo_schema", "foo_tbl"), is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version")); @@ -49,41 +54,36 @@ class TableMetaDataNodePathTest { } @Test - void assertGetTablePath() { - assertThat(TableMetaDataNodePath.getTablePath("foo_db", "foo_schema", "foo_tbl"), is("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl")); + void assertFindTableName() { + Optional<String> actual = TableMetaDataNodePath.findTableName("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl"); + assertTrue(actual.isPresent()); + assertThat(actual.get(), is("foo_tbl")); } @Test - void assertFindTableNameByActiveVersionPath() { - Optional<String> actual = TableMetaDataNodePath.getTableNameByActiveVersionPath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version"); - assertTrue(actual.isPresent()); - assertThat(actual.get(), is("foo_tbl")); + void assertFindTableNameIfNotFound() { + assertFalse(TableMetaDataNodePath.findTableName("/xxx/foo_db/schemas/foo_schema/tables/foo_tbl").isPresent()); } @Test - void assertFindTableNameByActiveVersionPathIfNotFound() { - assertFalse(TableMetaDataNodePath.getTableNameByActiveVersionPath("/xxx/foo_db/schemas/foo_schema/tables/foo_tbl/active_version").isPresent()); + void assertIsTablePath() { + assertTrue(TableMetaDataNodePath.isTablePath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl")); } @Test - void assertFindTableName() { - Optional<String> actual = TableMetaDataNodePath.findTableName("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl"); + 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 assertFindTableNameIfNotFound() { - assertFalse(TableMetaDataNodePath.findTableName("/xxx/foo_db/schemas/foo_schema/tables/foo_tbl").isPresent()); + 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")); } - - @Test - void assertIsTablePath() { - assertTrue(TableMetaDataNodePath.isTablePath("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl")); - } } 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 d71dacc76f4..c2309bd92fe 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,7 +94,7 @@ public final class MetaDataChangedHandler { } private boolean isTableMetaDataChanged(final String key) { - return TableMetaDataNodePath.isTableActiveVersionPath(key) || TableMetaDataNodePath.isTablePath(key); + return TableMetaDataNodePath.isTablePath(key) || TableMetaDataNodePath.isTableActiveVersionPath(key); } private void handleTableChanged(final String databaseName, final String schemaName, final DataChangedEvent event) { 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 a23cdb9c7e8..a3260f86697 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,7 @@ public final class TableChangedHandler { * @param event data changed event */ public void handleCreatedOrAltered(final String databaseName, final String schemaName, final DataChangedEvent event) { - String tableName = TableMetaDataNodePath.getTableNameByActiveVersionPath(event.getKey()).orElseThrow(() -> new IllegalStateException("Table name not found.")); + String tableName = TableMetaDataNodePath.findTableNameByActiveVersionPath(event.getKey()).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);