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 a99526aa1e9 Refactor RuleItemChangedBuildExecutor as class (#34863) a99526aa1e9 is described below commit a99526aa1e9ebb392a47f70dc8e716f521a1ab4e Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Tue Mar 4 17:21:37 2025 +0800 Refactor RuleItemChangedBuildExecutor as class (#34863) --- ...utor.java => RuleItemChangedBuildExecutor.java} | 21 ++++++--- .../metadata/changed/RuleItemChangedBuilder.java | 7 ++- .../executor/RuleItemChangedBuildExecutor.java | 39 ----------------- .../type/RuleItemDroppedBuildExecutor.java | 50 ---------------------- .../rule/RuleConfigurationChangedHandler.java | 6 +-- .../StandaloneMetaDataManagerPersistService.java | 6 +-- ...tandaloneMetaDataManagerPersistServiceTest.java | 4 +- 7 files changed, 23 insertions(+), 110 deletions(-) diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemAlteredBuildExecutor.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/RuleItemChangedBuildExecutor.java similarity index 81% rename from mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemAlteredBuildExecutor.java rename to mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/RuleItemChangedBuildExecutor.java index ece1250e15f..92e27e17513 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemAlteredBuildExecutor.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/RuleItemChangedBuildExecutor.java @@ -15,9 +15,8 @@ * limitations under the License. */ -package org.apache.shardingsphere.mode.metadata.changed.executor.type; +package org.apache.shardingsphere.mode.metadata.changed; -import org.apache.shardingsphere.mode.metadata.changed.executor.RuleItemChangedBuildExecutor; import org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher; import org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleItem; import org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleNodePath; @@ -27,14 +26,22 @@ import org.apache.shardingsphere.mode.node.rule.node.DatabaseRuleNode; import java.util.Optional; /** - * Rule item altered build executor. + * Rule item changed build executor. */ -public final class RuleItemAlteredBuildExecutor implements RuleItemChangedBuildExecutor { +public final class RuleItemChangedBuildExecutor { - @Override - public Optional<DatabaseRuleNodePath> build(final DatabaseRuleNode databaseRuleNode, final String databaseName, final String path) { + /** + * Build rule item. + * + * @param databaseRuleNode rule node path + * @param databaseName database name + * @param path path + * @param containsChildPath contains child path + * @return built database rule node path + */ + public Optional<DatabaseRuleNodePath> build(final DatabaseRuleNode databaseRuleNode, final String databaseName, final String path, final boolean containsChildPath) { for (String each : databaseRuleNode.getNamedItems()) { - Optional<String> itemName = NodePathSearcher.find(path, DatabaseRuleNodePath.createRuleItemNameSearchCriteria(databaseName, databaseRuleNode.getRuleType(), each, true)); + Optional<String> itemName = NodePathSearcher.find(path, DatabaseRuleNodePath.createRuleItemNameSearchCriteria(databaseName, databaseRuleNode.getRuleType(), each, containsChildPath)); if (itemName.isPresent()) { return Optional.of(new DatabaseRuleNodePath(databaseName, databaseRuleNode.getRuleType(), new DatabaseRuleItem(each, itemName.get()))); } diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/RuleItemChangedBuilder.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/RuleItemChangedBuilder.java index d8ec039c955..ea6cb0df140 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/RuleItemChangedBuilder.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/RuleItemChangedBuilder.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.mode.metadata.changed; -import org.apache.shardingsphere.mode.metadata.changed.executor.RuleItemChangedBuildExecutor; import org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher; import org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleNodePath; import org.apache.shardingsphere.mode.node.rule.node.DatabaseRuleNodeGenerator; @@ -34,11 +33,11 @@ public final class RuleItemChangedBuilder { * * @param databaseName database name * @param path path - * @param executor rule item changed build executor + * @param containsChildPath contains child path * @return built database rule node path */ - public Optional<DatabaseRuleNodePath> build(final String databaseName, final String path, final RuleItemChangedBuildExecutor executor) { + public Optional<DatabaseRuleNodePath> build(final String databaseName, final String path, final boolean containsChildPath) { Optional<String> ruleType = NodePathSearcher.find(path, DatabaseRuleNodePath.createRuleTypeSearchCriteria()); - return ruleType.isPresent() ? executor.build(DatabaseRuleNodeGenerator.generate(ruleType.get()), databaseName, path) : Optional.empty(); + return ruleType.isPresent() ? new RuleItemChangedBuildExecutor().build(DatabaseRuleNodeGenerator.generate(ruleType.get()), databaseName, path, containsChildPath) : Optional.empty(); } } diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/RuleItemChangedBuildExecutor.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/RuleItemChangedBuildExecutor.java deleted file mode 100644 index 98515d9fa72..00000000000 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/RuleItemChangedBuildExecutor.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.metadata.changed.executor; - -import org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleNodePath; -import org.apache.shardingsphere.mode.node.rule.node.DatabaseRuleNode; - -import java.util.Optional; - -/** - * Rule item changed build executor. - */ -public interface RuleItemChangedBuildExecutor { - - /** - * Build rule item. - * - * @param databaseRuleNode rule node path - * @param databaseName database name - * @param path path - * @return built database rule node path - */ - Optional<DatabaseRuleNodePath> build(DatabaseRuleNode databaseRuleNode, String databaseName, String path); -} diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemDroppedBuildExecutor.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemDroppedBuildExecutor.java deleted file mode 100644 index 76ce8717741..00000000000 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/changed/executor/type/RuleItemDroppedBuildExecutor.java +++ /dev/null @@ -1,50 +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.metadata.changed.executor.type; - -import org.apache.shardingsphere.mode.metadata.changed.executor.RuleItemChangedBuildExecutor; -import org.apache.shardingsphere.mode.node.path.engine.searcher.NodePathSearcher; -import org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleItem; -import org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleNodePath; -import org.apache.shardingsphere.mode.node.path.type.version.VersionNodePathParser; -import org.apache.shardingsphere.mode.node.rule.node.DatabaseRuleNode; - -import java.util.Optional; - -/** - * Rule item dropped build executor. - */ -public final class RuleItemDroppedBuildExecutor implements RuleItemChangedBuildExecutor { - - @Override - public Optional<DatabaseRuleNodePath> build(final DatabaseRuleNode databaseRuleNode, final String databaseName, final String path) { - for (String each : databaseRuleNode.getNamedItems()) { - Optional<String> itemName = NodePathSearcher.find(path, DatabaseRuleNodePath.createRuleItemNameSearchCriteria(databaseName, databaseRuleNode.getRuleType(), each, false)); - if (itemName.isPresent()) { - return Optional.of(new DatabaseRuleNodePath(databaseName, databaseRuleNode.getRuleType(), new DatabaseRuleItem(each, itemName.get()))); - } - } - for (String each : databaseRuleNode.getUniqueItems()) { - DatabaseRuleNodePath databaseRuleNodePath = new DatabaseRuleNodePath(databaseName, databaseRuleNode.getRuleType(), new DatabaseRuleItem(each)); - if (new VersionNodePathParser(databaseRuleNodePath).isActiveVersionPath(path)) { - return Optional.of(new DatabaseRuleNodePath(databaseName, databaseRuleNode.getRuleType(), new DatabaseRuleItem(each))); - } - } - return Optional.empty(); - } -} diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandler.java index 0cb9d7674a6..2291286808b 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/rule/RuleConfigurationChangedHandler.java @@ -22,8 +22,6 @@ 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.metadata.changed.RuleItemChangedBuilder; -import org.apache.shardingsphere.mode.metadata.changed.executor.type.RuleItemAlteredBuildExecutor; -import org.apache.shardingsphere.mode.metadata.changed.executor.type.RuleItemDroppedBuildExecutor; import org.apache.shardingsphere.mode.node.path.type.metadata.rule.DatabaseRuleNodePath; import org.apache.shardingsphere.mode.node.path.type.version.VersionNodePath; @@ -60,12 +58,12 @@ public final class RuleConfigurationChangedHandler { return; } int version = Integer.parseInt(event.getValue()); - Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedBuilder.build(databaseName, event.getKey(), new RuleItemAlteredBuildExecutor()); + Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedBuilder.build(databaseName, event.getKey(), true); if (databaseRuleNodePath.isPresent()) { contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().alter(databaseRuleNodePath.get(), version); } } else if (Type.DELETED == event.getType()) { - Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedBuilder.build(databaseName, event.getKey(), new RuleItemDroppedBuildExecutor()); + Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedBuilder.build(databaseName, event.getKey(), false); if (databaseRuleNodePath.isPresent()) { contextManager.getMetaDataContextManager().getDatabaseRuleItemManager().drop(databaseRuleNodePath.get()); } 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 3ef5c61fdf7..c6653bb339c 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 @@ -31,8 +31,6 @@ import org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedTy import org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache; import org.apache.shardingsphere.mode.metadata.MetaDataContexts; import org.apache.shardingsphere.mode.metadata.changed.RuleItemChangedBuilder; -import org.apache.shardingsphere.mode.metadata.changed.executor.type.RuleItemAlteredBuildExecutor; -import org.apache.shardingsphere.mode.metadata.changed.executor.type.RuleItemDroppedBuildExecutor; import org.apache.shardingsphere.mode.metadata.manager.MetaDataContextManager; import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistFacade; import org.apache.shardingsphere.mode.metadata.persist.metadata.DatabaseMetaDataPersistFacade; @@ -215,7 +213,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa return; } for (MetaDataVersion each : metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(toBeAlteredRuleConfig))) { - Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedBuilder.build(database.getName(), each.getPath(), new RuleItemAlteredBuildExecutor()); + Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedBuilder.build(database.getName(), each.getPath(), true); if (databaseRuleNodePath.isPresent()) { metaDataContextManager.getDatabaseRuleItemManager().alter(databaseRuleNodePath.get(), null == each.getActiveVersion() ? 0 : each.getActiveVersion()); } @@ -230,7 +228,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa } Collection<MetaDataVersion> metaDataVersions = metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), Collections.singleton(toBeRemovedRuleConfig)); for (MetaDataVersion each : metaDataVersions) { - Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedBuilder.build(database.getName(), each.getPath(), new RuleItemDroppedBuildExecutor()); + Optional<DatabaseRuleNodePath> databaseRuleNodePath = ruleItemChangedBuilder.build(database.getName(), each.getPath(), false); if (databaseRuleNodePath.isPresent()) { metaDataContextManager.getDatabaseRuleItemManager().drop(databaseRuleNodePath.get()); } 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 a4d42be83e0..6ea73659114 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 @@ -174,7 +174,7 @@ class StandaloneMetaDataManagerPersistServiceTest { when(metaDataPersistFacade.getDatabaseRuleService().persist("foo_db", Collections.singleton(ruleConfig))).thenReturn(metaDataVersions); DatabaseRuleNodePath databaseRuleNodePath = mock(DatabaseRuleNodePath.class); RuleItemChangedBuilder ruleItemChangedBuilder = mock(RuleItemChangedBuilder.class); - when(ruleItemChangedBuilder.build(eq("foo_db"), any(), any())).thenReturn(Optional.of(databaseRuleNodePath)); + when(ruleItemChangedBuilder.build(eq("foo_db"), any(), eq(true))).thenReturn(Optional.of(databaseRuleNodePath)); setRuleConfigurationEventBuilder(ruleItemChangedBuilder); metaDataManagerPersistService.alterRuleConfiguration(database, ruleConfig); verify(metaDataContextManager.getDatabaseRuleItemManager()).alter(databaseRuleNodePath, 0); @@ -193,7 +193,7 @@ class StandaloneMetaDataManagerPersistServiceTest { when(metaDataPersistFacade.getDatabaseRuleService().delete("foo_db", Collections.singleton(ruleConfig))).thenReturn(metaDataVersion); RuleItemChangedBuilder ruleItemChangedBuilder = mock(RuleItemChangedBuilder.class); DatabaseRuleNodePath databaseRuleNodePath = mock(DatabaseRuleNodePath.class); - when(ruleItemChangedBuilder.build(eq("foo_db"), any(), any())).thenReturn(Optional.of(databaseRuleNodePath)); + when(ruleItemChangedBuilder.build(eq("foo_db"), any(), eq(false))).thenReturn(Optional.of(databaseRuleNodePath)); setRuleConfigurationEventBuilder(ruleItemChangedBuilder); metaDataManagerPersistService.removeRuleConfigurationItem(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), ruleConfig); verify(metaDataContextManager.getDatabaseRuleItemManager()).drop(databaseRuleNodePath);