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 736ca922dea Use MetaDataChangedHandler to instead of
MetaDataChangedSubscriber (#34219)
736ca922dea is described below
commit 736ca922dea579093f8bc8392e8b5e350dd70378
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jan 1 22:48:43 2025 +0800
Use MetaDataChangedHandler to instead of MetaDataChangedSubscriber (#34219)
* Use MetaDataChangedHandler to instead of MetaDataChangedSubscriber
---
.../ShardingSphereStatisticsRefreshEngine.java | 5 +-
.../builder/MetaDataChangedEventBuilder.java | 160 ---------------------
.../event/metadata/schema/SchemaAddedEvent.java | 34 -----
.../event/metadata/schema/SchemaDeletedEvent.java | 34 -----
.../schema/table/TableCreatedOrAlteredEvent.java | 40 ------
.../metadata/schema/table/TableDroppedEvent.java | 36 -----
.../schema/view/ViewCreatedOrAlteredEvent.java | 40 ------
.../metadata/schema/view/ViewDroppedEvent.java | 40 ------
.../handler/database/MetaDataChangedHandler.java | 154 ++++++++++++++++++++
.../handler/database/SchemaChangedHandler.java | 58 ++++++++
.../database/StorageNodeChangedHandler.java | 63 ++++++++
.../database/StorageUnitChangedHandler.java | 76 ++++++++++
.../handler/database/TableChangedHandler.java | 70 +++++++++
.../handler/database/ViewChangedHandler.java | 70 +++++++++
.../global/ListenerAssistedChangedHandler.java | 2 +-
.../listener/DataChangedEventListenerRegistry.java | 2 +-
.../type/DatabaseMetaDataChangedListener.java | 15 +-
.../ClusterDispatchEventSubscriberRegistry.java | 7 +-
.../subscriber/type/MetaDataChangedSubscriber.java | 126 ----------------
.../builder/MetaDataChangedEventBuilderTest.java | 98 -------------
.../database/MetaDataChangedHandlerTest.java | 148 +++++++++++++++++++
.../type/DatabaseMetaDataChangedListenerTest.java | 15 +-
.../type/MetaDataChangedSubscriberTest.java | 105 --------------
.../type/StorageUnitEventSubscriberTest.java | 73 ----------
24 files changed, 663 insertions(+), 808 deletions(-)
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/ShardingSphereStatisticsRefreshEngine.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/ShardingSphereStatisticsRefreshEngine.java
index 073be7e5a01..bfad2f96fc7 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/ShardingSphereStatisticsRefreshEngine.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/ShardingSphereStatisticsRefreshEngine.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.mode.metadata.refresher;
import lombok.extern.slf4j.Slf4j;
import
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
import
org.apache.shardingsphere.infra.executor.kernel.thread.ExecutorThreadFactoryBuilder;
+import org.apache.shardingsphere.infra.instance.metadata.InstanceType;
import org.apache.shardingsphere.infra.lock.LockContext;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -68,7 +69,9 @@ public final class ShardingSphereStatisticsRefreshEngine {
* Async refresh.
*/
public void asyncRefresh() {
- EXECUTOR_SERVICE.execute(this::refresh);
+ if (InstanceType.PROXY ==
contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType())
{
+ EXECUTOR_SERVICE.execute(this::refresh);
+ }
}
/**
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilder.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilder.java
deleted file mode 100644
index 44621086837..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilder.java
+++ /dev/null
@@ -1,160 +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.event.dispatch.builder;
-
-import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
-import
org.apache.shardingsphere.metadata.persist.node.metadata.DataSourceMetaDataNode;
-import
org.apache.shardingsphere.metadata.persist.node.metadata.TableMetaDataNode;
-import
org.apache.shardingsphere.metadata.persist.node.metadata.ViewMetaDataNode;
-import org.apache.shardingsphere.mode.event.DataChangedEvent;
-import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeRegisteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeUnregisteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitRegisteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitUnregisteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaAddedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaDeletedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableCreatedOrAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableDroppedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewCreatedOrAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewDroppedEvent;
-
-import java.util.Optional;
-
-/**
- * Meta data changed event builder.
- */
-public final class MetaDataChangedEventBuilder {
-
- /**
- * Build meta data changed event.
- *
- * @param databaseName database name
- * @param event data changed event
- * @return built event
- */
- public Optional<DispatchEvent> build(final String databaseName, final
DataChangedEvent event) {
- String key = event.getKey();
- Optional<String> schemaName = DatabaseMetaDataNode.getSchemaName(key);
- if (schemaName.isPresent()) {
- return buildSchemaChangedEvent(databaseName, schemaName.get(),
event);
- }
- schemaName = DatabaseMetaDataNode.getSchemaNameByTableNode(key);
- if (schemaName.isPresent() && isTableMetaDataChanged(event.getKey())) {
- return buildTableChangedEvent(databaseName, schemaName.get(),
event);
- }
- if (schemaName.isPresent() && isViewMetaDataChanged(event.getKey())) {
- return buildViewChangedEvent(databaseName, schemaName.get(),
event);
- }
- if (DataSourceMetaDataNode.isDataSourcesNode(key)) {
- return buildDataSourceChangedEvent(databaseName, event);
- }
- return Optional.empty();
- }
-
- private Optional<DispatchEvent> buildSchemaChangedEvent(final String
databaseName, final String schemaName, final DataChangedEvent event) {
- switch (event.getType()) {
- case ADDED:
- case UPDATED:
- return Optional.of(new SchemaAddedEvent(databaseName,
schemaName));
- case DELETED:
- return Optional.of(new SchemaDeletedEvent(databaseName,
schemaName));
- default:
- return Optional.empty();
- }
- }
-
- private boolean isTableMetaDataChanged(final String key) {
- return TableMetaDataNode.isTableActiveVersionNode(key) ||
TableMetaDataNode.isTableNode(key);
- }
-
- private Optional<DispatchEvent> buildTableChangedEvent(final String
databaseName, final String schemaName, final DataChangedEvent event) {
- if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
&& TableMetaDataNode.isTableActiveVersionNode(event.getKey())) {
- String tableName =
TableMetaDataNode.getTableNameByActiveVersionNode(event.getKey()).orElseThrow(()
-> new IllegalStateException("Table name not found."));
- return Optional.of(new TableCreatedOrAlteredEvent(databaseName,
schemaName, tableName, event.getKey(), event.getValue()));
- }
- if (Type.DELETED == event.getType() &&
TableMetaDataNode.isTableNode(event.getKey())) {
- String tableName =
TableMetaDataNode.getTableName(event.getKey()).orElseThrow(() -> new
IllegalStateException("Table name not found."));
- return Optional.of(new TableDroppedEvent(databaseName, schemaName,
tableName));
- }
- return Optional.empty();
- }
-
- private boolean isViewMetaDataChanged(final String key) {
- return ViewMetaDataNode.isViewActiveVersionNode(key) ||
ViewMetaDataNode.isViewNode(key);
- }
-
- private Optional<DispatchEvent> buildViewChangedEvent(final String
databaseName, final String schemaName, final DataChangedEvent event) {
- if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
&& ViewMetaDataNode.isViewActiveVersionNode(event.getKey())) {
- String viewName =
ViewMetaDataNode.getViewNameByActiveVersionNode(event.getKey()).orElseThrow(()
-> new IllegalStateException("View name not found."));
- return Optional.of(new ViewCreatedOrAlteredEvent(databaseName,
schemaName, viewName, event.getKey(), event.getValue()));
- }
- if (Type.DELETED == event.getType() &&
ViewMetaDataNode.isViewNode(event.getKey())) {
- String viewName =
ViewMetaDataNode.getViewName(event.getKey()).orElseThrow(() -> new
IllegalStateException("View name not found."));
- return Optional.of(new ViewDroppedEvent(databaseName, schemaName,
viewName, event.getKey(), event.getValue()));
- }
- return Optional.empty();
- }
-
- private Optional<DispatchEvent> buildDataSourceChangedEvent(final String
databaseName, final DataChangedEvent event) {
- if
(DataSourceMetaDataNode.isDataSourceUnitActiveVersionNode(event.getKey()) ||
DataSourceMetaDataNode.isDataSourceUnitNode(event.getKey())) {
- return buildStorageUnitChangedEvent(databaseName, event);
- }
- if
(DataSourceMetaDataNode.isDataSourceNodeActiveVersionNode(event.getKey()) ||
DataSourceMetaDataNode.isDataSourceNodeNode(event.getKey())) {
- return buildStorageNodeChangedEvent(databaseName, event);
- }
- return Optional.empty();
- }
-
- private Optional<DispatchEvent> buildStorageUnitChangedEvent(final String
databaseName, final DataChangedEvent event) {
- Optional<String> dataSourceUnitName =
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitActiveVersionNode(event.getKey());
- if (dataSourceUnitName.isPresent()) {
- if (Type.ADDED == event.getType()) {
- return Optional.of(new
StorageUnitRegisteredEvent(databaseName, dataSourceUnitName.get(),
event.getKey(), event.getValue()));
- }
- if (Type.UPDATED == event.getType()) {
- return Optional.of(new StorageUnitAlteredEvent(databaseName,
dataSourceUnitName.get(), event.getKey(), event.getValue()));
- }
- }
- dataSourceUnitName =
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitNode(event.getKey());
- if (Type.DELETED == event.getType() && dataSourceUnitName.isPresent())
{
- return Optional.of(new StorageUnitUnregisteredEvent(databaseName,
dataSourceUnitName.get()));
- }
- return Optional.empty();
- }
-
- private Optional<DispatchEvent> buildStorageNodeChangedEvent(final String
databaseName, final DataChangedEvent event) {
- Optional<String> dataSourceNodeName =
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeActiveVersionNode(event.getKey());
- if (dataSourceNodeName.isPresent()) {
- if (Type.ADDED == event.getType()) {
- return Optional.of(new
StorageNodeRegisteredEvent(databaseName, dataSourceNodeName.get(),
event.getKey(), event.getValue()));
- }
- if (Type.UPDATED == event.getType()) {
- return Optional.of(new StorageNodeAlteredEvent(databaseName,
dataSourceNodeName.get(), event.getKey(), event.getValue()));
- }
- }
- dataSourceNodeName =
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeNode(event.getKey());
- if (Type.DELETED == event.getType() && dataSourceNodeName.isPresent())
{
- return Optional.of(new StorageNodeUnregisteredEvent(databaseName,
dataSourceNodeName.get()));
- }
- return Optional.empty();
- }
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaAddedEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaAddedEvent.java
deleted file mode 100644
index 79a9259687a..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaAddedEvent.java
+++ /dev/null
@@ -1,34 +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.event.dispatch.event.metadata.schema;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * Schema added event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class SchemaAddedEvent implements DispatchEvent {
-
- private final String databaseName;
-
- private final String schemaName;
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaDeletedEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaDeletedEvent.java
deleted file mode 100644
index 72efaa3eeee..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/SchemaDeletedEvent.java
+++ /dev/null
@@ -1,34 +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.event.dispatch.event.metadata.schema;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * Schema deleted event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class SchemaDeletedEvent implements DispatchEvent {
-
- private final String databaseName;
-
- private final String schemaName;
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableCreatedOrAlteredEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableCreatedOrAlteredEvent.java
deleted file mode 100644
index bc72d30cd9c..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableCreatedOrAlteredEvent.java
+++ /dev/null
@@ -1,40 +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.event.dispatch.event.metadata.schema.table;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * Table created or altered event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class TableCreatedOrAlteredEvent implements DispatchEvent {
-
- private final String databaseName;
-
- private final String schemaName;
-
- private final String tableName;
-
- private final String activeVersionKey;
-
- private final String activeVersion;
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableDroppedEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableDroppedEvent.java
deleted file mode 100644
index f8aca800dba..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/table/TableDroppedEvent.java
+++ /dev/null
@@ -1,36 +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.event.dispatch.event.metadata.schema.table;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * Table dropped event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class TableDroppedEvent implements DispatchEvent {
-
- private final String databaseName;
-
- private final String schemaName;
-
- private final String tableName;
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewCreatedOrAlteredEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewCreatedOrAlteredEvent.java
deleted file mode 100644
index 6357a4612e3..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewCreatedOrAlteredEvent.java
+++ /dev/null
@@ -1,40 +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.event.dispatch.event.metadata.schema.view;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * View created or altered event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class ViewCreatedOrAlteredEvent implements DispatchEvent {
-
- private final String databaseName;
-
- private final String schemaName;
-
- private final String viewName;
-
- private final String activeVersionKey;
-
- private final String activeVersion;
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewDroppedEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewDroppedEvent.java
deleted file mode 100644
index 0e5984c5636..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/metadata/schema/view/ViewDroppedEvent.java
+++ /dev/null
@@ -1,40 +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.event.dispatch.event.metadata.schema.view;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * View dropped event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class ViewDroppedEvent implements DispatchEvent {
-
- private final String databaseName;
-
- private final String schemaName;
-
- private final String viewName;
-
- private final String activeVersionKey;
-
- private final String activeVersion;
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandler.java
new file mode 100644
index 00000000000..45b3ae2c54a
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandler.java
@@ -0,0 +1,154 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
+import
org.apache.shardingsphere.metadata.persist.node.metadata.DataSourceMetaDataNode;
+import
org.apache.shardingsphere.metadata.persist.node.metadata.TableMetaDataNode;
+import
org.apache.shardingsphere.metadata.persist.node.metadata.ViewMetaDataNode;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+
+import java.util.Optional;
+
+/**
+ * Meta data changed handler.
+ */
+public final class MetaDataChangedHandler {
+
+ private final SchemaChangedHandler schemaChangedHandler;
+
+ private final TableChangedHandler tableChangedHandler;
+
+ private final ViewChangedHandler viewChangedHandler;
+
+ private final StorageUnitChangedHandler storageUnitChangedHandler;
+
+ private final StorageNodeChangedHandler storageNodeChangedHandler;
+
+ public MetaDataChangedHandler(final ContextManager contextManager) {
+ schemaChangedHandler = new SchemaChangedHandler(contextManager);
+ tableChangedHandler = new TableChangedHandler(contextManager);
+ viewChangedHandler = new ViewChangedHandler(contextManager);
+ storageUnitChangedHandler = new
StorageUnitChangedHandler(contextManager);
+ storageNodeChangedHandler = new
StorageNodeChangedHandler(contextManager);
+ }
+
+ /**
+ * Handle meta data changed.
+ *
+ * @param databaseName database name
+ * @param event data changed event
+ * @return handle completed or not
+ */
+ public boolean handle(final String databaseName, final DataChangedEvent
event) {
+ String eventKey = event.getKey();
+ Optional<String> schemaName =
DatabaseMetaDataNode.getSchemaName(eventKey);
+ if (schemaName.isPresent()) {
+ handleSchemaChanged(databaseName, schemaName.get(), event);
+ return true;
+ }
+ schemaName = DatabaseMetaDataNode.getSchemaNameByTableNode(eventKey);
+ if (schemaName.isPresent() && isTableMetaDataChanged(eventKey)) {
+ handleTableChanged(databaseName, schemaName.get(), event);
+ return true;
+ }
+ if (schemaName.isPresent() && isViewMetaDataChanged(eventKey)) {
+ handleViewChanged(databaseName, schemaName.get(), event);
+ return true;
+ }
+ if (DataSourceMetaDataNode.isDataSourcesNode(eventKey)) {
+ handleDataSourceChanged(databaseName, event);
+ return true;
+ }
+ return false;
+ }
+
+ 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 TableMetaDataNode.isTableActiveVersionNode(key) ||
TableMetaDataNode.isTableNode(key);
+ }
+
+ private void handleTableChanged(final String databaseName, final String
schemaName, final DataChangedEvent event) {
+ if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
&& TableMetaDataNode.isTableActiveVersionNode(event.getKey())) {
+ tableChangedHandler.handleCreatedOrAltered(databaseName,
schemaName, event);
+ } else if (Type.DELETED == event.getType() &&
TableMetaDataNode.isTableNode(event.getKey())) {
+ tableChangedHandler.handleDropped(databaseName, schemaName, event);
+ }
+ }
+
+ private boolean isViewMetaDataChanged(final String key) {
+ return ViewMetaDataNode.isViewActiveVersionNode(key) ||
ViewMetaDataNode.isViewNode(key);
+ }
+
+ private void handleViewChanged(final String databaseName, final String
schemaName, final DataChangedEvent event) {
+ if ((Type.ADDED == event.getType() || Type.UPDATED == event.getType())
&& ViewMetaDataNode.isViewActiveVersionNode(event.getKey())) {
+ viewChangedHandler.handleCreatedOrAltered(databaseName,
schemaName, event);
+ } else if (Type.DELETED == event.getType() &&
ViewMetaDataNode.isViewNode(event.getKey())) {
+ viewChangedHandler.handleDropped(databaseName, schemaName, event);
+ }
+ }
+
+ private void handleDataSourceChanged(final String databaseName, final
DataChangedEvent event) {
+ if
(DataSourceMetaDataNode.isDataSourceUnitActiveVersionNode(event.getKey()) ||
DataSourceMetaDataNode.isDataSourceUnitNode(event.getKey())) {
+ handleStorageUnitChanged(databaseName, event);
+ } else if
(DataSourceMetaDataNode.isDataSourceNodeActiveVersionNode(event.getKey()) ||
DataSourceMetaDataNode.isDataSourceNodeNode(event.getKey())) {
+ handleStorageNodeChanged(databaseName, event);
+ }
+ }
+
+ private void handleStorageUnitChanged(final String databaseName, final
DataChangedEvent event) {
+ Optional<String> dataSourceUnitName =
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitActiveVersionNode(event.getKey());
+ if (dataSourceUnitName.isPresent()) {
+ if (Type.ADDED == event.getType()) {
+ storageUnitChangedHandler.handleRegistered(databaseName,
dataSourceUnitName.get(), event);
+ } else if (Type.UPDATED == event.getType()) {
+ storageUnitChangedHandler.handleAltered(databaseName,
dataSourceUnitName.get(), event);
+ }
+ return;
+ }
+ dataSourceUnitName =
DataSourceMetaDataNode.getDataSourceNameByDataSourceUnitNode(event.getKey());
+ if (Type.DELETED == event.getType() && dataSourceUnitName.isPresent())
{
+ storageUnitChangedHandler.handleUnregistered(databaseName,
dataSourceUnitName.get());
+ }
+ }
+
+ private void handleStorageNodeChanged(final String databaseName, final
DataChangedEvent event) {
+ Optional<String> dataSourceNodeName =
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeActiveVersionNode(event.getKey());
+ if (dataSourceNodeName.isPresent()) {
+ if (Type.ADDED == event.getType()) {
+ storageNodeChangedHandler.handleRegistered(databaseName,
dataSourceNodeName.get(), event);
+ } else if (Type.UPDATED == event.getType()) {
+ storageNodeChangedHandler.handleAltered(databaseName,
dataSourceNodeName.get(), event);
+ }
+ return;
+ }
+ dataSourceNodeName =
DataSourceMetaDataNode.getDataSourceNameByDataSourceNodeNode(event.getKey());
+ if (Type.DELETED == event.getType() && dataSourceNodeName.isPresent())
{
+ storageNodeChangedHandler.handleUnregistered(databaseName,
dataSourceNodeName.get());
+ }
+ }
+}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/SchemaChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/SchemaChangedHandler.java
new file mode 100644
index 00000000000..e06af0c2afb
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/SchemaChangedHandler.java
@@ -0,0 +1,58 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import
org.apache.shardingsphere.mode.metadata.refresher.ShardingSphereStatisticsRefreshEngine;
+
+/**
+ * Schema changed handler.
+ */
+public final class SchemaChangedHandler {
+
+ private final ContextManager contextManager;
+
+ private final ShardingSphereStatisticsRefreshEngine
statisticsRefreshEngine;
+
+ public SchemaChangedHandler(final ContextManager contextManager) {
+ this.contextManager = contextManager;
+ statisticsRefreshEngine = new
ShardingSphereStatisticsRefreshEngine(contextManager);
+ }
+
+ /**
+ * Handle schema created.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ */
+ public void handleCreated(final String databaseName, final String
schemaName) {
+
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().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) {
+
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().dropSchema(databaseName,
schemaName);
+ statisticsRefreshEngine.asyncRefresh();
+ }
+}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageNodeChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageNodeChangedHandler.java
new file mode 100644
index 00000000000..08118079737
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageNodeChangedHandler.java
@@ -0,0 +1,63 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+
+/**
+ * Storage node changed handler.
+ */
+@RequiredArgsConstructor
+public final class StorageNodeChangedHandler {
+
+ private final ContextManager contextManager;
+
+ /**
+ * Handle storage node registered.
+ *
+ * @param databaseName database name
+ * @param dataSourceUnitName data source unit name
+ * @param event data changed event
+ */
+ public void handleRegistered(final String databaseName, final String
dataSourceUnitName, final DataChangedEvent event) {
+ // TODO
+ }
+
+ /**
+ * Handle storage node altered.
+ *
+ * @param databaseName database name
+ * @param dataSourceUnitName data source unit name
+ * @param event data changed event
+ */
+ public void handleAltered(final String databaseName, final String
dataSourceUnitName, final DataChangedEvent event) {
+ // TODO
+ }
+
+ /**
+ * Handle storage node unregistered.
+ *
+ * @param databaseName database name
+ * @param dataSourceUnitName data source unit name
+ */
+ public void handleUnregistered(final String databaseName, final String
dataSourceUnitName) {
+ // TODO
+ }
+}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageUnitChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageUnitChangedHandler.java
new file mode 100644
index 00000000000..fff5ccacaf5
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageUnitChangedHandler.java
@@ -0,0 +1,76 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import com.google.common.base.Preconditions;
+import lombok.RequiredArgsConstructor;
+import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+
+import java.util.Collections;
+
+/**
+ * Storage unit changed handler.
+ */
+@RequiredArgsConstructor
+public final class StorageUnitChangedHandler {
+
+ private final ContextManager contextManager;
+
+ /**
+ * Handle storage unit registered.
+ *
+ * @param databaseName database name
+ * @param dataSourceUnitName data source unit name
+ * @param event data changed event
+ */
+ public void handleRegistered(final String databaseName, final String
dataSourceUnitName, final DataChangedEvent event) {
+ Preconditions.checkArgument(event.getValue().equals(
+
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getKey())),
+ "Invalid active version: %s of key: %s", event.getValue(),
event.getKey());
+ DataSourcePoolProperties dataSourcePoolProps =
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load(databaseName,
dataSourceUnitName);
+
contextManager.getMetaDataContextManager().getStorageUnitManager().registerStorageUnit(databaseName,
Collections.singletonMap(dataSourceUnitName, dataSourcePoolProps));
+ }
+
+ /**
+ * Handle storage unit altered.
+ *
+ * @param databaseName database name
+ * @param dataSourceUnitName data source unit name
+ * @param event data changed event
+ */
+ public void handleAltered(final String databaseName, final String
dataSourceUnitName, final DataChangedEvent event) {
+ Preconditions.checkArgument(event.getValue().equals(
+
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getKey())),
+ "Invalid active version: %s of key: %s", event.getValue(),
event.getKey());
+ DataSourcePoolProperties dataSourcePoolProps =
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load(databaseName,
dataSourceUnitName);
+
contextManager.getMetaDataContextManager().getStorageUnitManager().alterStorageUnit(databaseName,
Collections.singletonMap(dataSourceUnitName, dataSourcePoolProps));
+ }
+
+ /**
+ * Handle storage unit unregistered.
+ *
+ * @param databaseName database name
+ * @param dataSourceUnitName data source unit name
+ */
+ public void handleUnregistered(final String databaseName, final String
dataSourceUnitName) {
+
Preconditions.checkState(contextManager.getMetaDataContexts().getMetaData().containsDatabase(databaseName),
"No database '%s' exists.", databaseName);
+
contextManager.getMetaDataContextManager().getStorageUnitManager().unregisterStorageUnit(databaseName,
dataSourceUnitName);
+ }
+}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/TableChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/TableChangedHandler.java
new file mode 100644
index 00000000000..1cb6634ab9d
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/TableChangedHandler.java
@@ -0,0 +1,70 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import com.google.common.base.Preconditions;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import
org.apache.shardingsphere.metadata.persist.node.metadata.TableMetaDataNode;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import
org.apache.shardingsphere.mode.metadata.refresher.ShardingSphereStatisticsRefreshEngine;
+
+/**
+ * Table changed handler.
+ */
+public final class TableChangedHandler {
+
+ private final ContextManager contextManager;
+
+ private final ShardingSphereStatisticsRefreshEngine
statisticsRefreshEngine;
+
+ public TableChangedHandler(final ContextManager contextManager) {
+ this.contextManager = contextManager;
+ statisticsRefreshEngine = new
ShardingSphereStatisticsRefreshEngine(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) {
+ String tableName =
TableMetaDataNode.getTableNameByActiveVersionNode(event.getKey()).orElseThrow(()
-> new IllegalStateException("Table name not found."));
+ Preconditions.checkArgument(event.getValue().equals(
+
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getKey())),
+ "Invalid active version: %s of key: %s", event.getValue(),
event.getKey());
+ ShardingSphereTable table =
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getTable().load(databaseName,
schemaName, tableName);
+
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
schemaName, table, null);
+ statisticsRefreshEngine.asyncRefresh();
+ }
+
+ /**
+ * Handle table altered.
+ *
+ * @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) {
+ String tableName =
TableMetaDataNode.getTableName(event.getKey()).orElseThrow(() -> new
IllegalStateException("Table name not found."));
+
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
schemaName, tableName, null);
+ statisticsRefreshEngine.asyncRefresh();
+ }
+}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/ViewChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/ViewChangedHandler.java
new file mode 100644
index 00000000000..b40a6225dad
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/ViewChangedHandler.java
@@ -0,0 +1,70 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import com.google.common.base.Preconditions;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
+import
org.apache.shardingsphere.metadata.persist.node.metadata.ViewMetaDataNode;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import
org.apache.shardingsphere.mode.metadata.refresher.ShardingSphereStatisticsRefreshEngine;
+
+/**
+ * View changed handler.
+ */
+public final class ViewChangedHandler {
+
+ private final ContextManager contextManager;
+
+ private final ShardingSphereStatisticsRefreshEngine
statisticsRefreshEngine;
+
+ public ViewChangedHandler(final ContextManager contextManager) {
+ this.contextManager = contextManager;
+ statisticsRefreshEngine = new
ShardingSphereStatisticsRefreshEngine(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) {
+ String viewName =
ViewMetaDataNode.getViewNameByActiveVersionNode(event.getKey()).orElseThrow(()
-> new IllegalStateException("View name not found."));
+ Preconditions.checkArgument(event.getValue().equals(
+
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getKey())),
+ "Invalid active version: %s of key: %s", event.getValue(),
event.getKey());
+ ShardingSphereView view =
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getView().load(databaseName,
schemaName, viewName);
+
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
schemaName, null, view);
+ new
ShardingSphereStatisticsRefreshEngine(contextManager).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) {
+ String viewName =
ViewMetaDataNode.getViewName(event.getKey()).orElseThrow(() -> new
IllegalStateException("View name not found."));
+
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName,
schemaName, null, viewName);
+ new
ShardingSphereStatisticsRefreshEngine(contextManager).asyncRefresh();
+ }
+}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/global/ListenerAssistedChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/global/ListenerAssistedChangedHandler.java
index b82eaf814fd..99c096c64f0 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/global/ListenerAssistedChangedHandler.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/global/ListenerAssistedChangedHandler.java
@@ -55,7 +55,7 @@ public final class ListenerAssistedChangedHandler implements
DataChangedEventHan
private static void handle(final ContextManager contextManager, final
String databaseName, final ListenerAssistedType listenerAssistedType) {
ClusterPersistRepository repository = (ClusterPersistRepository)
contextManager.getPersistServiceFacade().getRepository();
if (ListenerAssistedType.CREATE_DATABASE == listenerAssistedType) {
-
repository.watch(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), new
DatabaseMetaDataChangedListener(contextManager.getComputeNodeInstanceContext().getEventBusContext()));
+
repository.watch(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), new
DatabaseMetaDataChangedListener(contextManager));
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().addDatabase(databaseName);
} else if (ListenerAssistedType.DROP_DATABASE == listenerAssistedType)
{
repository.removeDataListener(DatabaseMetaDataNode.getDatabaseNamePath(databaseName));
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/DataChangedEventListenerRegistry.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/DataChangedEventListenerRegistry.java
index 052a89e1434..4017ce828e7 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/DataChangedEventListenerRegistry.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/DataChangedEventListenerRegistry.java
@@ -57,7 +57,7 @@ public final class DataChangedEventListenerRegistry {
}
private void registerDatabaseListeners(final String databaseName) {
-
repository.watch(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), new
DatabaseMetaDataChangedListener(eventBusContext));
+
repository.watch(DatabaseMetaDataNode.getDatabaseNamePath(databaseName), new
DatabaseMetaDataChangedListener(contextManager));
}
private void registerGlobalHandlers(final DataChangedEventHandler handler)
{
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListener.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListener.java
index b6d3322e8b4..37fa76bfb75 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListener.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListener.java
@@ -18,12 +18,12 @@
package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.type;
import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
import org.apache.shardingsphere.mode.event.DataChangedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.builder.MetaDataChangedEventBuilder;
+import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.builder.RuleConfigurationChangedEventBuilder;
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database.MetaDataChangedHandler;
import
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
import java.util.Optional;
@@ -34,11 +34,11 @@ import java.util.Optional;
@RequiredArgsConstructor
public final class DatabaseMetaDataChangedListener implements
DataChangedEventListener {
- private final EventBusContext eventBusContext;
+ private final ContextManager contextManager;
@Override
public void onChange(final DataChangedEvent event) {
- createDispatchEvent(event).ifPresent(eventBusContext::post);
+
createDispatchEvent(event).ifPresent(contextManager.getComputeNodeInstanceContext().getEventBusContext()::post);
}
private Optional<DispatchEvent> createDispatchEvent(final DataChangedEvent
event) {
@@ -47,7 +47,10 @@ public final class DatabaseMetaDataChangedListener
implements DataChangedEventLi
if (!databaseName.isPresent()) {
return Optional.empty();
}
- Optional<DispatchEvent> metaDataChangedEvent = new
MetaDataChangedEventBuilder().build(databaseName.get(), event);
- return metaDataChangedEvent.isPresent() ? metaDataChangedEvent : new
RuleConfigurationChangedEventBuilder().build(databaseName.get(), event);
+ boolean handleCompleted = new
MetaDataChangedHandler(contextManager).handle(databaseName.get(), event);
+ if (handleCompleted) {
+ return Optional.empty();
+ }
+ return new
RuleConfigurationChangedEventBuilder().build(databaseName.get(), event);
}
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/ClusterDispatchEventSubscriberRegistry.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/ClusterDispatchEventSubscriberRegistry.java
index 969b6117ebb..8d6f5ebf1d4 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/ClusterDispatchEventSubscriberRegistry.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/ClusterDispatchEventSubscriberRegistry.java
@@ -21,9 +21,7 @@ import lombok.Getter;
import org.apache.shardingsphere.infra.util.eventbus.EventSubscriber;
import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.CacheEvictedSubscriber;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.MetaDataChangedSubscriber;
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.RuleItemChangedSubscriber;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.StorageUnitEventSubscriber;
import java.util.Arrays;
import java.util.Collection;
@@ -37,9 +35,6 @@ public final class ClusterDispatchEventSubscriberRegistry {
private final Collection<EventSubscriber> subscribers;
public ClusterDispatchEventSubscriberRegistry(final ContextManager
contextManager) {
- subscribers = Arrays.asList(new
RuleItemChangedSubscriber(contextManager),
- new MetaDataChangedSubscriber(contextManager),
- new CacheEvictedSubscriber(),
- new StorageUnitEventSubscriber(contextManager));
+ subscribers = Arrays.asList(new
RuleItemChangedSubscriber(contextManager), new CacheEvictedSubscriber());
}
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriber.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriber.java
deleted file mode 100644
index 936ff6d05cf..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriber.java
+++ /dev/null
@@ -1,126 +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.event.dispatch.subscriber.type;
-
-import com.google.common.base.Preconditions;
-import com.google.common.eventbus.Subscribe;
-import lombok.RequiredArgsConstructor;
-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.manager.ContextManager;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaAddedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaDeletedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableCreatedOrAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableDroppedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewCreatedOrAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewDroppedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.DispatchEventSubscriber;
-import
org.apache.shardingsphere.mode.metadata.refresher.ShardingSphereStatisticsRefreshEngine;
-
-/**
- * Meta data changed subscriber.
- */
-@RequiredArgsConstructor
-public final class MetaDataChangedSubscriber implements
DispatchEventSubscriber {
-
- private final ContextManager contextManager;
-
- /**
- * Renew to added schema.
- *
- * @param event schema added event
- */
- @Subscribe
- public synchronized void renew(final SchemaAddedEvent event) {
-
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().addSchema(event.getDatabaseName(),
event.getSchemaName());
- refreshStatisticsData();
- }
-
- /**
- * Renew to delete schema.
- *
- * @param event schema delete event
- */
- @Subscribe
- public synchronized void renew(final SchemaDeletedEvent event) {
-
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().dropSchema(event.getDatabaseName(),
event.getSchemaName());
- refreshStatisticsData();
- }
-
- /**
- * Renew table.
- *
- * @param event create or alter table event
- */
- @Subscribe
- public synchronized void renew(final TableCreatedOrAlteredEvent event) {
- Preconditions.checkArgument(event.getActiveVersion().equals(
-
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())),
- "Invalid active version: %s of key: %s",
event.getActiveVersion(), event.getActiveVersionKey());
- ShardingSphereTable table =
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getTable()
- .load(event.getDatabaseName(), event.getSchemaName(),
event.getTableName());
-
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
event.getSchemaName(), table, null);
- refreshStatisticsData();
- }
-
- /**
- * Renew table.
- *
- * @param event drop table event
- */
- @Subscribe
- public synchronized void renew(final TableDroppedEvent event) {
-
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
event.getSchemaName(), event.getTableName(), null);
- refreshStatisticsData();
- }
-
- /**
- * Renew view.
- *
- * @param event create or alter view event
- */
- @Subscribe
- public synchronized void renew(final ViewCreatedOrAlteredEvent event) {
- Preconditions.checkArgument(event.getActiveVersion().equals(
-
contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(event.getActiveVersionKey())),
- "Invalid active version: %s of key: %s",
event.getActiveVersion(), event.getActiveVersionKey());
- ShardingSphereView view =
contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getView()
- .load(event.getDatabaseName(), event.getSchemaName(),
event.getViewName());
-
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
event.getSchemaName(), null, view);
- refreshStatisticsData();
- }
-
- /**
- * Renew view.
- *
- * @param event drop view event
- */
- @Subscribe
- public synchronized void renew(final ViewDroppedEvent event) {
-
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(event.getDatabaseName(),
event.getSchemaName(), null, event.getViewName());
- refreshStatisticsData();
- }
-
- private void refreshStatisticsData() {
- if
(contextManager.getComputeNodeInstanceContext().getModeConfiguration().isCluster()
- && InstanceType.PROXY ==
contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType())
{
- new
ShardingSphereStatisticsRefreshEngine(contextManager).asyncRefresh();
- }
- }
-}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilderTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilderTest.java
deleted file mode 100644
index 1e6f71f6af0..00000000000
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/MetaDataChangedEventBuilderTest.java
+++ /dev/null
@@ -1,98 +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.event.dispatch.builder;
-
-import org.apache.shardingsphere.mode.event.DataChangedEvent;
-import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeRegisteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.node.StorageNodeUnregisteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitRegisteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitUnregisteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaAddedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaDeletedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableCreatedOrAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableDroppedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewCreatedOrAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewDroppedEvent;
-import org.junit.jupiter.api.extension.ExtensionContext;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.Arguments;
-import org.junit.jupiter.params.provider.ArgumentsProvider;
-import org.junit.jupiter.params.provider.ArgumentsSource;
-
-import java.util.Optional;
-import java.util.stream.Stream;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-class MetaDataChangedEventBuilderTest {
-
- @ParameterizedTest(name = "{0}")
- @ArgumentsSource(TestCaseArgumentsProvider.class)
- void assertBuild(final String name, final String eventKey, final Type
type, final Class<? extends DispatchEvent> toBePostedEventType) {
- Optional<DispatchEvent> actual = new
MetaDataChangedEventBuilder().build("foo_db", new DataChangedEvent(eventKey,
"value", type));
- if (null == toBePostedEventType) {
- assertFalse(actual.isPresent());
- } else {
- assertTrue(actual.isPresent());
- assertThat(actual.get(), instanceOf(toBePostedEventType));
- }
- }
-
- private static class TestCaseArgumentsProvider implements
ArgumentsProvider {
-
- @Override
- public final Stream<? extends Arguments> provideArguments(final
ExtensionContext extensionContext) {
- return Stream.of(
- Arguments.of("changeWithoutDatabase", "/metadata",
Type.IGNORED, null),
- Arguments.of("addSchema",
"/metadata/foo_db/schemas/foo_schema", Type.ADDED, SchemaAddedEvent.class),
- Arguments.of("updateSchema",
"/metadata/foo_db/schemas/foo_schema", Type.UPDATED, SchemaAddedEvent.class),
- Arguments.of("deleteSchema",
"/metadata/foo_db/schemas/foo_schema", Type.DELETED, SchemaDeletedEvent.class),
- Arguments.of("ignoreChangeSchema",
"/metadata/foo_db/schemas/foo_schema", Type.IGNORED, null),
- Arguments.of("addTable",
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0",
Type.ADDED, TableCreatedOrAlteredEvent.class),
- Arguments.of("updateTable",
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0",
Type.UPDATED, TableCreatedOrAlteredEvent.class),
- Arguments.of("deleteTable",
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", Type.DELETED,
TableDroppedEvent.class),
- Arguments.of("invalidAddTable",
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", Type.ADDED, null),
- Arguments.of("invalidDeleteTable",
"/metadata/foo_db/schemas/foo_schema/tables/foo_tbl/active_version/0",
Type.DELETED, null),
- Arguments.of("addView",
"/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0",
Type.ADDED, ViewCreatedOrAlteredEvent.class),
- Arguments.of("updateView",
"/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0",
Type.UPDATED, ViewCreatedOrAlteredEvent.class),
- Arguments.of("deleteView",
"/metadata/foo_db/schemas/foo_schema/views/foo_view", Type.DELETED,
ViewDroppedEvent.class),
- Arguments.of("invalidAddView",
"/metadata/foo_db/schemas/foo_schema/views/foo_view", Type.ADDED, null),
- Arguments.of("invalidDeleteView",
"/metadata/foo_db/schemas/foo_schema/views/foo_view/active_version/0",
Type.DELETED, null),
- Arguments.of("registerStorageUnit",
"/metadata/foo_db/data_sources/units/foo_unit/active_version/0", Type.ADDED,
StorageUnitRegisteredEvent.class),
- Arguments.of("alterStorageUnit",
"/metadata/foo_db/data_sources/units/foo_unit/active_version/0", Type.UPDATED,
StorageUnitAlteredEvent.class),
- Arguments.of("unregisterStorageUnit",
"/metadata/foo_db/data_sources/units/foo_unit", Type.DELETED,
StorageUnitUnregisteredEvent.class),
- Arguments.of("invalidRegisterStorageNode",
"/metadata/foo_db/data_sources/units/foo_unit", Type.ADDED, null),
- Arguments.of("invalidUnregisterStorageNode",
"/metadata/foo_db/data_sources/units/foo_unit/active_version/0", Type.DELETED,
null),
- Arguments.of("ignoreChangeStorageUnit",
"/metadata/foo_db/data_sources/units/foo_unit", Type.IGNORED, null),
- Arguments.of("registerStorageNode",
"/metadata/foo_db/data_sources/nodes/foo_node/active_version/0", Type.ADDED,
StorageNodeRegisteredEvent.class),
- Arguments.of("alterStorageNode",
"/metadata/foo_db/data_sources/nodes/foo_node/active_version/0", Type.UPDATED,
StorageNodeAlteredEvent.class),
- Arguments.of("unregisterStorageNode",
"/metadata/foo_db/data_sources/nodes/foo_node", Type.DELETED,
StorageNodeUnregisteredEvent.class),
- Arguments.of("invalidRegisterStorageNode",
"/metadata/foo_db/data_sources/nodes/foo_node", Type.ADDED, null),
- Arguments.of("invalidUnregisterStorageNode",
"/metadata/foo_db/data_sources/nodes/foo_node/active_version/0", Type.DELETED,
null),
- Arguments.of("ignoreChangeStorageNode",
"/metadata/foo_db/data_sources/nodes/foo_node", Type.IGNORED, null),
- Arguments.of("invalidChangeDataSource",
"/metadata/foo_db/data_sources/other", Type.ADDED, null));
- }
- }
-}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandlerTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandlerTest.java
new file mode 100644
index 00000000000..63cc3544f24
--- /dev/null
+++
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandlerTest.java
@@ -0,0 +1,148 @@
+/*
+ * 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.event.dispatch.handler.database;
+
+import
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
+import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
+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.ArgumentMatchers.eq;
+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().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath(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().getSchemaMetaDataManager()).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().getSchemaMetaDataManager()).dropSchema("foo_db",
"foo_schema");
+ }
+
+ @Test
+ void assertHandleTableCreated() {
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+ ShardingSphereTable table = mock(ShardingSphereTable.class);
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().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",
"0", Type.ADDED));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", table, null);
+ }
+
+ @Test
+ void assertHandleTableAltered() {
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+ ShardingSphereTable table = mock(ShardingSphereTable.class);
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().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",
"0", Type.UPDATED));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", table, null);
+ }
+
+ @Test
+ void assertHandleTableDropped() {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", "",
Type.DELETED));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", "foo_tbl", null);
+ }
+
+ @Test
+ void assertHandleViewCreated() {
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+ ShardingSphereView view = mock(ShardingSphereView.class);
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().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",
"0", Type.ADDED));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", null, view);
+ }
+
+ @Test
+ void assertHandleViewAltered() {
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+ ShardingSphereView view = mock(ShardingSphereView.class);
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().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",
"0", Type.UPDATED));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", null, view);
+ }
+
+ @Test
+ void assertHandleViewDropped() {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view", "",
Type.DELETED));
+
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", null, "foo_view");
+ }
+
+ @Test
+ void assertHandleStorageUnitRegistered() {
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load("foo_db",
"foo_unit")).thenReturn(mock(DataSourcePoolProperties.class));
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version/0",
"0", Type.ADDED));
+
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).registerStorageUnit(eq("foo_db"),
any());
+ }
+
+ @Test
+ void assertHandleStorageUnitAltered() {
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
+
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load("foo_db",
"foo_unit")).thenReturn(mock(DataSourcePoolProperties.class));
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit/active_version/0",
"0", Type.UPDATED));
+
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).alterStorageUnit(eq("foo_db"),
any());
+ }
+
+ @Test
+ void assertHandleStorageUnitUnregistered() {
+
when(contextManager.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/foo_db/data_sources/units/foo_unit", "",
Type.DELETED));
+
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).unregisterStorageUnit("foo_db",
"foo_unit");
+ }
+}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListenerTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListenerTest.java
index d1cdabd4faa..6dfb047211b 100644
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListenerTest.java
+++
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/listener/type/DatabaseMetaDataChangedListenerTest.java
@@ -17,12 +17,13 @@
package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.type;
-import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
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;
@@ -35,29 +36,29 @@ class DatabaseMetaDataChangedListenerTest {
private DatabaseMetaDataChangedListener listener;
- @Mock
- private EventBusContext eventBusContext;
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private ContextManager contextManager;
@BeforeEach
void setUp() {
- listener = new DatabaseMetaDataChangedListener(eventBusContext);
+ listener = new DatabaseMetaDataChangedListener(contextManager);
}
@Test
void assertOnChangeWithoutDatabase() {
listener.onChange(new DataChangedEvent("/metadata", "value",
Type.IGNORED));
- verify(eventBusContext, times(0)).post(any());
+
verify(contextManager.getComputeNodeInstanceContext().getEventBusContext(),
times(0)).post(any());
}
@Test
void assertOnChangeWithMetaDataChanged() {
listener.onChange(new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema", "value", Type.ADDED));
- verify(eventBusContext).post(any());
+
verify(contextManager.getComputeNodeInstanceContext().getEventBusContext(),
times(0)).post(any());
}
@Test
void assertOnChangeWithRuleConfigurationChanged() {
listener.onChange(new
DataChangedEvent("/metadata/foo_db/schemas/foo_schema/rule/", "value",
Type.ADDED));
- verify(eventBusContext, times(0)).post(any());
+
verify(contextManager.getComputeNodeInstanceContext().getEventBusContext(),
times(0)).post(any());
}
}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriberTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriberTest.java
deleted file mode 100644
index 2482e872109..00000000000
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/MetaDataChangedSubscriberTest.java
+++ /dev/null
@@ -1,105 +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.event.dispatch.subscriber.type;
-
-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.manager.ContextManager;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaAddedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.SchemaDeletedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableCreatedOrAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.table.TableDroppedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewCreatedOrAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.metadata.schema.view.ViewDroppedEvent;
-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.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(MockitoExtension.class)
-@MockitoSettings(strictness = Strictness.LENIENT)
-class MetaDataChangedSubscriberTest {
-
- private MetaDataChangedSubscriber subscriber;
-
- @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);
- subscriber = new MetaDataChangedSubscriber(contextManager);
- }
-
- @Test
- void assertRenewWithSchemaAddedEvent() {
-
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
- subscriber.renew(new SchemaAddedEvent("foo_db", "foo_schema"));
-
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).addSchema("foo_db",
"foo_schema");
- }
-
- @Test
- void assertRenewWithSchemaDeletedEvent() {
-
when(contextManager.getComputeNodeInstanceContext().getInstance().getMetaData().getType()).thenReturn(InstanceType.PROXY);
- subscriber.renew(new SchemaDeletedEvent("foo_db", "foo_schema"));
-
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).dropSchema("foo_db",
"foo_schema");
- }
-
- @Test
- void assertRenewWithCreateOrAlterTableEvent() {
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
- ShardingSphereTable table = mock(ShardingSphereTable.class);
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getTable().load("foo_db",
"foo_schema", "foo_tbl"))
- .thenReturn(table);
- subscriber.renew(new TableCreatedOrAlteredEvent("foo_db",
"foo_schema", "foo_tbl", "key", "value"));
-
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", table, null);
- }
-
- @Test
- void assertRenewWithDropTableEvent() {
- subscriber.renew(new TableDroppedEvent("foo_db", "foo_schema",
"foo_tbl"));
-
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", "foo_tbl", null);
- }
-
- @Test
- void assertRenewWithCreateOrAlterViewEvent() {
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
- ShardingSphereView view = mock(ShardingSphereView.class);
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDatabaseMetaDataFacade().getView().load("foo_db",
"foo_schema", "foo_view"))
- .thenReturn(view);
- subscriber.renew(new ViewCreatedOrAlteredEvent("foo_db", "foo_schema",
"foo_view", "key", "value"));
-
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", null, view);
- }
-
- @Test
- void assertRenewWithDropViewEvent() {
- subscriber.renew(new ViewDroppedEvent("foo_db", "foo_schema",
"foo_view", "key", "value"));
-
verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db",
"foo_schema", null, "foo_view");
- }
-}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/StorageUnitEventSubscriberTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/StorageUnitEventSubscriberTest.java
deleted file mode 100644
index 60598865b7b..00000000000
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/StorageUnitEventSubscriberTest.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.manager.cluster.event.dispatch.subscriber.type;
-
-import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitAlteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitRegisteredEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.datasource.unit.StorageUnitUnregisteredEvent;
-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.ArgumentMatchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(MockitoExtension.class)
-class StorageUnitEventSubscriberTest {
-
- private StorageUnitEventSubscriber subscriber;
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private ContextManager contextManager;
-
- @BeforeEach
- void setUp() {
- subscriber = new StorageUnitEventSubscriber(contextManager);
- }
-
- @Test
- void assertRenewWithRegisterStorageUnitEvent() {
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load("foo_db",
"foo_unit")).thenReturn(mock(DataSourcePoolProperties.class));
- subscriber.renew(new StorageUnitRegisteredEvent("foo_db", "foo_unit",
"key", "value"));
-
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).registerStorageUnit(eq("foo_db"),
any());
- }
-
- @Test
- void assertRenewWithAlterStorageUnitEvent() {
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getMetaDataVersionPersistService().getActiveVersionByFullPath("key")).thenReturn("value");
-
when(contextManager.getPersistServiceFacade().getMetaDataPersistService().getDataSourceUnitService().load("foo_db",
"foo_unit")).thenReturn(mock(DataSourcePoolProperties.class));
- subscriber.renew(new StorageUnitAlteredEvent("foo_db", "foo_unit",
"key", "value"));
-
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).alterStorageUnit(eq("foo_db"),
any());
- }
-
- @Test
- void assertRenewWithUnregisterStorageUnitEvent() {
-
when(contextManager.getMetaDataContexts().getMetaData().containsDatabase("foo_db")).thenReturn(true);
- subscriber.renew(new StorageUnitUnregisteredEvent("foo_db",
"foo_unit"));
-
verify(contextManager.getMetaDataContextManager().getStorageUnitManager()).unregisterStorageUnit("foo_db",
"foo_unit");
- }
-}