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 226ed8b3d44 Split MetaDataChangedHandler to SchemaChangedHandler,
TableChangedHandler and ViewChangedHandler (#34893)
226ed8b3d44 is described below
commit 226ed8b3d445211613e51081e0110f2b7894ae93
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Mar 6 00:56:55 2025 +0800
Split MetaDataChangedHandler to SchemaChangedHandler, TableChangedHandler
and ViewChangedHandler (#34893)
---
.../database/metadata/MetaDataChangedHandler.java | 106 ------------------
.../metadata/{type => }/SchemaChangedHandler.java | 51 ++++++---
.../metadata/{type => }/TableChangedHandler.java | 46 +++++---
.../metadata/{type => }/ViewChangedHandler.java | 48 +++++---
.../type/DatabaseMetaDataChangedListener.java | 8 +-
.../metadata/MetaDataChangedHandlerTest.java | 123 ---------------------
.../metadata/SchemaChangedHandlerTest.java | 59 ++++++++++
.../database/metadata/TableChangedHandlerTest.java | 72 ++++++++++++
.../database/metadata/ViewChangedHandlerTest.java | 72 ++++++++++++
9 files changed, 302 insertions(+), 283 deletions(-)
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
deleted file mode 100644
index 049a4232747..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandler.java
+++ /dev/null
@@ -1,106 +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.manager.cluster.dispatch.handler.database.metadata;
-
-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.manager.cluster.dispatch.handler.database.metadata.type.SchemaChangedHandler;
-import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type.TableChangedHandler;
-import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type.ViewChangedHandler;
-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;
-import
org.apache.shardingsphere.mode.node.path.type.version.VersionNodePathParser;
-
-import java.util.Optional;
-
-/**
- * Meta data changed handler.
- */
-public final class MetaDataChangedHandler implements DatabaseChangedHandler {
-
- private final SchemaChangedHandler schemaChangedHandler;
-
- private final TableChangedHandler tableChangedHandler;
-
- private final ViewChangedHandler viewChangedHandler;
-
- public MetaDataChangedHandler(final ContextManager contextManager) {
- schemaChangedHandler = new SchemaChangedHandler(contextManager);
- tableChangedHandler = new TableChangedHandler(contextManager);
- viewChangedHandler = new ViewChangedHandler(contextManager);
- }
-
- @Override
- public boolean isSubscribed(final String databaseName, final
DataChangedEvent event) {
- return NodePathSearcher.isMatchedPath(event.getKey(),
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, true));
- }
-
- @Override
- public void handle(final String databaseName, final DataChangedEvent
event) {
- String eventKey = event.getKey();
- Optional<String> schemaName = NodePathSearcher.find(eventKey,
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, false));
- if (schemaName.isPresent()) {
- handleSchemaChanged(databaseName, schemaName.get(), event);
- return;
- }
- schemaName = NodePathSearcher.find(eventKey,
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, true));
- if (schemaName.isPresent() && isTableMetaDataChanged(eventKey)) {
- handleTableChanged(databaseName, schemaName.get(), event);
- return;
- }
- if (schemaName.isPresent() && isViewMetaDataChanged(eventKey)) {
- handleViewChanged(databaseName, schemaName.get(), event);
- }
- }
-
- private void handleSchemaChanged(final String databaseName, final String
schemaName, final DataChangedEvent event) {
- if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) {
- schemaChangedHandler.handleCreated(databaseName, schemaName);
- } else if (Type.DELETED == event.getType()) {
- schemaChangedHandler.handleDropped(databaseName, schemaName);
- }
- }
-
- private boolean isTableMetaDataChanged(final String key) {
- return NodePathSearcher.isMatchedPath(key,
TableMetadataNodePath.createTableSearchCriteria()) || new
VersionNodePathParser(new TableMetadataNodePath()).isActiveVersionPath(key);
- }
-
- private void handleTableChanged(final String databaseName, final String
schemaName, final DataChangedEvent event) {
- if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
&& new VersionNodePathParser(new
TableMetadataNodePath()).isActiveVersionPath(event.getKey())) {
- tableChangedHandler.handleCreatedOrAltered(databaseName,
schemaName, event);
- } else if (Type.DELETED == event.getType() &&
NodePathSearcher.isMatchedPath(event.getKey(),
TableMetadataNodePath.createTableSearchCriteria())) {
- tableChangedHandler.handleDropped(databaseName, schemaName, event);
- }
- }
-
- private boolean isViewMetaDataChanged(final String key) {
- return new VersionNodePathParser(new
ViewMetadataNodePath()).isActiveVersionPath(key) ||
NodePathSearcher.isMatchedPath(key,
ViewMetadataNodePath.createViewSearchCriteria());
- }
-
- private void handleViewChanged(final String databaseName, final String
schemaName, final DataChangedEvent event) {
- if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
- && new VersionNodePathParser(new
ViewMetadataNodePath()).isActiveVersionPath(event.getKey())) {
- viewChangedHandler.handleCreatedOrAltered(databaseName,
schemaName, event);
- } else if (Type.DELETED == event.getType() &&
NodePathSearcher.isMatchedPath(event.getKey(),
ViewMetadataNodePath.createViewSearchCriteria())) {
- viewChangedHandler.handleDropped(databaseName, schemaName, event);
- }
- }
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/SchemaChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandler.java
similarity index 52%
rename from
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/SchemaChangedHandler.java
rename to
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandler.java
index f88c482c796..486121bf0fa 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/SchemaChangedHandler.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandler.java
@@ -15,15 +15,21 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type;
+package
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
import org.apache.shardingsphere.mode.manager.ContextManager;
+import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.DatabaseChangedHandler;
import
org.apache.shardingsphere.mode.metadata.refresher.statistics.StatisticsRefreshEngine;
+import
org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher;
+import
org.apache.shardingsphere.mode.node.path.type.metadata.database.TableMetadataNodePath;
+
+import java.util.Optional;
/**
* Schema changed handler.
*/
-public final class SchemaChangedHandler {
+public final class SchemaChangedHandler implements DatabaseChangedHandler {
private final ContextManager contextManager;
@@ -34,24 +40,37 @@ public final class SchemaChangedHandler {
statisticsRefreshEngine = new StatisticsRefreshEngine(contextManager);
}
- /**
- * Handle schema created.
- *
- * @param databaseName database name
- * @param schemaName schema name
- */
- public void handleCreated(final String databaseName, final String
schemaName) {
+ @Override
+ public boolean isSubscribed(final String databaseName, final
DataChangedEvent event) {
+ return NodePathSearcher.isMatchedPath(event.getKey(),
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, false));
+ }
+
+ @Override
+ public void handle(final String databaseName, final DataChangedEvent
event) {
+ String eventKey = event.getKey();
+ Optional<String> schemaName = NodePathSearcher.find(eventKey,
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, false));
+ if (!schemaName.isPresent()) {
+ return;
+ }
+ switch (event.getType()) {
+ case ADDED:
+ case UPDATED:
+ handleCreated(databaseName, schemaName.get());
+ break;
+ case DELETED:
+ handleDropped(databaseName, schemaName.get());
+ break;
+ default:
+ break;
+ }
+ }
+
+ private void handleCreated(final String databaseName, final String
schemaName) {
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().addSchema(databaseName,
schemaName);
statisticsRefreshEngine.asyncRefresh();
}
- /**
- * Handle schema dropped.
- *
- * @param databaseName database name
- * @param schemaName schema name
- */
- public void handleDropped(final String databaseName, final String
schemaName) {
+ private void handleDropped(final String databaseName, final String
schemaName) {
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().dropSchema(databaseName,
schemaName);
statisticsRefreshEngine.asyncRefresh();
}
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/TableChangedHandler.java
similarity index 64%
rename from
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/TableChangedHandler.java
rename to
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java
index 6ae5167ce00..12d3dee648e 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/TableChangedHandler.java
@@ -15,21 +15,25 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type;
+package
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
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.NodePathSearcher;
import
org.apache.shardingsphere.mode.node.path.type.metadata.database.TableMetadataNodePath;
import
org.apache.shardingsphere.mode.node.path.type.version.VersionNodePathParser;
+import java.util.Optional;
+
/**
* Table changed handler.
*/
-public final class TableChangedHandler {
+public final class TableChangedHandler implements DatabaseChangedHandler {
private final ContextManager contextManager;
@@ -43,14 +47,27 @@ public final class TableChangedHandler {
statisticsRefreshEngine = new StatisticsRefreshEngine(contextManager);
}
- /**
- * Handle table created or altered.
- *
- * @param databaseName database name
- * @param schemaName schema name
- * @param event data changed event
- */
- public void handleCreatedOrAltered(final String databaseName, final String
schemaName, final DataChangedEvent event) {
+ @Override
+ public boolean isSubscribed(final String databaseName, final
DataChangedEvent event) {
+ return NodePathSearcher.isMatchedPath(event.getKey(),
TableMetadataNodePath.createTableSearchCriteria())
+ || new VersionNodePathParser(new
TableMetadataNodePath()).isActiveVersionPath(event.getKey());
+ }
+
+ @Override
+ public void handle(final String databaseName, final DataChangedEvent
event) {
+ String eventKey = event.getKey();
+ Optional<String> schemaName = NodePathSearcher.find(eventKey,
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, true));
+ if (!schemaName.isPresent()) {
+ return;
+ }
+ if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
&& new VersionNodePathParser(new
TableMetadataNodePath()).isActiveVersionPath(event.getKey())) {
+ handleCreatedOrAltered(databaseName, schemaName.get(), event);
+ } else if (Type.DELETED == event.getType() &&
NodePathSearcher.isMatchedPath(event.getKey(),
TableMetadataNodePath.createTableSearchCriteria())) {
+ handleDropped(databaseName, schemaName.get(), event);
+ }
+ }
+
+ private void handleCreatedOrAltered(final String databaseName, final
String schemaName, final DataChangedEvent event) {
String tableName = new VersionNodePathParser(new
TableMetadataNodePath())
.findIdentifierByActiveVersionPath(event.getKey(),
3).orElseThrow(() -> new IllegalStateException("Table name not found."));
if (!activeVersionChecker.checkSame(event)) {
@@ -61,14 +78,7 @@ public final class TableChangedHandler {
statisticsRefreshEngine.asyncRefresh();
}
- /**
- * Handle table dropped.
- *
- * @param databaseName database name
- * @param schemaName schema name
- * @param event data changed event
- */
- public void handleDropped(final String databaseName, final String
schemaName, final DataChangedEvent event) {
+ private void handleDropped(final String databaseName, final String
schemaName, final DataChangedEvent event) {
String tableName = NodePathSearcher.find(event.getKey(),
TableMetadataNodePath.createTableSearchCriteria()).orElseThrow(() -> new
IllegalStateException("Table name not found."));
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().dropTable(databaseName,
schemaName, tableName);
statisticsRefreshEngine.asyncRefresh();
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
similarity index 62%
rename from
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java
rename to
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
index f39750006cb..c3ecd3aa46e 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/type/ViewChangedHandler.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java
@@ -15,21 +15,26 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.type;
+package
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata;
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.NodePathSearcher;
+import
org.apache.shardingsphere.mode.node.path.type.metadata.database.TableMetadataNodePath;
import
org.apache.shardingsphere.mode.node.path.type.metadata.database.ViewMetadataNodePath;
import
org.apache.shardingsphere.mode.node.path.type.version.VersionNodePathParser;
+import java.util.Optional;
+
/**
* View changed handler.
*/
-public final class ViewChangedHandler {
+public final class ViewChangedHandler implements DatabaseChangedHandler {
private final ContextManager contextManager;
@@ -43,14 +48,28 @@ public final class ViewChangedHandler {
statisticsRefreshEngine = new StatisticsRefreshEngine(contextManager);
}
- /**
- * Handle view created or altered.
- *
- * @param databaseName database name
- * @param schemaName schema name
- * @param event data changed event
- */
- public void handleCreatedOrAltered(final String databaseName, final String
schemaName, final DataChangedEvent event) {
+ @Override
+ public boolean isSubscribed(final String databaseName, final
DataChangedEvent event) {
+ return new VersionNodePathParser(new
ViewMetadataNodePath()).isActiveVersionPath(event.getKey())
+ || NodePathSearcher.isMatchedPath(event.getKey(),
ViewMetadataNodePath.createViewSearchCriteria());
+ }
+
+ @Override
+ public void handle(final String databaseName, final DataChangedEvent
event) {
+ String eventKey = event.getKey();
+ Optional<String> schemaName = NodePathSearcher.find(eventKey,
TableMetadataNodePath.createSchemaSearchCriteria(databaseName, true));
+ if (!schemaName.isPresent()) {
+ return;
+ }
+ if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
+ && new VersionNodePathParser(new
ViewMetadataNodePath()).isActiveVersionPath(event.getKey())) {
+ handleCreatedOrAltered(databaseName, schemaName.get(), event);
+ } else if (Type.DELETED == event.getType() &&
NodePathSearcher.isMatchedPath(event.getKey(),
ViewMetadataNodePath.createViewSearchCriteria())) {
+ handleDropped(databaseName, schemaName.get(), event);
+ }
+ }
+
+ 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."));
if (!activeVersionChecker.checkSame(event)) {
@@ -61,14 +80,7 @@ public final class ViewChangedHandler {
statisticsRefreshEngine.asyncRefresh();
}
- /**
- * Handle view dropped.
- *
- * @param databaseName database name
- * @param schemaName schema name
- * @param event data changed event
- */
- public void handleDropped(final String databaseName, final String
schemaName, final DataChangedEvent event) {
+ private void handleDropped(final String databaseName, final String
schemaName, final DataChangedEvent event) {
String viewName = NodePathSearcher.find(event.getKey(),
ViewMetadataNodePath.createViewSearchCriteria()).orElseThrow(() -> new
IllegalStateException("View name not found."));
contextManager.getMetaDataContextManager().getDatabaseMetaDataManager().dropView(databaseName,
schemaName, viewName);
statisticsRefreshEngine.asyncRefresh();
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
index 24eda761ee6..8886ac2e4fe 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/listener/type/DatabaseMetaDataChangedListener.java
@@ -24,7 +24,9 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.DatabaseChangedHandler;
import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.datasource.StorageNodeChangedHandler;
import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.datasource.StorageUnitChangedHandler;
-import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.MetaDataChangedHandler;
+import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.ViewChangedHandler;
+import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.SchemaChangedHandler;
+import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.metadata.TableChangedHandler;
import
org.apache.shardingsphere.mode.manager.cluster.dispatch.handler.database.rule.RuleConfigurationChangedHandler;
import
org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher;
import
org.apache.shardingsphere.mode.node.path.type.metadata.database.TableMetadataNodePath;
@@ -44,7 +46,9 @@ public final class DatabaseMetaDataChangedListener implements
DataChangedEventLi
public DatabaseMetaDataChangedListener(final ContextManager
contextManager) {
handlers = Arrays.asList(
- new MetaDataChangedHandler(contextManager),
+ new SchemaChangedHandler(contextManager),
+ new TableChangedHandler(contextManager),
+ new ViewChangedHandler(contextManager),
new StorageUnitChangedHandler(contextManager),
new StorageNodeChangedHandler(contextManager),
new RuleConfigurationChangedHandler(contextManager));
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
deleted file mode 100644
index 4b016602689..00000000000
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
+++ /dev/null
@@ -1,123 +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.manager.cluster.dispatch.handler.database.metadata;
-
-import
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
-import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
-import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
-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.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-import org.mockito.Answers;
-import org.mockito.Mock;
-import org.mockito.junit.jupiter.MockitoExtension;
-import org.mockito.junit.jupiter.MockitoSettings;
-import org.mockito.quality.Strictness;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(MockitoExtension.class)
-@MockitoSettings(strictness = Strictness.LENIENT)
-class MetaDataChangedHandlerTest {
-
- private MetaDataChangedHandler handler;
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private ContextManager contextManager;
-
- @BeforeEach
- void setUp() {
-
when(contextManager.getMetaDataContexts().getMetaData().getTemporaryProps().getValue(TemporaryConfigurationPropertyKey.PROXY_META_DATA_COLLECTOR_ENABLED)).thenReturn(false);
-
when(contextManager.getComputeNodeInstanceContext().getModeConfiguration().isCluster()).thenReturn(true);
-
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
- handler = new MetaDataChangedHandler(contextManager);
- }
-
- @Test
- void assertHandleSchemaCreated() {
-
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
- handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema", "", Type.ADDED));
-
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).addSchema("foo_db",
"foo_schema");
- }
-
- @Test
- void assertHandleSchemaDropped() {
-
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
- handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema", "", Type.DELETED));
-
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropSchema("foo_db",
"foo_schema");
- }
-
- @Test
- void assertHandleTableCreated() {
-
when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value");
- ShardingSphereTable table = mock(ShardingSphereTable.class);
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load("foo_db",
"foo_schema", "foo_tbl"))
- .thenReturn(table);
- handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version",
"0", Type.ADDED));
-
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
"foo_schema", table);
- }
-
- @Test
- void assertHandleTableAltered() {
-
when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value");
- ShardingSphereTable table = mock(ShardingSphereTable.class);
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load("foo_db",
"foo_schema", "foo_tbl"))
- .thenReturn(table);
- handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version",
"0", Type.UPDATED));
-
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
"foo_schema", table);
- }
-
- @Test
- void assertHandleTableDropped() {
- handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", "",
Type.DELETED));
-
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropTable("foo_db",
"foo_schema", "foo_tbl");
- }
-
- @Test
- void assertHandleViewCreated() {
-
when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value");
- ShardingSphereView view = mock(ShardingSphereView.class);
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load("foo_db",
"foo_schema", "foo_view"))
- .thenReturn(view);
- handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version",
"0", Type.ADDED));
-
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
"foo_schema", view);
- }
-
- @Test
- void assertHandleViewAltered() {
-
when(contextManager.getPersistServiceFacade().getRepository().query("key")).thenReturn("value");
- ShardingSphereView view = mock(ShardingSphereView.class);
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load("foo_db",
"foo_schema", "foo_view"))
- .thenReturn(view);
- handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version",
"0", Type.UPDATED));
-
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
"foo_schema", view);
- }
-
- @Test
- void assertHandleViewDropped() {
- handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view", "",
Type.DELETED));
-
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropView("foo_db",
"foo_schema", "foo_view");
- }
-}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandlerTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandlerTest.java
new file mode 100644
index 00000000000..2089175f991
--- /dev/null
+++
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/SchemaChangedHandlerTest.java
@@ -0,0 +1,59 @@
+/*
+ * 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.manager.cluster.dispatch.handler.database.metadata;
+
+import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class SchemaChangedHandlerTest {
+
+ private SchemaChangedHandler handler;
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private ContextManager contextManager;
+
+ @BeforeEach
+ void setUp() {
+
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
+ handler = new SchemaChangedHandler(contextManager);
+ }
+
+ @Test
+ void assertHandleSchemaCreated() {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema", "", Type.ADDED));
+
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).addSchema("foo_db",
"foo_schema");
+ }
+
+ @Test
+ void assertHandleSchemaDropped() {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema", "", Type.DELETED));
+
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropSchema("foo_db",
"foo_schema");
+ }
+}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandlerTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandlerTest.java
new file mode 100644
index 00000000000..3c1869012a3
--- /dev/null
+++
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandlerTest.java
@@ -0,0 +1,72 @@
+/*
+ * 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.manager.cluster.dispatch.handler.database.metadata;
+
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class TableChangedHandlerTest {
+
+ private TableChangedHandler handler;
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private ContextManager contextManager;
+
+ @BeforeEach
+ void setUp() {
+ handler = new TableChangedHandler(contextManager);
+ }
+
+ @Test
+ void assertHandleTableCreated() {
+
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
+ ShardingSphereTable table = mock(ShardingSphereTable.class);
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load("foo_db",
"foo_schema", "foo_tbl")).thenReturn(table);
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version",
"0", Type.ADDED));
+
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
"foo_schema", table);
+ }
+
+ @Test
+ void assertHandleTableAltered() {
+
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
+ ShardingSphereTable table = mock(ShardingSphereTable.class);
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getTable().load("foo_db",
"foo_schema", "foo_tbl")).thenReturn(table);
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version",
"0", Type.UPDATED));
+
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterTable("foo_db",
"foo_schema", table);
+ }
+
+ @Test
+ void assertHandleTableDropped() {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", "",
Type.DELETED));
+
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropTable("foo_db",
"foo_schema", "foo_tbl");
+ }
+}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandlerTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandlerTest.java
new file mode 100644
index 00000000000..b2262b89324
--- /dev/null
+++
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandlerTest.java
@@ -0,0 +1,72 @@
+/*
+ * 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.manager.cluster.dispatch.handler.database.metadata;
+
+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.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+class ViewChangedHandlerTest {
+
+ private ViewChangedHandler handler;
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private ContextManager contextManager;
+
+ @BeforeEach
+ void setUp() {
+ handler = new ViewChangedHandler(contextManager);
+ }
+
+ @Test
+ void assertHandleViewCreated() {
+
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
+ ShardingSphereView view = mock(ShardingSphereView.class);
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load("foo_db",
"foo_schema", "foo_view")).thenReturn(view);
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version",
"0", Type.ADDED));
+
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
"foo_schema", view);
+ }
+
+ @Test
+ void assertHandleViewAltered() {
+
when(contextManager.getPersistServiceFacade().getRepository().query(any())).thenReturn("0");
+ ShardingSphereView view = mock(ShardingSphereView.class);
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseMetaDataFacade().getView().load("foo_db",
"foo_schema", "foo_view")).thenReturn(view);
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version",
"0", Type.UPDATED));
+
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).alterView("foo_db",
"foo_schema", view);
+ }
+
+ @Test
+ void assertHandleViewDropped() {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view", "",
Type.DELETED));
+
verify(contextManager.getMetaDataContextManager().getDatabaseMetaDataManager()).dropView("foo_db",
"foo_schema", "foo_view");
+ }
+}