diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/StatesNodePath.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/StatesNodePath.java index 9b4139ed10910..a33db17659488 100644 --- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/StatesNodePath.java +++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/StatesNodePath.java @@ -36,6 +36,8 @@ public final class StatesNodePath { private static final String LISTENER_ASSISTED_NODE = "listener_assisted"; + private static final String DATABASE_PATTERN = "(\\w+)"; + /** * Get cluster state path. * @@ -46,33 +48,33 @@ public static String getClusterStatePath() { } /** - * Get listener assisted node path. + * Get listener assisted node root path. * - * @return listener assisted node path + * @return listener assisted node root path */ - public static String getListenerAssistedNodePath() { + public static String getListenerAssistedNodeRootPath() { return String.join("/", ROOT_NODE, LISTENER_ASSISTED_NODE); } /** - * Get database name by listener assisted node path. + * Get database name listener assisted node path. * - * @param nodePath path - * @return database name + * @param databaseName database name + * @return database name listener assisted node path */ - public static Optional findDatabaseNameByListenerAssistedNodePath(final String nodePath) { - Pattern pattern = Pattern.compile(getListenerAssistedNodePath() + "/(\\w+)$", Pattern.CASE_INSENSITIVE); - Matcher matcher = pattern.matcher(nodePath); - return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty(); + public static String getListenerAssistedNodePath(final String databaseName) { + return String.join("/", getListenerAssistedNodeRootPath(), databaseName); } /** - * Get database name listener assisted node path. + * Find database name by listener assisted node path. * - * @param databaseName database name - * @return database name listener assisted node path + * @param listenerAssistedNodePath listener assisted node path + * @return found database name */ - public static String getDatabaseNameListenerAssistedNodePath(final String databaseName) { - return String.join("/", ROOT_NODE, LISTENER_ASSISTED_NODE, databaseName); + public static Optional findDatabaseName(final String listenerAssistedNodePath) { + Pattern pattern = Pattern.compile(getListenerAssistedNodePath(DATABASE_PATTERN) + "$", Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(listenerAssistedNodePath); + return matcher.find() ? Optional.of(matcher.group(1)) : Optional.empty(); } } diff --git a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/StatesNodePathTest.java b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/StatesNodePathTest.java index 1cd3d7b716f8a..2f174fca6f13b 100644 --- a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/StatesNodePathTest.java +++ b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/StatesNodePathTest.java @@ -19,9 +19,11 @@ import org.junit.jupiter.api.Test; -import static org.hamcrest.MatcherAssert.assertThat; +import java.util.Optional; + import static org.hamcrest.CoreMatchers.is; -import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertFalse; class StatesNodePathTest { @@ -31,17 +33,18 @@ void assertGetClusterStatePath() { } @Test - void assertGetListenerAssistedNodePath() { - assertThat(StatesNodePath.getListenerAssistedNodePath(), is("/states/listener_assisted")); + void assertGetListenerAssistedNodeRootPath() { + assertThat(StatesNodePath.getListenerAssistedNodeRootPath(), is("/states/listener_assisted")); } @Test - void assertFindDatabaseNameByListenerAssistedNodePath() { - assertTrue(StatesNodePath.findDatabaseNameByListenerAssistedNodePath("/states/listener_assisted/foo_db").isPresent()); + void assertGetListenerAssistedNodePath() { + assertThat(StatesNodePath.getListenerAssistedNodePath("foo_db"), is("/states/listener_assisted/foo_db")); } @Test - void assertGetDatabaseNameListenerAssistedNodePath() { - assertThat(StatesNodePath.getDatabaseNameListenerAssistedNodePath("foo_db"), is("/states/listener_assisted/foo_db")); + void assertFindDatabaseName() { + assertThat(StatesNodePath.findDatabaseName("/states/listener_assisted/foo_db"), is(Optional.of("foo_db"))); + assertFalse(StatesNodePath.findDatabaseName("/states/listener_assisted").isPresent()); } } diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/unified/ListenerAssistedPersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/unified/ListenerAssistedPersistService.java index 514e9fe435506..b425d4ee758e1 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/unified/ListenerAssistedPersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/unified/ListenerAssistedPersistService.java @@ -36,7 +36,7 @@ public final class ListenerAssistedPersistService { * @param listenerAssistedType listener assisted type */ public void persistDatabaseNameListenerAssisted(final String databaseName, final ListenerAssistedType listenerAssistedType) { - repository.persistEphemeral(StatesNodePath.getDatabaseNameListenerAssistedNodePath(databaseName), listenerAssistedType.name()); + repository.persistEphemeral(StatesNodePath.getListenerAssistedNodePath(databaseName), listenerAssistedType.name()); } /** @@ -45,6 +45,6 @@ public void persistDatabaseNameListenerAssisted(final String databaseName, final * @param databaseName database name */ public void deleteDatabaseNameListenerAssisted(final String databaseName) { - repository.delete(StatesNodePath.getDatabaseNameListenerAssistedNodePath(databaseName)); + repository.delete(StatesNodePath.getListenerAssistedNodePath(databaseName)); } } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/ListenerAssistedChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/ListenerAssistedChangedHandler.java index 85accfd61bd10..fabac4bc9c34c 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/ListenerAssistedChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/ListenerAssistedChangedHandler.java @@ -39,7 +39,7 @@ public final class ListenerAssistedChangedHandler implements DataChangedEventHan @Override public String getSubscribedKey() { - return StatesNodePath.getListenerAssistedNodePath(); + return StatesNodePath.getListenerAssistedNodeRootPath(); } @Override @@ -49,7 +49,7 @@ public Collection getSubscribedTypes() { @Override public void handle(final ContextManager contextManager, final DataChangedEvent event) { - StatesNodePath.findDatabaseNameByListenerAssistedNodePath(event.getKey()).ifPresent(optional -> handle(contextManager, optional, ListenerAssistedType.valueOf(event.getValue()))); + StatesNodePath.findDatabaseName(event.getKey()).ifPresent(optional -> handle(contextManager, optional, ListenerAssistedType.valueOf(event.getValue()))); } private static void handle(final ContextManager contextManager, final String databaseName, final ListenerAssistedType listenerAssistedType) {