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 3366c5ec9d0 Refactor QualifiedDataSourceNodePath (#34262)
3366c5ec9d0 is described below
commit 3366c5ec9d06e28805201091bc38e427464da5f3
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Jan 6 11:32:26 2025 +0800
Refactor QualifiedDataSourceNodePath (#34262)
---
...ittingQualifiedDataSourceDeletedSubscriber.java | 4 ++--
...eNode.java => QualifiedDataSourceNodePath.java} | 22 ++++++++++++----------
...t.java => QualifiedDataSourceNodePathTest.java} | 19 +++++++++++++------
.../QualifiedDataSourceStatePersistService.java | 8 ++++----
.../global/QualifiedDataSourceChangedHandler.java | 6 +++---
5 files changed, 34 insertions(+), 25 deletions(-)
diff --git
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriber.java
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriber.java
index 437aa755f23..1b9c607d722 100644
---
a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriber.java
+++
b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/cluster/ReadwriteSplittingQualifiedDataSourceDeletedSubscriber.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.readwritesplitting.cluster;
import com.google.common.eventbus.Subscribe;
import lombok.Setter;
-import org.apache.shardingsphere.metadata.persist.node.QualifiedDataSourceNode;
+import
org.apache.shardingsphere.metadata.persist.node.QualifiedDataSourceNodePath;
import org.apache.shardingsphere.mode.deliver.DeliverEventSubscriber;
import org.apache.shardingsphere.mode.spi.PersistRepository;
@@ -38,6 +38,6 @@ public final class
ReadwriteSplittingQualifiedDataSourceDeletedSubscriber implem
*/
@Subscribe
public void delete(final QualifiedDataSourceDeletedEvent event) {
-
repository.delete(QualifiedDataSourceNode.getQualifiedDataSourceNodePath(event.getQualifiedDataSource()));
+
repository.delete(QualifiedDataSourceNodePath.getQualifiedDataSourcePath(event.getQualifiedDataSource()));
}
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNode.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNodePath.java
similarity index 72%
rename from
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNode.java
rename to
kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNodePath.java
index 735371e5348..f0745c2be0a 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNode.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNodePath.java
@@ -26,22 +26,24 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
- * Qualified data source node.
+ * Qualified data source node path.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class QualifiedDataSourceNode {
+public final class QualifiedDataSourceNodePath {
private static final String ROOT_NODE = "nodes";
- private static final String QUALIFIED_DATA_SOURCES =
"qualified_data_sources";
+ private static final String QUALIFIED_DATA_SOURCES_NODE =
"qualified_data_sources";
+
+ private static final String QUALIFIED_DATA_SOURCE_PATTERN = "(\\S+)";
/**
* Get qualified data source root path.
*
- * @return root path of qualified data source
+ * @return qualified data source root path
*/
public static String getRootPath() {
- return String.join("/", "", ROOT_NODE, QUALIFIED_DATA_SOURCES);
+ return String.join("/", "", ROOT_NODE, QUALIFIED_DATA_SOURCES_NODE);
}
/**
@@ -50,18 +52,18 @@ public final class QualifiedDataSourceNode {
* @param qualifiedDataSource qualified data source
* @return qualified data source path
*/
- public static String getQualifiedDataSourceNodePath(final
QualifiedDataSource qualifiedDataSource) {
+ public static String getQualifiedDataSourcePath(final QualifiedDataSource
qualifiedDataSource) {
return String.join("/", getRootPath(), qualifiedDataSource.toString());
}
/**
- * Extract qualified data source.
+ * Find qualified data source.
*
* @param qualifiedDataSourcePath qualified data source path
- * @return extracted qualified data source
+ * @return found qualified data source
*/
- public static Optional<QualifiedDataSource>
extractQualifiedDataSource(final String qualifiedDataSourcePath) {
- Pattern pattern = Pattern.compile(getRootPath() + "/(\\S+)$",
Pattern.CASE_INSENSITIVE);
+ public static Optional<QualifiedDataSource> findQualifiedDataSource(final
String qualifiedDataSourcePath) {
+ Pattern pattern = Pattern.compile(String.join("/", getRootPath(),
QUALIFIED_DATA_SOURCE_PATTERN + "$"), Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(qualifiedDataSourcePath);
return matcher.find() ? Optional.of(new
QualifiedDataSource(matcher.group(1))) : Optional.empty();
}
diff --git
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNodeTest.java
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNodePathTest.java
similarity index 69%
rename from
kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNodeTest.java
rename to
kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNodePathTest.java
index 11a270e9ad2..5f6072251ec 100644
---
a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNodeTest.java
+++
b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/node/QualifiedDataSourceNodePathTest.java
@@ -24,27 +24,34 @@ 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 QualifiedDataSourceNodeTest {
+class QualifiedDataSourceNodePathTest {
@Test
void assertGetRootPath() {
- assertThat(QualifiedDataSourceNode.getRootPath(),
is("/nodes/qualified_data_sources"));
+ assertThat(QualifiedDataSourceNodePath.getRootPath(),
is("/nodes/qualified_data_sources"));
}
@Test
- void assertGetQualifiedDataSourceNodePath() {
- assertThat(QualifiedDataSourceNode.getQualifiedDataSourceNodePath(new
QualifiedDataSource("replica_query_db.readwrite_ds.replica_ds_0")),
+ void assertGetQualifiedDataSourcePath() {
+ assertThat(QualifiedDataSourceNodePath.getQualifiedDataSourcePath(new
QualifiedDataSource("replica_query_db.readwrite_ds.replica_ds_0")),
is("/nodes/qualified_data_sources/replica_query_db.readwrite_ds.replica_ds_0"));
}
@Test
- void assertExtractQualifiedDataSource() {
- Optional<QualifiedDataSource> actual =
QualifiedDataSourceNode.extractQualifiedDataSource("/nodes/qualified_data_sources/replica_query_db.readwrite_ds.replica_ds_0");
+ void assertFindQualifiedDataSource() {
+ Optional<QualifiedDataSource> actual =
QualifiedDataSourceNodePath.findQualifiedDataSource("/nodes/qualified_data_sources/replica_query_db.readwrite_ds.replica_ds_0");
assertTrue(actual.isPresent());
assertThat(actual.get().getDatabaseName(), is("replica_query_db"));
assertThat(actual.get().getGroupName(), is("readwrite_ds"));
assertThat(actual.get().getDataSourceName(), is("replica_ds_0"));
}
+
+ @Test
+ void assertNotFindQualifiedDataSource() {
+ Optional<QualifiedDataSource> actual =
QualifiedDataSourceNodePath.findQualifiedDataSource("/nodes/xxx/");
+ assertFalse(actual.isPresent());
+ }
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/unified/QualifiedDataSourceStatePersistService.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/unified/QualifiedDataSourceStatePersistService.java
index b76d992fb2d..82ad7f899a6 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/unified/QualifiedDataSourceStatePersistService.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/unified/QualifiedDataSourceStatePersistService.java
@@ -24,7 +24,7 @@ import
org.apache.shardingsphere.infra.state.datasource.DataSourceState;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
import org.apache.shardingsphere.mode.spi.PersistRepository;
import
org.apache.shardingsphere.infra.state.datasource.qualified.QualifiedDataSourceState;
-import org.apache.shardingsphere.metadata.persist.node.QualifiedDataSourceNode;
+import
org.apache.shardingsphere.metadata.persist.node.QualifiedDataSourceNodePath;
import
org.apache.shardingsphere.infra.state.datasource.qualified.yaml.YamlQualifiedDataSourceState;
import
org.apache.shardingsphere.infra.state.datasource.qualified.yaml.YamlQualifiedDataSourceStateSwapper;
@@ -46,10 +46,10 @@ public final class QualifiedDataSourceStatePersistService {
* @return loaded qualified data source states
*/
public Map<String, QualifiedDataSourceState> load() {
- Collection<String> qualifiedDataSourceNodes =
repository.getChildrenKeys(QualifiedDataSourceNode.getRootPath());
+ Collection<String> qualifiedDataSourceNodes =
repository.getChildrenKeys(QualifiedDataSourceNodePath.getRootPath());
Map<String, QualifiedDataSourceState> result = new
HashMap<>(qualifiedDataSourceNodes.size(), 1F);
qualifiedDataSourceNodes.forEach(each -> {
- String yamlContent =
repository.query(QualifiedDataSourceNode.getQualifiedDataSourceNodePath(new
QualifiedDataSource(each)));
+ String yamlContent =
repository.query(QualifiedDataSourceNodePath.getQualifiedDataSourcePath(new
QualifiedDataSource(each)));
if (!Strings.isNullOrEmpty(yamlContent)) {
result.put(each, new
YamlQualifiedDataSourceStateSwapper().swapToObject(YamlEngine.unmarshal(yamlContent,
YamlQualifiedDataSourceState.class)));
}
@@ -67,7 +67,7 @@ public final class QualifiedDataSourceStatePersistService {
*/
public void update(final String databaseName, final String groupName,
final String storageUnitName, final DataSourceState dataSourceState) {
QualifiedDataSourceState status = new
QualifiedDataSourceState(dataSourceState);
-
repository.persist(QualifiedDataSourceNode.getQualifiedDataSourceNodePath(
+
repository.persist(QualifiedDataSourceNodePath.getQualifiedDataSourcePath(
new QualifiedDataSource(databaseName, groupName,
storageUnitName)), YamlEngine.marshal(new
YamlQualifiedDataSourceStateSwapper().swapToYamlConfiguration(status)));
}
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/QualifiedDataSourceChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/QualifiedDataSourceChangedHandler.java
index f2bb401f99b..d066ccd34b0 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/QualifiedDataSourceChangedHandler.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/QualifiedDataSourceChangedHandler.java
@@ -26,7 +26,7 @@ import
org.apache.shardingsphere.infra.state.datasource.qualified.QualifiedDataS
import
org.apache.shardingsphere.infra.state.datasource.qualified.yaml.YamlQualifiedDataSourceState;
import
org.apache.shardingsphere.infra.state.datasource.qualified.yaml.YamlQualifiedDataSourceStateSwapper;
import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
-import org.apache.shardingsphere.metadata.persist.node.QualifiedDataSourceNode;
+import
org.apache.shardingsphere.metadata.persist.node.QualifiedDataSourceNodePath;
import org.apache.shardingsphere.mode.event.DataChangedEvent;
import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -43,7 +43,7 @@ public final class QualifiedDataSourceChangedHandler
implements DataChangedEvent
@Override
public String getSubscribedKey() {
- return QualifiedDataSourceNode.getRootPath();
+ return QualifiedDataSourceNodePath.getRootPath();
}
@Override
@@ -56,7 +56,7 @@ public final class QualifiedDataSourceChangedHandler
implements DataChangedEvent
if (Strings.isNullOrEmpty(event.getValue())) {
return;
}
- Optional<QualifiedDataSource> qualifiedDataSource =
QualifiedDataSourceNode.extractQualifiedDataSource(event.getKey());
+ Optional<QualifiedDataSource> qualifiedDataSource =
QualifiedDataSourceNodePath.findQualifiedDataSource(event.getKey());
if (!qualifiedDataSource.isPresent()) {
return;
}