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");
     }
     

Reply via email to