This is an automated email from the ASF dual-hosted git repository. menghaoran 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 fe6e3a2ce57 Refactor drop rule configuration (#35036) fe6e3a2ce57 is described below commit fe6e3a2ce57faa9a36ed02dd29d6b85e71872d15 Author: Haoran Meng <menghaora...@gmail.com> AuthorDate: Wed Mar 19 15:04:31 2025 +0800 Refactor drop rule configuration (#35036) --- .../handler/update/DropBroadcastTableRuleExecutorTest.java | 5 ++++- .../engine/database/type/DropDatabaseRuleOperator.java | 6 +++--- .../persist/service/MetaDataManagerPersistService.java | 7 ++++--- .../service/ClusterMetaDataManagerPersistService.java | 13 ++++++++----- .../service/ClusterMetaDataManagerPersistServiceTest.java | 3 ++- .../service/StandaloneMetaDataManagerPersistService.java | 14 +++++++++----- .../StandaloneMetaDataManagerPersistServiceTest.java | 3 ++- 7 files changed, 32 insertions(+), 19 deletions(-) diff --git a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutorTest.java b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutorTest.java index ca266375759..5609508386d 100644 --- a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutorTest.java +++ b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutorTest.java @@ -20,6 +20,7 @@ package org.apache.shardingsphere.broadcast.distsql.handler.update; import org.apache.shardingsphere.broadcast.distsql.statement.DropBroadcastTableRuleStatement; import org.apache.shardingsphere.broadcast.rule.BroadcastRule; import org.apache.shardingsphere.distsql.handler.engine.update.DistSQLUpdateExecuteEngine; +import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.exception.kernel.metadata.rule.MissingRequiredRuleException; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; @@ -33,6 +34,8 @@ import java.util.Arrays; import java.util.Collections; import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; @@ -58,7 +61,7 @@ class DropBroadcastTableRuleExecutorTest { ContextManager contextManager = mockContextManager(database, rule); new DistSQLUpdateExecuteEngine(sqlStatement, "foo_db", contextManager).executeUpdate(); MetaDataManagerPersistService metaDataManagerPersistService = contextManager.getPersistServiceFacade().getModeFacade().getMetaDataManagerService(); - verify(metaDataManagerPersistService).removeRuleConfiguration(database, "broadcast"); + verify(metaDataManagerPersistService).removeRuleConfiguration(eq(database), any(RuleConfiguration.class), eq("broadcast")); } private ContextManager mockContextManager(final ShardingSphereDatabase database, final BroadcastRule rule) { diff --git a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java index 4da4f19f1f6..1f2fe33b184 100644 --- a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java +++ b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java @@ -60,13 +60,13 @@ public final class DropDatabaseRuleOperator implements DatabaseRuleOperator { // TODO refactor to new metadata refresh way } MetaDataManagerPersistService metaDataManagerPersistService = contextManager.getPersistServiceFacade().getModeFacade().getMetaDataManagerService(); - RuleConfiguration toBeDroppedRuleConfig = executor.buildToBeDroppedRuleConfiguration(sqlStatement); - metaDataManagerPersistService.removeRuleConfigurationItem(database, toBeDroppedRuleConfig); + RuleConfiguration toBeDroppedRuleItemConfig = executor.buildToBeDroppedRuleConfiguration(sqlStatement); + metaDataManagerPersistService.removeRuleConfigurationItem(database, toBeDroppedRuleItemConfig); RuleConfiguration toBeAlteredRuleConfig = executor.buildToBeAlteredRuleConfiguration(sqlStatement); if (null != toBeAlteredRuleConfig && TypedSPILoader.getService(DatabaseRuleConfigurationEmptyChecker.class, toBeAlteredRuleConfig.getClass()).isEmpty((DatabaseRuleConfiguration) toBeAlteredRuleConfig)) { YamlRuleConfiguration yamlRuleConfig = new YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(currentRuleConfig); - metaDataManagerPersistService.removeRuleConfiguration(database, Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RuleNodeTupleEntity.class)).value()); + metaDataManagerPersistService.removeRuleConfiguration(database, currentRuleConfig, Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RuleNodeTupleEntity.class)).value()); } else { metaDataManagerPersistService.alterRuleConfiguration(database, toBeAlteredRuleConfig); } diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java index d16e1c9d9d4..356a8a0a15b 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/persist/service/MetaDataManagerPersistService.java @@ -146,17 +146,18 @@ public interface MetaDataManagerPersistService { * Remove rule configuration item. * * @param database database - * @param toBeRemovedRuleConfig to be removed rule config + * @param toBeRemovedRuleItemConfig to be removed rule item config */ - void removeRuleConfigurationItem(ShardingSphereDatabase database, RuleConfiguration toBeRemovedRuleConfig); + void removeRuleConfigurationItem(ShardingSphereDatabase database, RuleConfiguration toBeRemovedRuleItemConfig); /** * Remove rule configuration. * * @param database database + * @param toBeRemovedRuleConfig to be removed rule config * @param ruleType rule type */ - void removeRuleConfiguration(ShardingSphereDatabase database, String ruleType); + void removeRuleConfiguration(ShardingSphereDatabase database, RuleConfiguration toBeRemovedRuleConfig, String ruleType); /** * Alter global rule configuration. diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java index 058bd7ae0ec..a9e4e651ef9 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java @@ -185,13 +185,13 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } @Override - public void removeRuleConfigurationItem(final ShardingSphereDatabase database, final RuleConfiguration toBeRemovedRuleConfig) { - if (null == toBeRemovedRuleConfig) { + public void removeRuleConfigurationItem(final ShardingSphereDatabase database, final RuleConfiguration toBeRemovedRuleItemConfig) { + if (null == toBeRemovedRuleItemConfig) { return; } - Collection<String> needReloadTables = getNeedReloadTables(database, toBeRemovedRuleConfig); + Collection<String> needReloadTables = getNeedReloadTables(database, toBeRemovedRuleItemConfig); MetaDataContexts originalMetaDataContexts = new MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), metaDataContextManager.getMetaDataContexts().getStatistics()); - metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), Collections.singleton(toBeRemovedRuleConfig)); + metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), Collections.singleton(toBeRemovedRuleItemConfig)); metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables(database.getName(), getReloadedMetaDataContexts(originalMetaDataContexts), needReloadTables); } @@ -204,8 +204,11 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } @Override - public void removeRuleConfiguration(final ShardingSphereDatabase database, final String ruleType) { + public void removeRuleConfiguration(final ShardingSphereDatabase database, final RuleConfiguration toBeRemovedRuleConfig, final String ruleType) { + Collection<String> needReloadTables = getNeedReloadTables(database, toBeRemovedRuleConfig); + MetaDataContexts originalMetaDataContexts = new MetaDataContexts(metaDataContextManager.getMetaDataContexts().getMetaData(), metaDataContextManager.getMetaDataContexts().getStatistics()); metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), ruleType); + metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables(database.getName(), getReloadedMetaDataContexts(originalMetaDataContexts), needReloadTables); } @Override diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java index 44a2c4d329b..5077242140e 100644 --- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java +++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java @@ -157,7 +157,8 @@ class ClusterMetaDataManagerPersistServiceTest { @Test void assertRemoveRuleConfiguration() { - metaDataManagerPersistService.removeRuleConfiguration(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), "fixtureRule"); + metaDataManagerPersistService.removeRuleConfiguration(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), + mock(RuleConfiguration.class), "fixtureRule"); verify(metaDataPersistFacade.getDatabaseRuleService()).delete("foo_db", "fixtureRule"); } 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 eb8fe6efe4e..02695bab8a9 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 @@ -234,12 +234,12 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa } @Override - public void removeRuleConfigurationItem(final ShardingSphereDatabase database, final RuleConfiguration toBeRemovedRuleConfig) { - if (null == toBeRemovedRuleConfig) { + public void removeRuleConfigurationItem(final ShardingSphereDatabase database, final RuleConfiguration toBeRemovedRuleItemConfig) { + if (null == toBeRemovedRuleItemConfig) { return; } - Collection<String> needReloadTables = getNeedReloadTables(database, toBeRemovedRuleConfig); - Collection<MetaDataVersion> metaDataVersions = metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), Collections.singleton(toBeRemovedRuleConfig)); + Collection<String> needReloadTables = getNeedReloadTables(database, toBeRemovedRuleItemConfig); + Collection<MetaDataVersion> metaDataVersions = metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), Collections.singleton(toBeRemovedRuleItemConfig)); removeRuleItem(database.getName(), metaDataVersions); Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap = metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables( database.getName(), metaDataContextManager.getMetaDataContexts(), needReloadTables); @@ -278,10 +278,14 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa } @Override - public void removeRuleConfiguration(final ShardingSphereDatabase database, final String ruleType) { + public void removeRuleConfiguration(final ShardingSphereDatabase database, final RuleConfiguration toBeRemovedRuleConfig, final String ruleType) { + Collection<String> needReloadTables = getNeedReloadTables(database, toBeRemovedRuleConfig); metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), ruleType); try { metaDataContextManager.getDatabaseRuleItemManager().drop(new DatabaseRuleNodePath(database.getName(), ruleType, null)); + Map<String, Collection<ShardingSphereTable>> schemaAndTablesMap = metaDataPersistFacade.getDatabaseMetaDataFacade().persistAlteredTables( + database.getName(), metaDataContextManager.getMetaDataContexts(), needReloadTables); + alterTables(database, schemaAndTablesMap); } catch (final SQLException ex) { throw new SQLWrapperException(ex); } 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 e8916834a97..5e46430d1be 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 @@ -203,7 +203,8 @@ class StandaloneMetaDataManagerPersistServiceTest { @Test void assertRemoveRuleConfiguration() { - metaDataManagerPersistService.removeRuleConfiguration(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), "foo_rule"); + metaDataManagerPersistService.removeRuleConfiguration(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), + mock(RuleConfiguration.class), "foo_rule"); verify(metaDataPersistFacade.getDatabaseRuleService()).delete("foo_db", "foo_rule"); }