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 228ebb3ab03 Refactor StatisticsDataNodePath (#34757)
228ebb3ab03 is described below
commit 228ebb3ab03c4b930539134fd29929769e02f3a2
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Feb 23 14:43:45 2025 +0800
Refactor StatisticsDataNodePath (#34757)
---
.../path/statistics/StatisticsDataNodePath.java | 41 ++++++++++
.../path/statistics/StatisticsNodePathParser.java | 94 ----------------------
.../statistics/StatisticsDataNodePathTest.java | 36 +++++++++
.../statistics/StatisticsNodePathParserTest.java | 73 -----------------
.../global/type/StatisticsChangedHandler.java | 16 ++--
5 files changed, 85 insertions(+), 175 deletions(-)
diff --git
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePath.java
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePath.java
index d585a7f65c1..1adb65ce6be 100644
---
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePath.java
+++
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePath.java
@@ -21,6 +21,8 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.mode.node.path.NodePath;
import org.apache.shardingsphere.mode.node.path.NodePathEntity;
+import org.apache.shardingsphere.mode.node.path.NodePathPattern;
+import org.apache.shardingsphere.mode.node.path.NodePathSearchCriteria;
/**
* Statistics data node path.
@@ -37,4 +39,43 @@ public final class StatisticsDataNodePath implements
NodePath {
private final String tableName;
private final String uniqueKey;
+
+ /**
+ * Create database search criteria.
+ *
+ * @param containsChildPath contains child path
+ * @return created search criteria
+ */
+ public static NodePathSearchCriteria createDatabaseSearchCriteria(final
boolean containsChildPath) {
+ return new NodePathSearchCriteria(new
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, null, null, null), true,
containsChildPath, 1);
+ }
+
+ /**
+ * Create schema search criteria.
+ *
+ * @param containsChildPath contains child path
+ * @return created search criteria
+ */
+ public static NodePathSearchCriteria createSchemaSearchCriteria(final
boolean containsChildPath) {
+ return new NodePathSearchCriteria(new
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER,
null, null), true, containsChildPath, 2);
+ }
+
+ /**
+ * Create table search criteria.
+ *
+ * @param containsChildPath contains child path
+ * @return created search criteria
+ */
+ public static NodePathSearchCriteria createTableSearchCriteria(final
boolean containsChildPath) {
+ return new NodePathSearchCriteria(new
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER,
NodePathPattern.IDENTIFIER, null), false, containsChildPath, 3);
+ }
+
+ /**
+ * Create row unique key search criteria.
+ *
+ * @return created search criteria
+ */
+ public static NodePathSearchCriteria createRowUniqueKeySearchCriteria() {
+ return new NodePathSearchCriteria(new
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER,
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER), false, false, 4);
+ }
}
diff --git
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParser.java
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParser.java
deleted file mode 100644
index ec96fa77221..00000000000
---
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParser.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.mode.node.path.statistics;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
-import org.apache.shardingsphere.mode.node.path.NodePathPattern;
-
-import java.util.Optional;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Statistics node path parser.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class StatisticsNodePathParser {
-
- private static final String UNIQUE_KEY_PATTERN = "(\\w+)";
-
- /**
- * Find database name.
- *
- * @param path path
- * @param containsChildPath whether contains child path
- * @return found database name
- */
- public static Optional<String> findDatabaseName(final String path, final
boolean containsChildPath) {
- String endPattern = containsChildPath ? "?" : "$";
- Pattern pattern = Pattern.compile(NodePathGenerator.toPath(new
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, null, null, null), true) +
endPattern, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(path);
- return matcher.find() ? Optional.of(matcher.group(1)) :
Optional.empty();
- }
-
- /**
- * Find schema name.
- *
- * @param path path
- * @param containsChildPath whether contains child path
- * @return found schema name
- */
- public static Optional<String> findSchemaName(final String path, final
boolean containsChildPath) {
- String endPattern = containsChildPath ? "?" : "$";
- Pattern pattern = Pattern.compile(
- NodePathGenerator.toPath(new
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER,
null, null), true) + endPattern, Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(path);
- return matcher.find() ? Optional.of(matcher.group(2)) :
Optional.empty();
- }
-
- /**
- * Find table name.
- *
- * @param path path
- * @param containsChildPath whether contains child path
- * @return found table name
- */
- public static Optional<String> findTableName(final String path, final
boolean containsChildPath) {
- String endPattern = containsChildPath ? "?" : "$";
- Pattern pattern = Pattern.compile(
- NodePathGenerator.toPath(new
StatisticsDataNodePath(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER,
NodePathPattern.IDENTIFIER, null), false) + endPattern,
- Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(path);
- return matcher.find() ? Optional.of(matcher.group(3)) :
Optional.empty();
- }
-
- /**
- * Find row unique key.
- *
- * @param path path
- * @return found row unique key
- */
- public static Optional<String> findRowUniqueKey(final String path) {
- Pattern pattern = Pattern.compile(NodePathGenerator.toPath(
- new StatisticsDataNodePath(NodePathPattern.IDENTIFIER,
NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER, UNIQUE_KEY_PATTERN),
false) + "$", Pattern.CASE_INSENSITIVE);
- Matcher matcher = pattern.matcher(path);
- return matcher.find() ? Optional.of(matcher.group(4)) :
Optional.empty();
- }
-}
diff --git
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
index 30a45c2377f..af968933211 100644
---
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
+++
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsDataNodePathTest.java
@@ -18,8 +18,11 @@
package org.apache.shardingsphere.mode.node.path.statistics;
import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
+import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
import org.junit.jupiter.api.Test;
+import java.util.Optional;
+
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -37,4 +40,37 @@ class StatisticsDataNodePathTest {
assertThat(NodePathGenerator.toPath(new
StatisticsDataNodePath("foo_db", "foo_schema", "foo_tbl", "foo_key"), false),
is("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl/foo_key"));
}
+
+ @Test
+ void assertCreateDatabaseSearchCriteria() {
+ assertThat(NodePathSearcher.find("/statistics/databases/foo_db",
StatisticsDataNodePath.createDatabaseSearchCriteria(false)),
is(Optional.of("foo_db")));
+ assertThat(NodePathSearcher.find("/statistics/databases",
StatisticsDataNodePath.createDatabaseSearchCriteria(false)),
is(Optional.empty()));
+ assertThat(NodePathSearcher.find("/statistics/databases/foo_db",
StatisticsDataNodePath.createDatabaseSearchCriteria(true)),
is(Optional.of("foo_db")));
+
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/db_schema",
StatisticsDataNodePath.createDatabaseSearchCriteria(true)),
is(Optional.of("foo_db")));
+ assertThat(NodePathSearcher.find("/statistics/databases",
StatisticsDataNodePath.createDatabaseSearchCriteria(true)),
is(Optional.empty()));
+ }
+
+ @Test
+ void assertCreateSchemaSearchCriteria() {
+
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema",
StatisticsDataNodePath.createSchemaSearchCriteria(false)),
is(Optional.of("foo_schema")));
+ assertThat(NodePathSearcher.find("/statistics/databases/foo_db",
StatisticsDataNodePath.createSchemaSearchCriteria(false)),
is(Optional.empty()));
+
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema",
StatisticsDataNodePath.createSchemaSearchCriteria(true)),
is(Optional.of("foo_schema")));
+
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl",
StatisticsDataNodePath.createSchemaSearchCriteria(true)),
is(Optional.of("foo_schema")));
+ assertThat(NodePathSearcher.find("/statistics/databases/foo_db",
StatisticsDataNodePath.createSchemaSearchCriteria(true)), is(Optional.empty()));
+ }
+
+ @Test
+ void assertCreateTableSearchCriteria() {
+
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name",
StatisticsDataNodePath.createTableSearchCriteria(false)),
is(Optional.of("tbl_name")));
+
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema",
StatisticsDataNodePath.createTableSearchCriteria(false)),
is(Optional.empty()));
+
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name",
StatisticsDataNodePath.createTableSearchCriteria(true)),
is(Optional.of("tbl_name")));
+
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name/key",
StatisticsDataNodePath.createTableSearchCriteria(true)),
is(Optional.of("tbl_name")));
+
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables",
StatisticsDataNodePath.createTableSearchCriteria(true)), is(Optional.empty()));
+ }
+
+ @Test
+ void assertCreateRowUniqueKeySearchCriteria() {
+
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name/key",
StatisticsDataNodePath.createRowUniqueKeySearchCriteria()),
is(Optional.of("key")));
+
assertThat(NodePathSearcher.find("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name",
StatisticsDataNodePath.createRowUniqueKeySearchCriteria()),
is(Optional.empty()));
+ }
}
diff --git
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParserTest.java
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParserTest.java
deleted file mode 100644
index 91755b8cebb..00000000000
---
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/statistics/StatisticsNodePathParserTest.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.mode.node.path.statistics;
-
-import org.junit.jupiter.api.Test;
-
-import java.util.Optional;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-
-class StatisticsNodePathParserTest {
-
- @Test
- void assertFindDatabaseNameWithNotContainsChildPath() {
-
assertThat(StatisticsNodePathParser.findDatabaseName("/statistics/databases/foo_db",
false), is(Optional.of("foo_db")));
-
assertThat(StatisticsNodePathParser.findDatabaseName("/statistics/databases",
false), is(Optional.empty()));
- }
-
- @Test
- void assertFindDatabaseNameWithContainsChildPath() {
-
assertThat(StatisticsNodePathParser.findDatabaseName("/statistics/databases/foo_db",
true), is(Optional.of("foo_db")));
-
assertThat(StatisticsNodePathParser.findDatabaseName("/statistics/databases/foo_db/schemas/db_schema",
true), is(Optional.of("foo_db")));
-
assertThat(StatisticsNodePathParser.findDatabaseName("/statistics/databases",
true), is(Optional.empty()));
- }
-
- @Test
- void assertFindSchemaNameWithNotContainsChildPath() {
-
assertThat(StatisticsNodePathParser.findSchemaName("/statistics/databases/foo_db/schemas/foo_schema",
false), is(Optional.of("foo_schema")));
-
assertThat(StatisticsNodePathParser.findSchemaName("/statistics/databases/foo_db",
false), is(Optional.empty()));
- }
-
- @Test
- void assertFindSchemaNameWithContainsChildPath() {
-
assertThat(StatisticsNodePathParser.findSchemaName("/statistics/databases/foo_db/schemas/foo_schema",
true), is(Optional.of("foo_schema")));
-
assertThat(StatisticsNodePathParser.findSchemaName("/statistics/databases/foo_db/schemas/foo_schema/tables/foo_tbl",
true), is(Optional.of("foo_schema")));
-
assertThat(StatisticsNodePathParser.findSchemaName("/statistics/databases/foo_db",
true), is(Optional.empty()));
- }
-
- @Test
- void assertFindTableNameWithNotContainsChildPath() {
-
assertThat(StatisticsNodePathParser.findTableName("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name",
false), is(Optional.of("tbl_name")));
-
assertThat(StatisticsNodePathParser.findTableName("/statistics/databases/foo_db/schemas/foo_schema",
false), is(Optional.empty()));
- }
-
- @Test
- void assertFindTableNameWithContainsChildPath() {
-
assertThat(StatisticsNodePathParser.findTableName("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name",
true), is(Optional.of("tbl_name")));
-
assertThat(StatisticsNodePathParser.findTableName("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name/key",
true), is(Optional.of("tbl_name")));
-
assertThat(StatisticsNodePathParser.findTableName("/statistics/databases/foo_db/schemas/foo_schema/tables",
true), is(Optional.empty()));
- }
-
- @Test
- void assertFindRowUniqueKey() {
-
assertThat(StatisticsNodePathParser.findRowUniqueKey("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name/key"),
is(Optional.of("key")));
-
assertThat(StatisticsNodePathParser.findRowUniqueKey("/statistics/databases/foo_db/schemas/foo_schema/tables/tbl_name"),
is(Optional.empty()));
- }
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
index 1966e8b5306..42eb975752a 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/global/type/StatisticsChangedHandler.java
@@ -26,7 +26,7 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.global.GlobalDataChangedEventHandler;
import
org.apache.shardingsphere.mode.metadata.manager.statistics.StatisticsManager;
import org.apache.shardingsphere.mode.node.path.NodePathGenerator;
-import
org.apache.shardingsphere.mode.node.path.statistics.StatisticsNodePathParser;
+import org.apache.shardingsphere.mode.node.path.NodePathSearcher;
import
org.apache.shardingsphere.mode.node.path.statistics.StatisticsDataNodePath;
import java.util.Arrays;
@@ -51,34 +51,34 @@ public final class StatisticsChangedHandler implements
GlobalDataChangedEventHan
@Override
public void handle(final ContextManager contextManager, final
DataChangedEvent event) {
StatisticsManager databaseManager =
contextManager.getMetaDataContextManager().getStatisticsManager();
- Optional<String> databaseName =
StatisticsNodePathParser.findDatabaseName(event.getKey(), false);
+ Optional<String> databaseName = NodePathSearcher.find(event.getKey(),
StatisticsDataNodePath.createDatabaseSearchCriteria(false));
if (databaseName.isPresent()) {
handleDatabaseChanged(databaseManager, event.getType(),
databaseName.get());
return;
}
- databaseName =
StatisticsNodePathParser.findDatabaseName(event.getKey(), true);
+ databaseName = NodePathSearcher.find(event.getKey(),
StatisticsDataNodePath.createDatabaseSearchCriteria(true));
if (!databaseName.isPresent()) {
return;
}
- Optional<String> schemaName =
StatisticsNodePathParser.findSchemaName(event.getKey(), false);
+ Optional<String> schemaName = NodePathSearcher.find(event.getKey(),
StatisticsDataNodePath.createSchemaSearchCriteria(false));
if (schemaName.isPresent()) {
handleSchemaChanged(databaseManager, event.getType(),
databaseName.get(), schemaName.get());
return;
}
- schemaName = StatisticsNodePathParser.findSchemaName(event.getKey(),
true);
+ schemaName = NodePathSearcher.find(event.getKey(),
StatisticsDataNodePath.createSchemaSearchCriteria(true));
if (!schemaName.isPresent()) {
return;
}
- Optional<String> tableName =
StatisticsNodePathParser.findTableName(event.getKey(), false);
+ Optional<String> tableName = NodePathSearcher.find(event.getKey(),
StatisticsDataNodePath.createTableSearchCriteria(false));
if (tableName.isPresent()) {
handleTableChanged(databaseManager, event.getType(),
databaseName.get(), schemaName.get(), tableName.get());
return;
}
- tableName = StatisticsNodePathParser.findTableName(event.getKey(),
true);
+ tableName = NodePathSearcher.find(event.getKey(),
StatisticsDataNodePath.createTableSearchCriteria(true));
if (!tableName.isPresent()) {
return;
}
- Optional<String> uniqueKey =
StatisticsNodePathParser.findRowUniqueKey(event.getKey());
+ Optional<String> uniqueKey = NodePathSearcher.find(event.getKey(),
StatisticsDataNodePath.createRowUniqueKeySearchCriteria());
if (uniqueKey.isPresent()) {
handleRowDataChanged(databaseManager, event.getType(),
event.getValue(), databaseName.get(), schemaName.get(), tableName.get(),
uniqueKey.get());
}