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 078d95469a2 Refactor RuleItemChangedBuildExecutor (#34573) 078d95469a2 is described below commit 078d95469a24b39c2e6c125e620d76c5007624fd Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Thu Feb 6 18:13:07 2025 +0800 Refactor RuleItemChangedBuildExecutor (#34573) --- .../manager/standalone/changed/RuleItemChangedBuilder.java | 10 +++++----- .../changed/executor/RuleItemChangedBuildExecutor.java | 6 +++--- .../changed/executor/type/RuleItemAlteredBuildExecutor.java | 13 ++++++++----- .../changed/executor/type/RuleItemDroppedBuildExecutor.java | 7 ++++--- .../service/StandaloneMetaDataManagerPersistService.java | 4 ++-- .../StandaloneMetaDataManagerPersistServiceTest.java | 7 +++---- .../util/YamlDatabaseConfigurationImportExecutor.java | 3 +-- 7 files changed, 26 insertions(+), 24 deletions(-) diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java index f8c0c0737ad..0a5a9121efe 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/RuleItemChangedBuilder.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.mode.manager.standalone.changed; +import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader; import org.apache.shardingsphere.mode.manager.standalone.changed.executor.RuleItemChangedBuildExecutor; import org.apache.shardingsphere.mode.node.spi.RuleNodePathProvider; @@ -33,18 +34,17 @@ public final class RuleItemChangedBuilder { * Build rule item changed. * * @param databaseName database name - * @param activeVersionKey active version key - * @param activeVersion active version + * @param metaDataVersion meta data version * @param executor rule item changed build executor * @param <T> type of rule changed item * @return built rule item */ - public <T extends RuleChangedItem> Optional<T> build(final String databaseName, final String activeVersionKey, final int activeVersion, final RuleItemChangedBuildExecutor<T> executor) { + public <T extends RuleChangedItem> Optional<T> build(final String databaseName, final MetaDataVersion metaDataVersion, final RuleItemChangedBuildExecutor<T> executor) { for (RuleNodePathProvider each : ShardingSphereServiceLoader.getServiceInstances(RuleNodePathProvider.class)) { - if (!each.getRuleNodePath().getRoot().isValidatedPath(activeVersionKey)) { + if (!each.getRuleNodePath().getRoot().isValidatedPath(metaDataVersion.getActiveVersionNodePath())) { continue; } - Optional<T> result = executor.build(each.getRuleNodePath(), databaseName, activeVersionKey, activeVersion); + Optional<T> result = executor.build(each.getRuleNodePath(), databaseName, metaDataVersion); if (result.isPresent()) { return result; } diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/RuleItemChangedBuildExecutor.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/RuleItemChangedBuildExecutor.java index 4de7db07c07..450500bbdc6 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/RuleItemChangedBuildExecutor.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/RuleItemChangedBuildExecutor.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.mode.manager.standalone.changed.executor; +import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; import org.apache.shardingsphere.mode.node.path.rule.RuleNodePath; import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItem; @@ -34,9 +35,8 @@ public interface RuleItemChangedBuildExecutor<T extends RuleChangedItem> { * * @param ruleNodePath rule node path * @param databaseName database name - * @param activeVersionKey active version key - * @param activeVersion active version + * @param metaDataVersion meta data version * @return built rule item */ - Optional<T> build(RuleNodePath ruleNodePath, String databaseName, String activeVersionKey, int activeVersion); + Optional<T> build(RuleNodePath ruleNodePath, String databaseName, MetaDataVersion metaDataVersion); } diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemAlteredBuildExecutor.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemAlteredBuildExecutor.java index 6ddec44be84..9642a54248d 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemAlteredBuildExecutor.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemAlteredBuildExecutor.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.mode.manager.standalone.changed.executor.type; +import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; import org.apache.shardingsphere.mode.manager.standalone.changed.executor.RuleItemChangedBuildExecutor; import org.apache.shardingsphere.mode.node.path.rule.RuleNodePath; import org.apache.shardingsphere.mode.node.path.rule.item.NamedRuleItemNodePath; @@ -34,16 +35,18 @@ import java.util.Optional; public final class RuleItemAlteredBuildExecutor implements RuleItemChangedBuildExecutor<AlterRuleItem> { @Override - public Optional<AlterRuleItem> build(final RuleNodePath ruleNodePath, final String databaseName, final String activeVersionKey, final int activeVersion) { + public Optional<AlterRuleItem> build(final RuleNodePath ruleNodePath, final String databaseName, final MetaDataVersion metaDataVersion) { for (Entry<String, NamedRuleItemNodePath> entry : ruleNodePath.getNamedItems().entrySet()) { - Optional<String> itemName = entry.getValue().getNameByActiveVersion(activeVersionKey); + Optional<String> itemName = entry.getValue().getNameByActiveVersion(metaDataVersion.getActiveVersionNodePath()); if (itemName.isPresent()) { - return Optional.of(new AlterNamedRuleItem(databaseName, itemName.get(), activeVersionKey, activeVersion, ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); + return Optional.of(new AlterNamedRuleItem(databaseName, + itemName.get(), metaDataVersion.getActiveVersionNodePath(), metaDataVersion.getNextActiveVersion(), ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); } } for (Entry<String, UniqueRuleItemNodePath> entry : ruleNodePath.getUniqueItems().entrySet()) { - if (entry.getValue().isActiveVersionPath(activeVersionKey)) { - return Optional.of(new AlterUniqueRuleItem(databaseName, activeVersionKey, activeVersion, ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); + if (entry.getValue().isActiveVersionPath(metaDataVersion.getActiveVersionNodePath())) { + return Optional.of(new AlterUniqueRuleItem(databaseName, + metaDataVersion.getActiveVersionNodePath(), metaDataVersion.getNextActiveVersion(), ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); } } return Optional.empty(); diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemDroppedBuildExecutor.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemDroppedBuildExecutor.java index 8b75752e74d..5d485a373a3 100644 --- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemDroppedBuildExecutor.java +++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/changed/executor/type/RuleItemDroppedBuildExecutor.java @@ -17,6 +17,7 @@ package org.apache.shardingsphere.mode.manager.standalone.changed.executor.type; +import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; import org.apache.shardingsphere.mode.manager.standalone.changed.executor.RuleItemChangedBuildExecutor; import org.apache.shardingsphere.mode.node.path.rule.RuleNodePath; import org.apache.shardingsphere.mode.node.path.rule.item.NamedRuleItemNodePath; @@ -34,15 +35,15 @@ import java.util.Optional; public final class RuleItemDroppedBuildExecutor implements RuleItemChangedBuildExecutor<DropRuleItem> { @Override - public Optional<DropRuleItem> build(final RuleNodePath ruleNodePath, final String databaseName, final String activeVersionKey, final int activeVersion) { + public Optional<DropRuleItem> build(final RuleNodePath ruleNodePath, final String databaseName, final MetaDataVersion metaDataVersion) { for (Entry<String, NamedRuleItemNodePath> entry : ruleNodePath.getNamedItems().entrySet()) { - Optional<String> itemName = entry.getValue().getNameByItemPath(activeVersionKey); + Optional<String> itemName = entry.getValue().getNameByItemPath(metaDataVersion.getActiveVersionNodePath()); if (itemName.isPresent()) { return Optional.of(new DropNamedRuleItem(databaseName, itemName.get(), ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); } } for (Entry<String, UniqueRuleItemNodePath> entry : ruleNodePath.getUniqueItems().entrySet()) { - if (entry.getValue().isActiveVersionPath(activeVersionKey)) { + if (entry.getValue().isActiveVersionPath(metaDataVersion.getActiveVersionNodePath())) { return Optional.of(new DropUniqueRuleItem(databaseName, ruleNodePath.getRoot().getRuleType() + "." + entry.getKey())); } } 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 e1d29fa919c..b01180083cc 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 @@ -211,7 +211,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa Collection<MetaDataVersion> metaDataVersions = metaDataPersistFacade.getDatabaseRuleService().persist(database.getName(), Collections.singleton(toBeAlteredRuleConfig)); metaDataPersistFacade.getMetaDataVersionService().switchActiveVersion(metaDataVersions); for (MetaDataVersion each : metaDataVersions) { - Optional<AlterRuleItem> alterRuleItem = ruleItemChangedBuilder.build(database.getName(), each.getActiveVersionNodePath(), each.getNextActiveVersion(), new RuleItemAlteredBuildExecutor()); + Optional<AlterRuleItem> alterRuleItem = ruleItemChangedBuilder.build(database.getName(), each, new RuleItemAlteredBuildExecutor()); if (alterRuleItem.isPresent()) { metaDataContextManager.getDatabaseRuleItemManager().alter(alterRuleItem.get()); } @@ -226,7 +226,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa } Collection<MetaDataVersion> metaDataVersions = metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), Collections.singleton(toBeRemovedRuleConfig)); for (MetaDataVersion each : metaDataVersions) { - Optional<DropRuleItem> dropRuleItem = ruleItemChangedBuilder.build(database.getName(), each.getActiveVersionNodePath(), each.getNextActiveVersion(), new RuleItemDroppedBuildExecutor()); + Optional<DropRuleItem> dropRuleItem = ruleItemChangedBuilder.build(database.getName(), each, new RuleItemDroppedBuildExecutor()); if (dropRuleItem.isPresent()) { metaDataContextManager.getDatabaseRuleItemManager().drop(dropRuleItem.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 c83fbc26bdc..f03036b59e0 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 @@ -27,8 +27,8 @@ import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; -import org.apache.shardingsphere.mode.metadata.manager.MetaDataContextManager; import org.apache.shardingsphere.mode.manager.standalone.changed.RuleItemChangedBuilder; +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; import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem; @@ -52,7 +52,6 @@ import java.util.Properties; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyCollection; -import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; @@ -177,7 +176,7 @@ class StandaloneMetaDataManagerPersistServiceTest { when(metaDataPersistFacade.getDatabaseRuleService().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(), anyInt(), any())).thenReturn(Optional.of(alterRuleItem)); + when(ruleItemChangedBuilder.build(eq("foo_db"), any(), any())).thenReturn(Optional.of(alterRuleItem)); setRuleConfigurationEventBuilder(ruleItemChangedBuilder); metaDataManagerPersistService.alterRuleConfiguration(database, ruleConfig); verify(metaDataPersistFacade.getMetaDataVersionService()).switchActiveVersion(metaDataVersion); @@ -197,7 +196,7 @@ class StandaloneMetaDataManagerPersistServiceTest { when(metaDataPersistFacade.getDatabaseRuleService().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(), anyInt(), any())).thenReturn(Optional.of(dropRuleItem)); + when(ruleItemChangedBuilder.build(eq("foo_db"), any(), any())).thenReturn(Optional.of(dropRuleItem)); setRuleConfigurationEventBuilder(ruleItemChangedBuilder); metaDataManagerPersistService.removeRuleConfigurationItem(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), ruleConfig); verify(metaDataContextManager.getDatabaseRuleItemManager()).drop(any(DropRuleItem.class)); diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java index e427faa3106..adcff86ae86 100644 --- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java +++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java @@ -132,8 +132,7 @@ public final class YamlDatabaseConfigurationImportExecutor { MetaDataContexts metaDataContexts = contextManager.getMetaDataContexts(); ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabase(databaseName); swapToRuleConfigs(yamlRuleConfigs).values().forEach(each -> addRule(ruleConfigs, each, database)); - contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseRuleService() - .persist(metaDataContexts.getMetaData().getDatabase(databaseName).getName(), ruleConfigs); + contextManager.getPersistServiceFacade().getMetaDataPersistFacade().getDatabaseRuleService().persist(metaDataContexts.getMetaData().getDatabase(databaseName).getName(), ruleConfigs); } private void addRule(final Collection<RuleConfiguration> ruleConfigs, final RuleConfiguration ruleConfig, final ShardingSphereDatabase database) {