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 3cae0065ef3 Add ViewChangedHandler (#34898)
3cae0065ef3 is described below
commit 3cae0065ef356ebb7d8b78fe7fb5dfdd22896c6b
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Mar 6 13:09:29 2025 +0800
Add ViewChangedHandler (#34898)
* Add ViewChangedHandler
* Add ViewChangedHandler
* Add ViewChangedHandler
---
.../metadata/database/ViewMetadataNodePath.java | 10 ++++-----
.../database/ViewMetadataNodePathTest.java | 8 +++----
.../database/metadata/ViewChangedHandler.java | 25 ++++++++++++----------
3 files changed, 22 insertions(+), 21 deletions(-)
diff --git
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePath.java
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePath.java
index 816bdba0345..db390bcd114 100644
---
a/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePath.java
+++
b/mode/node/src/main/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePath.java
@@ -38,16 +38,14 @@ public final class ViewMetadataNodePath implements NodePath
{
private final String viewName;
- public ViewMetadataNodePath() {
- this(NodePathPattern.IDENTIFIER, NodePathPattern.IDENTIFIER,
NodePathPattern.IDENTIFIER);
- }
-
/**
* Create view search criteria.
*
+ * @param databaseName database name
+ * @param schemaName schema name
* @return created search criteria
*/
- public static NodePathSearchCriteria createViewSearchCriteria() {
- return new NodePathSearchCriteria(new ViewMetadataNodePath(), false,
false, 3);
+ public static NodePathSearchCriteria createViewSearchCriteria(final String
databaseName, final String schemaName) {
+ return new NodePathSearchCriteria(new
ViewMetadataNodePath(databaseName, schemaName, NodePathPattern.IDENTIFIER),
false, true, 1);
}
}
diff --git
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePathTest.java
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePathTest.java
index 5ba8525a93a..9fc195975dc 100644
---
a/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePathTest.java
+++
b/mode/node/src/test/java/org/apache/shardingsphere/mode/node/path/type/metadata/database/ViewMetadataNodePathTest.java
@@ -47,9 +47,9 @@ class ViewMetadataNodePathTest {
@Test
void assertCreateViewSearchCriteria() {
-
assertThat(NodePathSearcher.get("/metadata/foo_db/schemas/foo_schema/views/foo_view",
ViewMetadataNodePath.createViewSearchCriteria()), is("foo_view"));
-
assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema/views/foo_view",
ViewMetadataNodePath.createViewSearchCriteria()).isPresent());
-
assertTrue(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/views/foo_view",
ViewMetadataNodePath.createViewSearchCriteria()));
-
assertFalse(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0",
ViewMetadataNodePath.createViewSearchCriteria()));
+
assertThat(NodePathSearcher.get("/metadata/foo_db/schemas/foo_schema/views/foo_view",
ViewMetadataNodePath.createViewSearchCriteria("foo_db", "foo_schema")),
is("foo_view"));
+
assertFalse(NodePathSearcher.find("/xxx/foo_db/schemas/foo_schema/views/foo_view",
ViewMetadataNodePath.createViewSearchCriteria("foo_db",
"foo_schema")).isPresent());
+
assertTrue(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/views/foo_view",
ViewMetadataNodePath.createViewSearchCriteria("foo_db", "foo_schema")));
+
assertTrue(NodePathSearcher.isMatchedPath("/metadata/foo_db/schemas/foo_schema/views/foo_view/versions/0",
ViewMetadataNodePath.createViewSearchCriteria("foo_db", "foo_schema")));
}
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
index e8bcae053ac..a28981a4010 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
@@ -19,11 +19,11 @@ package
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
import org.apache.shardingsphere.mode.event.DataChangedEvent;
-import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.DatabaseChangedHandler;
import org.apache.shardingsphere.mode.metadata.manager.ActiveVersionChecker;
import
org.apache.shardingsphere.mode.metadata.refresher.statistics.StatisticsRefreshEngine;
+import
org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathPattern;
import
org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher;
import
org.apache.shardingsphere.mode.node.path.type.metadata.database.TableMetadataNodePath;
import
org.apache.shardingsphere.mode.node.path.type.metadata.database.ViewMetadataNodePath;
@@ -48,24 +48,27 @@ public final class ViewChangedHandler implements
DatabaseChangedHandler {
@Override
public boolean isSubscribed(final String databaseName, final
DataChangedEvent event) {
- return new VersionNodePathParser(new
ViewMetadataNodePath()).isActiveVersionPath(event.getKey())
- || NodePathSearcher.isMatchedPath(event.getKey(),
ViewMetadataNodePath.createViewSearchCriteria());
+ return new VersionNodePathParser(new
ViewMetadataNodePath(databaseName, NodePathPattern.IDENTIFIER,
NodePathPattern.IDENTIFIER)).isActiveVersionPath(event.getKey());
}
@Override
public void handle(final String databaseName, final DataChangedEvent
event) {
String schemaName = NodePathSearcher.get(event.getKey(),
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, true));
- if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
- && new VersionNodePathParser(new
ViewMetadataNodePath()).isActiveVersionPath(event.getKey())) {
- handleCreatedOrAltered(databaseName, schemaName, event);
- } else if (Type.DELETED == event.getType() &&
NodePathSearcher.isMatchedPath(event.getKey(),
ViewMetadataNodePath.createViewSearchCriteria())) {
- handleDropped(databaseName, schemaName, event);
+ switch (event.getType()) {
+ case ADDED:
+ case UPDATED:
+ handleCreatedOrAltered(databaseName, schemaName, event);
+ break;
+ case DELETED:
+ handleDropped(databaseName, schemaName, event);
+ break;
+ default:
+ break;
}
}
private void handleCreatedOrAltered(final String databaseName, final
String schemaName, final DataChangedEvent event) {
- String viewName = new VersionNodePathParser(new
ViewMetadataNodePath()).findIdentifierByActiveVersionPath(event.getKey(), 3)
- .orElseThrow(() -> new IllegalStateException("View name not
found."));
+ String viewName = NodePathSearcher.get(event.getKey(),
ViewMetadataNodePath.createViewSearchCriteria(databaseName, schemaName));
if (!activeVersionChecker.checkSame(event)) {
return;
}
@@ -75,7 +78,7 @@ public final class ViewChangedHandler implements
DatabaseChangedHandler {
}
private void handleDropped(final String databaseName, final String
schemaName, final DataChangedEvent event) {
- String viewName = NodePathSearcher.get(event.getKey(),
ViewMetadataNodePath.createViewSearchCriteria());
+ String viewName = NodePathSearcher.get(event.getKey(),
ViewMetadataNodePath.createViewSearchCriteria(databaseName, schemaName));
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().dropView(databaseName,
schemaName, viewName);
statisticsRefreshEngine.asyncRefresh();
}