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 0b8df9800de Remove RuleItemChangedSubscriber and RuleItemEvent (#34099)
0b8df9800de is described below
commit 0b8df9800de7d8866f4e571ddebc9aa3f9ff9ee3
Author: Haoran Meng <[email protected]>
AuthorDate: Thu Dec 19 11:33:05 2024 +0800
Remove RuleItemChangedSubscriber and RuleItemEvent (#34099)
---
.../event/dispatch/rule/RuleItemChangedEvent.java | 33 ------
.../rule/alter/AlterNamedRuleItemEvent.java | 39 -------
.../dispatch/rule/alter/AlterRuleItemEvent.java | 47 --------
.../rule/alter/AlterUniqueRuleItemEvent.java | 37 ------
.../dispatch/rule/drop/DropNamedRuleItemEvent.java | 35 ------
.../dispatch/rule/drop/DropRuleItemEvent.java | 33 ------
.../rule/drop/DropUniqueRuleItemEvent.java | 33 ------
.../RuleConfigurationChangedEventBuilder.java | 94 ----------------
.../mode/metadata/manager/RuleItemManager.java | 65 +++++++----
.../RuleConfigurationChangedEventBuilderTest.java | 125 ---------------------
.../listener/DataChangedEventListenerRegistry.java | 6 +-
.../type/DatabaseMetaDataChangedListener.java | 18 ++-
.../ClusterDispatchEventSubscriberRegistry.java | 3 +-
.../type/ListenerAssistedSubscriber.java | 3 +-
.../subscriber/type/RuleItemChangedSubscriber.java | 93 ---------------
.../type/DatabaseMetaDataChangedListenerTest.java | 6 +-
.../type/RuleItemChangedSubscriberTest.java | 66 -----------
.../StandaloneMetaDataManagerPersistService.java | 23 +---
...tandaloneMetaDataManagerPersistServiceTest.java | 21 +---
19 files changed, 71 insertions(+), 709 deletions(-)
diff --git
a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/RuleItemChangedEvent.java
b/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/RuleItemChangedEvent.java
deleted file mode 100644
index 42aefc77aee..00000000000
---
a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/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.event.dispatch.rule;
-
-import org.apache.shardingsphere.mode.event.dispatch.DispatchEvent;
-
-/**
- * Rule item changed event.
- */
-public interface RuleItemChangedEvent extends DispatchEvent {
-
- /**
- * Get rule item type.
- *
- * @return rule item type
- */
- String getType();
-}
diff --git
a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/alter/AlterNamedRuleItemEvent.java
b/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/alter/AlterNamedRuleItemEvent.java
deleted file mode 100644
index 237c00e0b37..00000000000
---
a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/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.event.dispatch.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/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/alter/AlterRuleItemEvent.java
b/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/alter/AlterRuleItemEvent.java
deleted file mode 100644
index 55e4780a6c4..00000000000
---
a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/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.event.dispatch.rule.alter;
-
-import org.apache.shardingsphere.mode.event.dispatch.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/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/alter/AlterUniqueRuleItemEvent.java
b/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/alter/AlterUniqueRuleItemEvent.java
deleted file mode 100644
index 5bda761cae6..00000000000
---
a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/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.event.dispatch.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/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/drop/DropNamedRuleItemEvent.java
b/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/drop/DropNamedRuleItemEvent.java
deleted file mode 100644
index 6783a26c75e..00000000000
---
a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/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.event.dispatch.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/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/drop/DropRuleItemEvent.java
b/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/drop/DropRuleItemEvent.java
deleted file mode 100644
index 7a0413f92bd..00000000000
---
a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/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.event.dispatch.rule.drop;
-
-import org.apache.shardingsphere.mode.event.dispatch.rule.RuleItemChangedEvent;
-
-/**
- * Drop rule item event.
- */
-public interface DropRuleItemEvent extends RuleItemChangedEvent {
-
- /**
- * Get database name.
- *
- * @return database name
- */
- String getDatabaseName();
-}
diff --git
a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/drop/DropUniqueRuleItemEvent.java
b/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/rule/drop/DropUniqueRuleItemEvent.java
deleted file mode 100644
index 561be2372c6..00000000000
---
a/mode/api/src/main/java/org/apache/shardingsphere/mode/event/dispatch/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.event.dispatch.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/core/src/main/java/org/apache/shardingsphere/mode/event/dispatch/builder/RuleConfigurationChangedEventBuilder.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/event/dispatch/builder/RuleConfigurationChangedEventBuilder.java
deleted file mode 100644
index 11c39e6f454..00000000000
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/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.event.dispatch.builder;
-
-import com.google.common.base.Strings;
-import org.apache.shardingsphere.mode.event.dispatch.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.event.dispatch.rule.RuleItemChangedEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.alter.AlterNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.alter.AlterUniqueRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.drop.DropNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.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/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java
index 6d3adafe723..08877b05262 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java
@@ -18,21 +18,26 @@
package org.apache.shardingsphere.mode.metadata.manager;
import com.google.common.base.Preconditions;
+import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.spi.item.AlterRuleItem;
-import org.apache.shardingsphere.mode.spi.item.DropRuleItem;
import org.apache.shardingsphere.mode.spi.PersistRepository;
import
org.apache.shardingsphere.mode.spi.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.item.AlterRuleItem;
+import org.apache.shardingsphere.mode.spi.item.DropRuleItem;
+import org.apache.shardingsphere.mode.spi.item.RuleItemChanged;
import java.sql.SQLException;
+import java.util.Optional;
import java.util.concurrent.atomic.AtomicReference;
/**
* Rule item manager.
*/
+@Slf4j
public class RuleItemManager {
private final AtomicReference<MetaDataContexts> metaDataContexts;
@@ -41,47 +46,61 @@ public class RuleItemManager {
private final MetaDataPersistService metaDataPersistService;
+ private final RuleItemChangedBuilder ruleItemChangedBuilder;
+
public RuleItemManager(final AtomicReference<MetaDataContexts>
metaDataContexts, final PersistRepository repository, final
DatabaseRuleConfigurationManager ruleConfigManager) {
this.metaDataContexts = metaDataContexts;
this.ruleConfigManager = ruleConfigManager;
metaDataPersistService = new MetaDataPersistService(repository);
+ ruleItemChangedBuilder = new RuleItemChangedBuilder();
}
/**
* Alter with rule item.
*
- * @param alterRuleItem alter rule item
- * @throws SQLException SQL Exception
+ * @param databaseName database name
+ * @param activeVersionKey active version key
+ * @param activeVersion active version
+ * @param changeType change type
*/
- public void alterRuleItem(final AlterRuleItem alterRuleItem) throws
SQLException {
-
Preconditions.checkArgument(alterRuleItem.getActiveVersion().equals(metaDataPersistService.getMetaDataVersionPersistService()
-
.getActiveVersionByFullPath(alterRuleItem.getActiveVersionKey())), "Invalid
active version: {} of key: {}",
- alterRuleItem.getActiveVersion(),
alterRuleItem.getActiveVersionKey());
- RuleItemConfigurationChangedProcessor processor =
TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class,
alterRuleItem.getType());
- String yamlContent =
metaDataPersistService.getMetaDataVersionPersistService()
-
.getVersionPathByActiveVersion(alterRuleItem.getActiveVersionKey(),
alterRuleItem.getActiveVersion());
- String databaseName = alterRuleItem.getDatabaseName();
+ public void alterRuleItem(final String databaseName, final String
activeVersionKey, final String activeVersion, final Type changeType) {
+ Optional<RuleItemChanged> ruleItemChanged =
ruleItemChangedBuilder.build(databaseName, activeVersionKey, activeVersion,
changeType);
+ if (!ruleItemChanged.isPresent()) {
+ return;
+ }
+ RuleItemConfigurationChangedProcessor processor =
TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class,
ruleItemChanged.get().getType());
+ if (ruleItemChanged.get() instanceof AlterRuleItem) {
+ alter(databaseName, activeVersionKey, activeVersion,
(AlterRuleItem) ruleItemChanged.get(), processor);
+ } else if (ruleItemChanged.get() instanceof DropRuleItem) {
+ drop(databaseName, (DropRuleItem) ruleItemChanged.get(),
processor);
+ }
+ }
+
+ private void alter(final String databaseName, final String
activeVersionKey, final String activeVersion, final AlterRuleItem
alterRuleItem, final RuleItemConfigurationChangedProcessor processor) {
+
Preconditions.checkArgument(activeVersion.equals(metaDataPersistService.getMetaDataVersionPersistService()
+ .getActiveVersionByFullPath(activeVersionKey)), "Invalid
active version: {} of key: {}", activeVersion, activeVersionKey);
+ String yamlContent =
metaDataPersistService.getMetaDataVersionPersistService().getVersionPathByActiveVersion(activeVersionKey,
activeVersion);
RuleConfiguration currentRuleConfig =
processor.findRuleConfiguration(metaDataContexts.get().getMetaData().getDatabase(databaseName));
synchronized (this) {
processor.changeRuleItemConfiguration(alterRuleItem,
currentRuleConfig, processor.swapRuleItemConfiguration(alterRuleItem,
yamlContent));
- ruleConfigManager.alterRuleConfiguration(databaseName,
currentRuleConfig);
+ try {
+ ruleConfigManager.alterRuleConfiguration(databaseName,
currentRuleConfig);
+ } catch (final SQLException ex) {
+ log.error("Alter rule configuration failed, databaseName:{},
key:{}, version:{}", databaseName, activeVersionKey, activeVersion, ex);
+ }
}
}
- /**
- * Drop with rule item.
- *
- * @param dropRuleItem drop rule item
- * @throws SQLException SQL Exception
- */
- public void dropRuleItem(final DropRuleItem dropRuleItem) throws
SQLException {
- String databaseName = dropRuleItem.getDatabaseName();
+ private void drop(final String databaseName, final DropRuleItem
dropRuleItem, final RuleItemConfigurationChangedProcessor processor) {
Preconditions.checkState(metaDataContexts.get().getMetaData().containsDatabase(databaseName),
"No database '%s' exists.", databaseName);
- RuleItemConfigurationChangedProcessor processor =
TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class,
dropRuleItem.getType());
RuleConfiguration currentRuleConfig =
processor.findRuleConfiguration(metaDataContexts.get().getMetaData().getDatabase(databaseName));
synchronized (this) {
processor.dropRuleItemConfiguration(dropRuleItem,
currentRuleConfig);
- ruleConfigManager.dropRuleConfiguration(databaseName,
currentRuleConfig);
+ try {
+ ruleConfigManager.dropRuleConfiguration(databaseName,
currentRuleConfig);
+ } catch (final SQLException ex) {
+ log.error("Drop rule configuration failed, databaseName:{},
type:{}", databaseName, dropRuleItem.getType(), ex);
+ }
}
}
}
diff --git
a/mode/core/src/test/java/org/apache/shardingsphere/mode/event/dispatch/builder/RuleConfigurationChangedEventBuilderTest.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/event/dispatch/builder/RuleConfigurationChangedEventBuilderTest.java
deleted file mode 100644
index bd4de594750..00000000000
---
a/mode/core/src/test/java/org/apache/shardingsphere/mode/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.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.event.dispatch.DispatchEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.alter.AlterNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.alter.AlterUniqueRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.drop.DropNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.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/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 7daeb327d34..3bfed6eff42 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
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.builder.DispatchEventBuilder;
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.type.DatabaseMetaDataChangedListener;
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.type.GlobalMetaDataChangedListener;
+import org.apache.shardingsphere.mode.metadata.manager.RuleItemManager;
import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import java.util.Collection;
@@ -39,10 +40,13 @@ public final class DataChangedEventListenerRegistry {
private final Collection<String> databaseNames;
+ private final RuleItemManager ruleItemManager;
+
public DataChangedEventListenerRegistry(final ContextManager
contextManager, final Collection<String> databaseNames) {
repository = (ClusterPersistRepository)
contextManager.getPersistServiceFacade().getRepository();
eventBusContext =
contextManager.getComputeNodeInstanceContext().getEventBusContext();
this.databaseNames = databaseNames;
+ ruleItemManager =
contextManager.getMetaDataContextManager().getRuleItemManager();
}
/**
@@ -54,7 +58,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(eventBusContext, ruleItemManager));
}
private void registerGlobalListeners(final DispatchEventBuilder<?>
builder) {
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 9fa7a4f77b3..8cdbfa1809a 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
@@ -21,9 +21,9 @@ 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.event.dispatch.builder.MetaDataChangedEventBuilder;
-import
org.apache.shardingsphere.mode.event.dispatch.builder.RuleConfigurationChangedEventBuilder;
import org.apache.shardingsphere.mode.event.dispatch.DispatchEvent;
+import
org.apache.shardingsphere.mode.event.dispatch.builder.MetaDataChangedEventBuilder;
+import org.apache.shardingsphere.mode.metadata.manager.RuleItemManager;
import
org.apache.shardingsphere.mode.repository.cluster.listener.DataChangedEventListener;
import java.util.Optional;
@@ -36,18 +36,24 @@ public final class DatabaseMetaDataChangedListener
implements DataChangedEventLi
private final EventBusContext eventBusContext;
+ private final RuleItemManager ruleItemManager;
+
@Override
public void onChange(final DataChangedEvent event) {
- createDispatchEvent(event).ifPresent(eventBusContext::post);
+ handleDataChangedEvent(event);
}
- private Optional<DispatchEvent> createDispatchEvent(final DataChangedEvent
event) {
+ private void handleDataChangedEvent(final DataChangedEvent event) {
String key = event.getKey();
Optional<String> databaseName =
DatabaseMetaDataNode.getDatabaseNameBySchemaNode(key);
if (!databaseName.isPresent()) {
- return Optional.empty();
+ return;
}
Optional<DispatchEvent> metaDataChangedEvent = new
MetaDataChangedEventBuilder().build(databaseName.get(), event);
- return metaDataChangedEvent.isPresent() ? metaDataChangedEvent : new
RuleConfigurationChangedEventBuilder().build(databaseName.get(), event);
+ if (metaDataChangedEvent.isPresent()) {
+ eventBusContext.post(metaDataChangedEvent.get());
+ } else {
+ ruleItemManager.alterRuleItem(databaseName.get(), event.getKey(),
event.getValue(), event.getType());
+ }
}
}
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 efe9292425a..78f9260fb24 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
@@ -29,7 +29,6 @@ import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.ProcessListChangedSubscriber;
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.PropertiesEventSubscriber;
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.QualifiedDataSourceSubscriber;
-import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.RuleItemChangedSubscriber;
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.StateChangedSubscriber;
import
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.subscriber.type.StorageUnitEventSubscriber;
@@ -45,7 +44,7 @@ public final class ClusterDispatchEventSubscriberRegistry {
private final Collection<EventSubscriber> subscribers;
public ClusterDispatchEventSubscriberRegistry(final ContextManager
contextManager) {
- subscribers = Arrays.asList(new
RuleItemChangedSubscriber(contextManager),
+ subscribers = Arrays.asList(
new MetaDataChangedSubscriber(contextManager),
new ListenerAssistedSubscriber(contextManager),
new StateChangedSubscriber(contextManager),
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/ListenerAssistedSubscriber.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/ListenerAssistedSubscriber.java
index c2d5b80768f..26e2ea21c38 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/ListenerAssistedSubscriber.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/event/dispatch/subscriber/type/ListenerAssistedSubscriber.java
@@ -53,7 +53,8 @@ public final class ListenerAssistedSubscriber implements
DispatchEventSubscriber
*/
@Subscribe
public synchronized void renew(final CreateDatabaseListenerAssistedEvent
event) {
-
repository.watch(DatabaseMetaDataNode.getDatabaseNamePath(event.getDatabaseName()),
new
DatabaseMetaDataChangedListener(contextManager.getComputeNodeInstanceContext().getEventBusContext()));
+
repository.watch(DatabaseMetaDataNode.getDatabaseNamePath(event.getDatabaseName()),
new
DatabaseMetaDataChangedListener(contextManager.getComputeNodeInstanceContext().getEventBusContext(),
+
contextManager.getMetaDataContextManager().getRuleItemManager()));
contextManager.getMetaDataContextManager().getSchemaMetaDataManager().addDatabase(event.getDatabaseName());
contextManager.getPersistServiceFacade().getListenerAssistedPersistService().deleteDatabaseNameListenerAssisted(event.getDatabaseName());
refreshStatisticsData();
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 9db8351b9dd..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.event.dispatch.rule.alter.AlterNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.alter.AlterRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.alter.AlterUniqueRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.drop.DropNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.drop.DropRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.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/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..d396a02320a 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
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.mode.manager.cluster.event.dispatch.listener.t
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.metadata.manager.RuleItemManager;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -38,9 +39,12 @@ class DatabaseMetaDataChangedListenerTest {
@Mock
private EventBusContext eventBusContext;
+ @Mock
+ private RuleItemManager ruleItemManager;
+
@BeforeEach
void setUp() {
- listener = new DatabaseMetaDataChangedListener(eventBusContext);
+ listener = new DatabaseMetaDataChangedListener(eventBusContext,
ruleItemManager);
}
@Test
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 5f04a35b00a..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.event.dispatch.rule.alter.AlterNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.alter.AlterRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.rule.drop.DropNamedRuleItemEvent;
-import
org.apache.shardingsphere.mode.event.dispatch.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));
- }
-}
diff --git
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
index 7d067d5e4ce..59e61d04f2e 100644
---
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
@@ -38,14 +38,10 @@ import
org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
import org.apache.shardingsphere.mode.metadata.MetaDataContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
-import org.apache.shardingsphere.mode.metadata.manager.RuleItemChangedBuilder;
import org.apache.shardingsphere.mode.metadata.manager.SwitchingResource;
import
org.apache.shardingsphere.mode.metadata.refresher.util.TableRefreshUtils;
import
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
-import org.apache.shardingsphere.mode.spi.item.AlterRuleItem;
-import org.apache.shardingsphere.mode.spi.item.DropRuleItem;
import org.apache.shardingsphere.mode.spi.PersistRepository;
-import org.apache.shardingsphere.mode.spi.item.RuleItemChanged;
import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
import java.sql.SQLException;
@@ -67,12 +63,9 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
private final MetaDataContextManager metaDataContextManager;
- private final RuleItemChangedBuilder ruleItemChangedBuilder;
-
public StandaloneMetaDataManagerPersistService(final PersistRepository
repository, final MetaDataContextManager metaDataContextManager) {
metaDataPersistService = new MetaDataPersistService(repository);
this.metaDataContextManager = metaDataContextManager;
- ruleItemChangedBuilder = new RuleItemChangedBuilder();
}
@Override
@@ -292,19 +285,11 @@ public final class
StandaloneMetaDataManagerPersistService implements MetaDataMa
.persist(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getName(),
Collections.singleton(toBeAlteredRuleConfig));
metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
for (MetaDataVersion each : metaDataVersions) {
- // TODO double check here, when ruleItemEvent not existed or not
AlterRuleItemEvent @haoran
- Optional<RuleItemChanged> ruleItemChanged =
buildAlterRuleItemChanged(databaseName, each, Type.UPDATED);
- if (ruleItemChanged.isPresent() && ruleItemChanged.get()
instanceof AlterRuleItem) {
-
metaDataContextManager.getRuleItemManager().alterRuleItem((AlterRuleItem)
ruleItemChanged.get());
- }
+
metaDataContextManager.getRuleItemManager().alterRuleItem(databaseName,
each.getActiveVersionNodePath(), each.getNextActiveVersion(), Type.UPDATED);
}
clearServiceCache();
}
- private Optional<RuleItemChanged> buildAlterRuleItemChanged(final String
databaseName, final MetaDataVersion metaDataVersion, final Type type) {
- return ruleItemChangedBuilder.build(databaseName,
metaDataVersion.getActiveVersionNodePath(),
metaDataVersion.getNextActiveVersion(), type);
- }
-
@Override
public void removeRuleConfigurationItem(final String databaseName, final
RuleConfiguration toBeRemovedRuleConfig) throws SQLException {
if (null == toBeRemovedRuleConfig) {
@@ -312,11 +297,7 @@ public final class StandaloneMetaDataManagerPersistService
implements MetaDataMa
}
Collection<MetaDataVersion> metaDataVersions =
metaDataPersistService.getDatabaseRulePersistService().delete(databaseName,
Collections.singleton(toBeRemovedRuleConfig));
for (MetaDataVersion metaDataVersion : metaDataVersions) {
- Optional<RuleItemChanged> ruleItemChanged =
buildAlterRuleItemChanged(databaseName, metaDataVersion, Type.DELETED);
- // TODO double check here, when ruleItemEvent not existed or not
AlterRuleItemEvent @haoran
- if (ruleItemChanged.isPresent() && ruleItemChanged.get()
instanceof DropRuleItem) {
-
metaDataContextManager.getRuleItemManager().dropRuleItem((DropRuleItem)
ruleItemChanged.get());
- }
+
metaDataContextManager.getRuleItemManager().alterRuleItem(databaseName,
metaDataVersion.getActiveVersionNodePath(),
metaDataVersion.getNextActiveVersion(), Type.DELETED);
}
clearServiceCache();
}
diff --git
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
index d86ffedcd0d..2469b29646b 100644
---
a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
+++
b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
@@ -31,10 +31,7 @@ import
org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import
org.apache.shardingsphere.metadata.persist.service.metadata.DatabaseMetaDataPersistFacade;
import org.apache.shardingsphere.mode.metadata.MetaDataContextManager;
-import org.apache.shardingsphere.mode.metadata.manager.RuleItemChangedBuilder;
import org.apache.shardingsphere.mode.spi.PersistRepository;
-import org.apache.shardingsphere.mode.spi.item.AlterRuleItem;
-import org.apache.shardingsphere.mode.spi.item.DropRuleItem;
import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -49,7 +46,6 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
-import java.util.Optional;
import java.util.Properties;
import static org.mockito.ArgumentMatchers.any;
@@ -172,13 +168,9 @@ class StandaloneMetaDataManagerPersistServiceTest {
RuleConfiguration ruleConfig = mock(RuleConfiguration.class,
RETURNS_DEEP_STUBS);
Collection<MetaDataVersion> metaDataVersion =
Collections.singleton(mock(MetaDataVersion.class));
when(metaDataPersistService.getDatabaseRulePersistService().persist("foo_db",
Collections.singleton(ruleConfig))).thenReturn(metaDataVersion);
- AlterRuleItem alterRuleItem = mock(AlterRuleItem.class);
- RuleItemChangedBuilder ruleItemChangedBuilder =
mock(RuleItemChangedBuilder.class);
- when(ruleItemChangedBuilder.build(eq("foo_db"), any(), any(),
any())).thenReturn(Optional.of(alterRuleItem));
- setRuleConfigurationEventBuilder(ruleItemChangedBuilder);
metaDataManagerPersistService.alterRuleConfiguration("foo_db",
ruleConfig);
verify(metaDataPersistService.getMetaDataVersionPersistService()).switchActiveVersion(metaDataVersion);
-
verify(metaDataContextManager.getRuleItemManager()).alterRuleItem(any(AlterRuleItem.class));
+
verify(metaDataContextManager.getRuleItemManager()).alterRuleItem(eq("foo_db"),
any(), any(), any());
}
@Test
@@ -192,12 +184,8 @@ class StandaloneMetaDataManagerPersistServiceTest {
RuleConfiguration ruleConfig = mock(RuleConfiguration.class,
RETURNS_DEEP_STUBS);
Collection<MetaDataVersion> metaDataVersion =
Collections.singleton(mock(MetaDataVersion.class));
when(metaDataPersistService.getDatabaseRulePersistService().delete("foo_db",
Collections.singleton(ruleConfig))).thenReturn(metaDataVersion);
- RuleItemChangedBuilder ruleItemChangedBuilder =
mock(RuleItemChangedBuilder.class);
- DropRuleItem dropRuleItem = mock(DropRuleItem.class);
- when(ruleItemChangedBuilder.build(eq("foo_db"), any(), any(),
any())).thenReturn(Optional.of(dropRuleItem));
- setRuleConfigurationEventBuilder(ruleItemChangedBuilder);
metaDataManagerPersistService.removeRuleConfigurationItem("foo_db",
ruleConfig);
-
verify(metaDataContextManager.getRuleItemManager()).dropRuleItem(any(DropRuleItem.class));
+
verify(metaDataContextManager.getRuleItemManager()).alterRuleItem(eq("foo_db"),
any(), any(), any());
}
@Test
@@ -234,9 +222,4 @@ class StandaloneMetaDataManagerPersistServiceTest {
metaDataManagerPersistService.dropTables("foo_db", "foo_schema",
Collections.singleton("foo_tbl"));
verify(metaDataPersistService.getDatabaseMetaDataFacade().getTable()).drop("foo_db",
"foo_schema", "foo_tbl");
}
-
- @SneakyThrows(ReflectiveOperationException.class)
- private void setRuleConfigurationEventBuilder(final RuleItemChangedBuilder
ruleItemChangedBuilder) {
-
Plugins.getMemberAccessor().set(StandaloneMetaDataManagerPersistService.class.getDeclaredField("ruleItemChangedBuilder"),
metaDataManagerPersistService, ruleItemChangedBuilder);
- }
}