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 d3c5bcc230d Use RuleConfigurationChangedHandler to instead of
RuleConfigurationChangedEventBuilder (#34228)
d3c5bcc230d is described below
commit d3c5bcc230d718e1bc725cdaf3895029363597d1
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jan 2 23:53:48 2025 +0800
Use RuleConfigurationChangedHandler to instead of
RuleConfigurationChangedEventBuilder (#34228)
* Use RuleConfigurationChangedHandler to instead of
RuleConfigurationChangedEventBuilder
* Use RuleConfigurationChangedHandler to instead of
RuleConfigurationChangedEventBuilder
---
.../cluster/ClusterContextManagerBuilder.java | 2 +-
.../RuleConfigurationChangedEventBuilder.java | 94 ---------------
.../dispatch/event/rule/RuleItemChangedEvent.java | 33 ------
.../event/rule/alter/AlterNamedRuleItemEvent.java | 39 -------
.../event/rule/alter/AlterRuleItemEvent.java | 47 --------
.../event/rule/alter/AlterUniqueRuleItemEvent.java | 37 ------
.../event/rule/drop/DropNamedRuleItemEvent.java | 35 ------
.../event/rule/drop/DropRuleItemEvent.java | 33 ------
.../event/rule/drop/DropUniqueRuleItemEvent.java | 33 ------
.../{ => metadata}/MetaDataChangedHandler.java | 2 +-
.../{ => metadata}/SchemaChangedHandler.java | 2 +-
.../{ => metadata}/StorageNodeChangedHandler.java | 2 +-
.../{ => metadata}/StorageUnitChangedHandler.java | 2 +-
.../{ => metadata}/TableChangedHandler.java | 2 +-
.../{ => metadata}/ViewChangedHandler.java | 2 +-
.../rule/RuleConfigurationChangedHandler.java | 117 +++++++++++++++++++
.../type/DatabaseMetaDataChangedListener.java | 27 +++--
.../ClusterDispatchEventSubscriberRegistry.java | 8 +-
.../subscriber/type/RuleItemChangedSubscriber.java | 93 ---------------
.../RuleConfigurationChangedEventBuilderTest.java | 125 --------------------
.../{ => metadata}/MetaDataChangedHandlerTest.java | 2 +-
.../rule/RuleConfigurationChangedHandlerTest.java | 128 +++++++++++++++++++++
.../type/RuleItemChangedSubscriberTest.java | 66 -----------
23 files changed, 269 insertions(+), 662 deletions(-)
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index cdca1a7fdab..b614155a1f6 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -83,7 +83,7 @@ public final class ClusterContextManagerBuilder implements
ContextManagerBuilder
new DataChangedEventListenerRegistry(contextManager,
getDatabaseNames(param,
contextManager.getPersistServiceFacade().getMetaDataPersistService())).register();
ClusterEventSubscriberRegistry eventSubscriberRegistry = new
ClusterEventSubscriberRegistry(contextManager.getComputeNodeInstanceContext().getEventBusContext());
eventSubscriberRegistry.register(createDeliverEventSubscribers(repository));
- eventSubscriberRegistry.register(new
ClusterDispatchEventSubscriberRegistry(contextManager).getSubscribers());
+ eventSubscriberRegistry.register(new
ClusterDispatchEventSubscriberRegistry().getSubscribers());
}
private Collection<String> getDatabaseNames(final
ContextManagerBuilderParameter param, final MetaDataPersistService
metaDataPersistService) {
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/RuleConfigurationChangedEventBuilder.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/RuleConfigurationChangedEventBuilder.java
deleted file mode 100644
index a4cd3342568..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/RuleConfigurationChangedEventBuilder.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.mode.manager.cluster.event.dispatch.builder;
-
-import com.google.common.base.Strings;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
-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.rule.RuleItemChangedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.alter.AlterNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.alter.AlterUniqueRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.drop.DropNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.drop.DropUniqueRuleItemEvent;
-import org.apache.shardingsphere.mode.path.rule.RuleNodePath;
-import org.apache.shardingsphere.mode.path.rule.item.NamedRuleItemNodePath;
-import org.apache.shardingsphere.mode.path.rule.item.UniqueRuleItemNodePath;
-import org.apache.shardingsphere.mode.spi.RuleNodePathProvider;
-
-import java.util.Map.Entry;
-import java.util.Optional;
-
-/**
- * Rule configuration changed event builder.
- */
-public final class RuleConfigurationChangedEventBuilder {
-
- /**
- * Build rule changed event.
- *
- * @param databaseName database name
- * @param event data changed event
- * @return built event
- */
- public Optional<DispatchEvent> build(final String databaseName, final
DataChangedEvent event) {
- for (RuleNodePathProvider each :
ShardingSphereServiceLoader.getServiceInstances(RuleNodePathProvider.class)) {
- Optional<DispatchEvent> result = build(each.getRuleNodePath(),
databaseName, event);
- if (result.isPresent()) {
- return result;
- }
- }
- return Optional.empty();
- }
-
- private Optional<DispatchEvent> build(final RuleNodePath ruleNodePath,
final String databaseName, final DataChangedEvent event) {
- if (!ruleNodePath.getRoot().isValidatedPath(event.getKey()) ||
Type.DELETED != event.getType() && Strings.isNullOrEmpty(event.getValue())) {
- return Optional.empty();
- }
- for (Entry<String, NamedRuleItemNodePath> entry :
ruleNodePath.getNamedItems().entrySet()) {
- Optional<String> itemName;
- if (Type.ADDED == event.getType() || Type.UPDATED ==
event.getType()) {
- itemName =
entry.getValue().getNameByActiveVersion(event.getKey());
- } else {
- itemName = entry.getValue().getNameByItemPath(event.getKey());
- }
- if (itemName.isPresent()) {
- return Optional.of(create(databaseName, itemName.get(), event,
ruleNodePath.getRoot().getRuleType() + "." + entry.getKey()));
- }
- }
- for (Entry<String, UniqueRuleItemNodePath> entry :
ruleNodePath.getUniqueItems().entrySet()) {
- if (entry.getValue().isActiveVersionPath(event.getKey())) {
- return Optional.of(create(databaseName, event,
ruleNodePath.getRoot().getRuleType() + "." + entry.getKey()));
- }
- }
- return Optional.empty();
- }
-
- private RuleItemChangedEvent create(final String databaseName, final
String itemName, final DataChangedEvent event, final String type) {
- return Type.ADDED == event.getType() || Type.UPDATED == event.getType()
- ? new AlterNamedRuleItemEvent(databaseName, itemName,
event.getKey(), event.getValue(), type)
- : new DropNamedRuleItemEvent(databaseName, itemName, type);
- }
-
- private RuleItemChangedEvent create(final String databaseName, final
DataChangedEvent event, final String type) {
- return Type.ADDED == event.getType() || Type.UPDATED == event.getType()
- ? new AlterUniqueRuleItemEvent(databaseName, event.getKey(),
event.getValue(), type)
- : new DropUniqueRuleItemEvent(databaseName, type);
- }
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/RuleItemChangedEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/RuleItemChangedEvent.java
deleted file mode 100644
index 61004bbfec2..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/RuleItemChangedEvent.java
+++ /dev/null
@@ -1,33 +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.rule;
-
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.DispatchEvent;
-
-/**
- * Rule item changed event.
- */
-public interface RuleItemChangedEvent extends DispatchEvent {
-
- /**
- * Get rule item type.
- *
- * @return rule item type
- */
- String getType();
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/alter/AlterNamedRuleItemEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/alter/AlterNamedRuleItemEvent.java
deleted file mode 100644
index 00fba8b5fc2..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/alter/AlterNamedRuleItemEvent.java
+++ /dev/null
@@ -1,39 +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.rule.alter;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-/**
- * Alter named rule item event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class AlterNamedRuleItemEvent implements AlterRuleItemEvent {
-
- private final String databaseName;
-
- private final String itemName;
-
- private final String activeVersionKey;
-
- private final String activeVersion;
-
- private final String type;
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/alter/AlterRuleItemEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/alter/AlterRuleItemEvent.java
deleted file mode 100644
index b22f8a97f1d..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/alter/AlterRuleItemEvent.java
+++ /dev/null
@@ -1,47 +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.rule.alter;
-
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.RuleItemChangedEvent;
-
-/**
- * Alter rule item event.
- */
-public interface AlterRuleItemEvent extends RuleItemChangedEvent {
-
- /**
- * Get database name.
- *
- * @return database name
- */
- String getDatabaseName();
-
- /**
- * Get active version key.
- *
- * @return active version key
- */
- String getActiveVersionKey();
-
- /**
- * Get active version.
- *
- * @return active version
- */
- String getActiveVersion();
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/alter/AlterUniqueRuleItemEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/alter/AlterUniqueRuleItemEvent.java
deleted file mode 100644
index fc1107ede6a..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/alter/AlterUniqueRuleItemEvent.java
+++ /dev/null
@@ -1,37 +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.rule.alter;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-/**
- * Alter unique rule item event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class AlterUniqueRuleItemEvent implements AlterRuleItemEvent {
-
- private final String databaseName;
-
- private final String activeVersionKey;
-
- private final String activeVersion;
-
- private final String type;
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/drop/DropNamedRuleItemEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/drop/DropNamedRuleItemEvent.java
deleted file mode 100644
index 51bb4531ac9..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/drop/DropNamedRuleItemEvent.java
+++ /dev/null
@@ -1,35 +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.rule.drop;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-/**
- * Drop named rule item event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class DropNamedRuleItemEvent implements DropRuleItemEvent {
-
- private final String databaseName;
-
- private final String itemName;
-
- private final String type;
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/drop/DropRuleItemEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/drop/DropRuleItemEvent.java
deleted file mode 100644
index 84793caea33..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/drop/DropRuleItemEvent.java
+++ /dev/null
@@ -1,33 +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.rule.drop;
-
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.RuleItemChangedEvent;
-
-/**
- * Drop rule item event.
- */
-public interface DropRuleItemEvent extends RuleItemChangedEvent {
-
- /**
- * Get database name.
- *
- * @return database name
- */
- String getDatabaseName();
-}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/drop/DropUniqueRuleItemEvent.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/drop/DropUniqueRuleItemEvent.java
deleted file mode 100644
index 1b466cdb8cf..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/event/rule/drop/DropUniqueRuleItemEvent.java
+++ /dev/null
@@ -1,33 +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.rule.drop;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-
-/**
- * Drop unique rule item event.
- */
-@RequiredArgsConstructor
-@Getter
-public final class DropUniqueRuleItemEvent implements DropRuleItemEvent {
-
- private final String databaseName;
-
- private final String type;
-}
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/metadata/MetaDataChangedHandler.java
similarity index 99%
rename from
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandler.java
rename to
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/metadata/MetaDataChangedHandler.java
index 45b3ae2c54a..3938653164f 100644
---
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/metadata/MetaDataChangedHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database;
+package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database.metadata;
import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
import
org.apache.shardingsphere.metadata.persist.node.metadata.DataSourceMetaDataNode;
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/metadata/SchemaChangedHandler.java
similarity index 98%
rename from
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/SchemaChangedHandler.java
rename to
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/metadata/SchemaChangedHandler.java
index e06af0c2afb..e4a7287b746 100644
---
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/metadata/SchemaChangedHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database;
+package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database.metadata;
import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.metadata.refresher.ShardingSphereStatisticsRefreshEngine;
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/metadata/StorageNodeChangedHandler.java
similarity index 98%
rename from
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageNodeChangedHandler.java
rename to
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/metadata/StorageNodeChangedHandler.java
index 08118079737..46847319a3d 100644
---
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/metadata/StorageNodeChangedHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database;
+package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database.metadata;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.mode.event.DataChangedEvent;
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/metadata/StorageUnitChangedHandler.java
similarity index 99%
rename from
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/StorageUnitChangedHandler.java
rename to
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/metadata/StorageUnitChangedHandler.java
index fff5ccacaf5..5573781aa5c 100644
---
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/metadata/StorageUnitChangedHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database;
+package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database.metadata;
import com.google.common.base.Preconditions;
import lombok.RequiredArgsConstructor;
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/metadata/TableChangedHandler.java
similarity index 99%
rename from
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/TableChangedHandler.java
rename to
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/metadata/TableChangedHandler.java
index 860fbc52c65..c4a617e5b1f 100644
---
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/metadata/TableChangedHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database;
+package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database.metadata;
import com.google.common.base.Preconditions;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
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/metadata/ViewChangedHandler.java
similarity index 99%
rename from
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/ViewChangedHandler.java
rename to
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/metadata/ViewChangedHandler.java
index 1612947e174..6bc01b6aa4b 100644
---
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/metadata/ViewChangedHandler.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database;
+package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database.metadata;
import com.google.common.base.Preconditions;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView;
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/rule/RuleConfigurationChangedHandler.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/rule/RuleConfigurationChangedHandler.java
new file mode 100644
index 00000000000..5dca721ef45
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/rule/RuleConfigurationChangedHandler.java
@@ -0,0 +1,117 @@
+/*
+ * 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.rule;
+
+import com.google.common.base.Strings;
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.path.rule.RuleNodePath;
+import org.apache.shardingsphere.mode.path.rule.item.NamedRuleItemNodePath;
+import org.apache.shardingsphere.mode.path.rule.item.UniqueRuleItemNodePath;
+import org.apache.shardingsphere.mode.spi.RuleNodePathProvider;
+import org.apache.shardingsphere.mode.spi.item.AlterNamedRuleItem;
+import org.apache.shardingsphere.mode.spi.item.AlterUniqueRuleItem;
+import org.apache.shardingsphere.mode.spi.item.DropNamedRuleItem;
+import org.apache.shardingsphere.mode.spi.item.DropUniqueRuleItem;
+
+import java.sql.SQLException;
+import java.util.Map.Entry;
+import java.util.Optional;
+
+/**
+ * Rule configuration changed handler.
+ */
+@RequiredArgsConstructor
+public final class RuleConfigurationChangedHandler {
+
+ private final ContextManager contextManager;
+
+ /**
+ * Handle rule changed.
+ *
+ * @param databaseName database name
+ * @param event data changed event
+ * @throws SQLException SQL Exception
+ */
+ public void handle(final String databaseName, final DataChangedEvent
event) throws SQLException {
+ for (RuleNodePathProvider each :
ShardingSphereServiceLoader.getServiceInstances(RuleNodePathProvider.class)) {
+ if (handle(each.getRuleNodePath(), databaseName, event)) {
+ return;
+ }
+ }
+ }
+
+ private boolean handle(final RuleNodePath ruleNodePath, final String
databaseName, final DataChangedEvent event) throws SQLException {
+ if (!ruleNodePath.getRoot().isValidatedPath(event.getKey()) ||
Type.DELETED != event.getType() && Strings.isNullOrEmpty(event.getValue())) {
+ return false;
+ }
+ return handleNamedRuleItems(ruleNodePath, databaseName, event) ||
handleUniqueRuleItems(ruleNodePath, databaseName, event);
+ }
+
+ private boolean handleNamedRuleItems(final RuleNodePath ruleNodePath,
final String databaseName, final DataChangedEvent event) throws SQLException {
+ for (Entry<String, NamedRuleItemNodePath> entry :
ruleNodePath.getNamedItems().entrySet()) {
+ Optional<String> itemName = getItemName(event, entry.getValue());
+ if (itemName.isPresent()) {
+ handleNamedRuleItem(ruleNodePath, databaseName,
itemName.get(), entry.getKey(), event);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void handleNamedRuleItem(final RuleNodePath ruleNodePath, final
String databaseName, final String itemName, final String path, final
DataChangedEvent event) throws SQLException {
+ String type = ruleNodePath.getRoot().getRuleType() + "." + path;
+ if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) {
+
contextManager.getMetaDataContextManager().getRuleItemManager().alterRuleItem(new
AlterNamedRuleItem(databaseName, itemName, event.getKey(), event.getValue(),
type));
+ } else if (Type.DELETED == event.getType()) {
+
contextManager.getMetaDataContextManager().getRuleItemManager().dropRuleItem(new
DropNamedRuleItem(databaseName, itemName, type));
+ }
+ }
+
+ private boolean handleUniqueRuleItems(final RuleNodePath ruleNodePath,
final String databaseName, final DataChangedEvent event) throws SQLException {
+ for (Entry<String, UniqueRuleItemNodePath> entry :
ruleNodePath.getUniqueItems().entrySet()) {
+ if (entry.getValue().isActiveVersionPath(event.getKey())) {
+ handleUniqueRuleItem(ruleNodePath, databaseName,
entry.getKey(), event);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ private void handleUniqueRuleItem(final RuleNodePath ruleNodePath, final
String databaseName, final String path, final DataChangedEvent event) throws
SQLException {
+ String type = ruleNodePath.getRoot().getRuleType() + "." + path;
+ if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) {
+
contextManager.getMetaDataContextManager().getRuleItemManager().alterRuleItem(new
AlterUniqueRuleItem(databaseName, event.getKey(), event.getValue(), type));
+ } else if (Type.DELETED == event.getType()) {
+
contextManager.getMetaDataContextManager().getRuleItemManager().dropRuleItem(new
DropUniqueRuleItem(databaseName, type));
+ }
+ }
+
+ private Optional<String> getItemName(final DataChangedEvent event, final
NamedRuleItemNodePath ruleItemNodePath) {
+ if (Type.ADDED == event.getType() || Type.UPDATED == event.getType()) {
+ return ruleItemNodePath.getNameByActiveVersion(event.getKey());
+ }
+ if (Type.DELETED == event.getType()) {
+ return ruleItemNodePath.getNameByItemPath(event.getKey());
+ }
+ return Optional.empty();
+ }
+}
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 37fa76bfb75..f026ee4f0cf 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,14 +18,15 @@
package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.type;
import lombok.RequiredArgsConstructor;
+import
org.apache.shardingsphere.infra.exception.core.external.sql.type.wrapper.SQLWrapperException;
import org.apache.shardingsphere.metadata.persist.node.DatabaseMetaDataNode;
import org.apache.shardingsphere.mode.event.DataChangedEvent;
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.manager.cluster.event.dispatch.handler.database.metadata.MetaDataChangedHandler;
+import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database.rule.RuleConfigurationChangedHandler;
import
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
+import java.sql.SQLException;
import java.util.Optional;
/**
@@ -38,19 +39,17 @@ public final class DatabaseMetaDataChangedListener
implements DataChangedEventLi
@Override
public void onChange(final DataChangedEvent event) {
-
createDispatchEvent(event).ifPresent(contextManager.getComputeNodeInstanceContext().getEventBusContext()::post);
- }
-
- private Optional<DispatchEvent> createDispatchEvent(final DataChangedEvent
event) {
- String key = event.getKey();
- Optional<String> databaseName =
DatabaseMetaDataNode.getDatabaseNameBySchemaNode(key);
+ Optional<String> databaseName =
DatabaseMetaDataNode.getDatabaseNameBySchemaNode(event.getKey());
if (!databaseName.isPresent()) {
- return Optional.empty();
+ return;
+ }
+ if (new
MetaDataChangedHandler(contextManager).handle(databaseName.get(), event)) {
+ return;
}
- boolean handleCompleted = new
MetaDataChangedHandler(contextManager).handle(databaseName.get(), event);
- if (handleCompleted) {
- return Optional.empty();
+ try {
+ new
RuleConfigurationChangedHandler(contextManager).handle(databaseName.get(),
event);
+ } catch (final SQLException ex) {
+ throw new SQLWrapperException(ex);
}
- 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 8d6f5ebf1d4..0fd96631791 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
@@ -19,12 +19,10 @@ package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber
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.RuleItemChangedSubscriber;
-import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
/**
* Cluster dispatch event subscriber registry.
@@ -34,7 +32,7 @@ public final class ClusterDispatchEventSubscriberRegistry {
private final Collection<EventSubscriber> subscribers;
- public ClusterDispatchEventSubscriberRegistry(final ContextManager
contextManager) {
- subscribers = Arrays.asList(new
RuleItemChangedSubscriber(contextManager), new CacheEvictedSubscriber());
+ public ClusterDispatchEventSubscriberRegistry() {
+ subscribers = Collections.singleton(new CacheEvictedSubscriber());
}
}
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/RuleItemChangedSubscriber.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/RuleItemChangedSubscriber.java
deleted file mode 100644
index 0dc53fd1c9c..00000000000
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/RuleItemChangedSubscriber.java
+++ /dev/null
@@ -1,93 +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.eventbus.Subscribe;
-import lombok.RequiredArgsConstructor;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.alter.AlterNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.alter.AlterRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.alter.AlterUniqueRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.drop.DropNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.drop.DropRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.drop.DropUniqueRuleItemEvent;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.DispatchEventSubscriber;
-import org.apache.shardingsphere.mode.metadata.manager.RuleItemManager;
-import org.apache.shardingsphere.mode.spi.item.AlterNamedRuleItem;
-import org.apache.shardingsphere.mode.spi.item.AlterRuleItem;
-import org.apache.shardingsphere.mode.spi.item.AlterUniqueRuleItem;
-import org.apache.shardingsphere.mode.spi.item.DropNamedRuleItem;
-import org.apache.shardingsphere.mode.spi.item.DropRuleItem;
-import org.apache.shardingsphere.mode.spi.item.DropUniqueRuleItem;
-
-import java.sql.SQLException;
-
-/**
- * Rule item changed subscriber.
- */
-@RequiredArgsConstructor
-public final class RuleItemChangedSubscriber implements
DispatchEventSubscriber {
-
- private final RuleItemManager ruleItemManager;
-
- public RuleItemChangedSubscriber(final ContextManager contextManager) {
- ruleItemManager =
contextManager.getMetaDataContextManager().getRuleItemManager();
- }
-
- /**
- * Renew with alter rule item.
- *
- * @param event alter rule item event
- * @throws SQLException SQL Exception
- */
- @Subscribe
- public void renew(final AlterRuleItemEvent event) throws SQLException {
- // TODO remove the event and this subscriber
- ruleItemManager.alterRuleItem(convertToAlterRuleItem(event));
- }
-
- /**
- * Renew with drop rule item.
- *
- * @param event drop rule item event
- * @throws SQLException SQL Exception
- */
- @Subscribe
- public void renew(final DropRuleItemEvent event) throws SQLException {
- // TODO remove the event and this subscriber
- ruleItemManager.dropRuleItem(convertToDropRuleItem(event));
- }
-
- private AlterRuleItem convertToAlterRuleItem(final AlterRuleItemEvent
event) {
- if (event instanceof AlterNamedRuleItemEvent) {
- AlterNamedRuleItemEvent alterNamedRuleItemEvent =
(AlterNamedRuleItemEvent) event;
- return new
AlterNamedRuleItem(alterNamedRuleItemEvent.getDatabaseName(),
alterNamedRuleItemEvent.getItemName(), event.getActiveVersionKey(),
event.getActiveVersion(), event.getType());
- }
- AlterUniqueRuleItemEvent alterUniqueRuleItemEvent =
(AlterUniqueRuleItemEvent) event;
- return new
AlterUniqueRuleItem(alterUniqueRuleItemEvent.getDatabaseName(),
alterUniqueRuleItemEvent.getActiveVersionKey(), event.getActiveVersion(),
event.getType());
- }
-
- private DropRuleItem convertToDropRuleItem(final DropRuleItemEvent event) {
- if (event instanceof DropNamedRuleItemEvent) {
- DropNamedRuleItemEvent dropNamedRuleItemEvent =
(DropNamedRuleItemEvent) event;
- return new
DropNamedRuleItem(dropNamedRuleItemEvent.getDatabaseName(),
dropNamedRuleItemEvent.getItemName(), event.getType());
- }
- DropUniqueRuleItemEvent dropUniqueRuleItemEvent =
(DropUniqueRuleItemEvent) event;
- return new
DropUniqueRuleItem(dropUniqueRuleItemEvent.getDatabaseName(), event.getType());
- }
-}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/RuleConfigurationChangedEventBuilderTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/RuleConfigurationChangedEventBuilderTest.java
deleted file mode 100644
index 719cee3b2b7..00000000000
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/builder/RuleConfigurationChangedEventBuilderTest.java
+++ /dev/null
@@ -1,125 +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.infra.spi.ShardingSphereServiceLoader;
-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.rule.alter.AlterNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.alter.AlterUniqueRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.drop.DropNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.drop.DropUniqueRuleItemEvent;
-import org.apache.shardingsphere.mode.path.rule.RuleNodePath;
-import org.apache.shardingsphere.mode.spi.RuleNodePathProvider;
-import org.apache.shardingsphere.test.mock.AutoMockExtension;
-import org.apache.shardingsphere.test.mock.StaticMockSettings;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.ExtendWith;
-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.Collections;
-import java.util.Optional;
-import java.util.stream.Stream;
-
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.fail;
-import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-@ExtendWith(AutoMockExtension.class)
-@StaticMockSettings(ShardingSphereServiceLoader.class)
-class RuleConfigurationChangedEventBuilderTest {
-
- @Test
- void assertBuildWithoutRuleNodePathProvider() {
-
when(ShardingSphereServiceLoader.getServiceInstances(RuleNodePathProvider.class)).thenReturn(Collections.emptyList());
- assertFalse(new RuleConfigurationChangedEventBuilder().build("foo_db",
new DataChangedEvent("k", "v", Type.IGNORED)).isPresent());
- }
-
- @ParameterizedTest(name = "{0}")
- @ArgumentsSource(TestCaseArgumentsProvider.class)
- void assertBuild(final String name, final String eventKey, final String
eventValue, final Type type, final boolean isEventPresent, final Class<?
extends DispatchEvent> dispatchEventClass) {
- RuleNodePathProvider ruleNodePathProvider =
mock(RuleNodePathProvider.class, RETURNS_DEEP_STUBS);
- when(ruleNodePathProvider.getRuleNodePath()).thenReturn(new
RuleNodePath("fixture", Collections.singleton("named"),
Collections.singleton("unique")));
-
when(ShardingSphereServiceLoader.getServiceInstances(RuleNodePathProvider.class)).thenReturn(Collections.singleton(ruleNodePathProvider));
- Optional<DispatchEvent> actual = new
RuleConfigurationChangedEventBuilder().build("foo_db", new
DataChangedEvent(eventKey, eventValue, type));
- assertThat(actual.isPresent(), is(isEventPresent));
- if (actual.isPresent()) {
- if (dispatchEventClass == AlterNamedRuleItemEvent.class) {
- assertDispatchEvent((AlterNamedRuleItemEvent) actual.get());
- } else if (dispatchEventClass == DropNamedRuleItemEvent.class) {
- assertDispatchEvent((DropNamedRuleItemEvent) actual.get());
- } else if (dispatchEventClass == AlterUniqueRuleItemEvent.class) {
- assertDispatchEvent((AlterUniqueRuleItemEvent) actual.get());
- } else if (dispatchEventClass == DropUniqueRuleItemEvent.class) {
- assertDispatchEvent((DropUniqueRuleItemEvent) actual.get());
- } else {
- fail("No such event type.");
- }
- }
- }
-
- private void assertDispatchEvent(final AlterNamedRuleItemEvent actual) {
- assertThat(actual.getDatabaseName(), is("foo_db"));
- assertThat(actual.getItemName(), is("xxx"));
- assertThat(actual.getType(), is("fixture.named"));
- }
-
- private void assertDispatchEvent(final DropNamedRuleItemEvent actual) {
- assertThat(actual.getDatabaseName(), is("foo_db"));
- assertThat(actual.getItemName(), is("xxx"));
- assertThat(actual.getType(), is("fixture.named"));
- }
-
- private void assertDispatchEvent(final AlterUniqueRuleItemEvent actual) {
- assertThat(actual.getDatabaseName(), is("foo_db"));
- assertThat(actual.getActiveVersionKey(),
is("/metadata/fixture/rules/fixture/unique/active_version"));
- assertThat(actual.getActiveVersion(), is("foo"));
- assertThat(actual.getType(), is("fixture.unique"));
- }
-
- private void assertDispatchEvent(final DropUniqueRuleItemEvent actual) {
- assertThat(actual.getDatabaseName(), is("foo_db"));
- assertThat(actual.getType(), is("fixture.unique"));
- }
-
- private static class TestCaseArgumentsProvider implements
ArgumentsProvider {
-
- @Override
- public Stream<? extends Arguments> provideArguments(final
ExtensionContext extensionContext) {
- return Stream.of(
- Arguments.of("InvalidPath",
"/metadata/invalid/rules/fixture", "foo", Type.ADDED, false, null),
- Arguments.of("AddEventWithEmptyValue",
"/metadata/fixture/rules/fixture/versions/0", "", Type.ADDED, false, null),
- Arguments.of("PathNotFound",
"/metadata/fixture/rules/fixture/versions/0", "foo", Type.ADDED, false, null),
- Arguments.of("AddEventWithNamedRuleItemNodePath",
"/metadata/fixture/rules/fixture/named/xxx/active_version", "foo", Type.ADDED,
true, AlterNamedRuleItemEvent.class),
- Arguments.of("UpdateEventWithNamedRuleItemNodePath",
"/metadata/fixture/rules/fixture/named/xxx/active_version", "foo",
Type.UPDATED, true, AlterNamedRuleItemEvent.class),
- Arguments.of("DeleteEventWithNamedRuleItemNodePath",
"/metadata/fixture/rules/fixture/named/xxx", "foo", Type.DELETED, true,
DropNamedRuleItemEvent.class),
- Arguments.of("AddEventWithUniqueRuleItemNodePath",
"/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.ADDED,
true, AlterUniqueRuleItemEvent.class),
- Arguments.of("UpdateEventWithUniqueRuleItemNodePath",
"/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.UPDATED,
true, AlterUniqueRuleItemEvent.class),
- Arguments.of("DeleteEventWithUniqueRuleItemNodePath",
"/metadata/fixture/rules/fixture/unique/active_version", "foo", Type.DELETED,
true, DropUniqueRuleItemEvent.class));
- }
- }
-}
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/metadata/MetaDataChangedHandlerTest.java
similarity index 99%
rename from
mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/MetaDataChangedHandlerTest.java
rename to
mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java
index 63cc3544f24..c9a002d7a1b 100644
---
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/metadata/MetaDataChangedHandlerTest.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database;
+package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.handler.database.metadata;
import
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/rule/RuleConfigurationChangedHandlerTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/rule/RuleConfigurationChangedHandlerTest.java
new file mode 100644
index 00000000000..5a7eb4e9cac
--- /dev/null
+++
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/handler/database/rule/RuleConfigurationChangedHandlerTest.java
@@ -0,0 +1,128 @@
+/*
+ * 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.rule;
+
+import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.path.rule.RuleNodePath;
+import org.apache.shardingsphere.mode.spi.RuleNodePathProvider;
+import org.apache.shardingsphere.mode.spi.item.AlterNamedRuleItem;
+import org.apache.shardingsphere.mode.spi.item.AlterUniqueRuleItem;
+import org.apache.shardingsphere.mode.spi.item.DropNamedRuleItem;
+import org.apache.shardingsphere.mode.spi.item.DropUniqueRuleItem;
+import org.apache.shardingsphere.test.mock.AutoMockExtension;
+import org.apache.shardingsphere.test.mock.StaticMockSettings;
+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 java.sql.SQLException;
+import java.util.Collections;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(AutoMockExtension.class)
+@StaticMockSettings(ShardingSphereServiceLoader.class)
+class RuleConfigurationChangedHandlerTest {
+
+ private RuleConfigurationChangedHandler handler;
+
+ @Mock(answer = Answers.RETURNS_DEEP_STUBS)
+ private ContextManager contextManager;
+
+ @BeforeEach
+ void setUp() {
+ handler = new RuleConfigurationChangedHandler(contextManager);
+ RuleNodePathProvider ruleNodePathProvider =
mock(RuleNodePathProvider.class, RETURNS_DEEP_STUBS);
+ when(ruleNodePathProvider.getRuleNodePath()).thenReturn(new
RuleNodePath("fixture", Collections.singleton("named"),
Collections.singleton("unique")));
+
when(ShardingSphereServiceLoader.getServiceInstances(RuleNodePathProvider.class)).thenReturn(Collections.singleton(ruleNodePathProvider));
+ }
+
+ @Test
+ void assertHandleWithInvalidPath() throws SQLException {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/invalid/rules/fixture", "foo", Type.ADDED));
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager(),
times(0)).alterRuleItem(any());
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager(),
times(0)).dropRuleItem(any());
+ }
+
+ @Test
+ void assertHandleWithEmptyValue() throws SQLException {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/fixture/rules/fixture/versions/0", "", Type.ADDED));
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager(),
times(0)).alterRuleItem(any());
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager(),
times(0)).dropRuleItem(any());
+ }
+
+ @Test
+ void assertHandleWithPathNotFound() throws SQLException {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/fixture/rules/fixture/versions/0", "foo",
Type.ADDED));
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager(),
times(0)).alterRuleItem(any());
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager(),
times(0)).dropRuleItem(any());
+ }
+
+ @Test
+ void assertHandleWithIgnoreType() throws SQLException {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/fixture/rules/fixture/named/xxx/active_version",
"foo", Type.IGNORED));
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager(),
times(0)).alterRuleItem(any());
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager(),
times(0)).dropRuleItem(any());
+ }
+
+ @Test
+ void assertHandleWithNamedRuleItemAdded() throws SQLException {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/fixture/rules/fixture/named/xxx/active_version",
"foo", Type.ADDED));
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager()).alterRuleItem(any(AlterNamedRuleItem.class));
+ }
+
+ @Test
+ void assertHandleWithNamedRuleItemAltered() throws SQLException {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/fixture/rules/fixture/named/xxx/active_version",
"foo", Type.UPDATED));
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager()).alterRuleItem(any(AlterNamedRuleItem.class));
+ }
+
+ @Test
+ void assertHandleWithNamedRuleItemDropped() throws SQLException {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/fixture/rules/fixture/named/xxx", "foo",
Type.DELETED));
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager()).dropRuleItem(any(DropNamedRuleItem.class));
+ }
+
+ @Test
+ void assertHandleWithUniqueRuleItemAdded() throws SQLException {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/fixture/rules/fixture/unique/active_version",
"foo", Type.ADDED));
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager()).alterRuleItem(any(AlterUniqueRuleItem.class));
+ }
+
+ @Test
+ void assertHandleWithUniqueRuleItemAltered() throws SQLException {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/fixture/rules/fixture/unique/active_version",
"foo", Type.UPDATED));
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager()).alterRuleItem(any(AlterUniqueRuleItem.class));
+ }
+
+ @Test
+ void assertHandleWithUniqueRuleItemDropped() throws SQLException {
+ handler.handle("foo_db", new
DataChangedEvent("/metadata/fixture/rules/fixture/unique/active_version",
"foo", Type.DELETED));
+
verify(contextManager.getMetaDataContextManager().getRuleItemManager()).dropRuleItem(any(DropUniqueRuleItem.class));
+ }
+}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/RuleItemChangedSubscriberTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/RuleItemChangedSubscriberTest.java
deleted file mode 100644
index 7b842beb042..00000000000
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/RuleItemChangedSubscriberTest.java
+++ /dev/null
@@ -1,66 +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.mode.manager.cluster.event.dispatch.event.rule.alter.AlterNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.alter.AlterRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.drop.DropNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.event.rule.drop.DropRuleItemEvent;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.spi.item.AlterRuleItem;
-import org.apache.shardingsphere.mode.spi.item.DropRuleItem;
-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 java.sql.SQLException;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-
-@ExtendWith(MockitoExtension.class)
-class RuleItemChangedSubscriberTest {
-
- private RuleItemChangedSubscriber subscriber;
-
- @Mock(answer = Answers.RETURNS_DEEP_STUBS)
- private ContextManager contextManager;
-
- @BeforeEach
- void setUp() {
- subscriber = new RuleItemChangedSubscriber(contextManager);
- }
-
- @Test
- void assertRenewWithAlterRuleItemEvent() throws SQLException {
- AlterRuleItemEvent event = mock(AlterNamedRuleItemEvent.class);
- subscriber.renew(event);
-
verify(contextManager.getMetaDataContextManager().getRuleItemManager()).alterRuleItem(any(AlterRuleItem.class));
- }
-
- @Test
- void assertRenewWithDropRuleItemEvent() throws SQLException {
- DropRuleItemEvent event = mock(DropNamedRuleItemEvent.class);
- subscriber.renew(event);
-
verify(contextManager.getMetaDataContextManager().getRuleItemManager()).dropRuleItem(any(DropRuleItem.class));
- }
-}