This is an automated email from the ASF dual-hosted git repository.

menghaoranss 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 69afac1d3e2 Fix remove single rule configuration for 
ClusterMetaDataManagerPersistService (#38691)
69afac1d3e2 is described below

commit 69afac1d3e297e59713d34d2b9538ae0076e2f1e
Author: Haoran Meng <[email protected]>
AuthorDate: Thu May 14 15:07:40 2026 +0800

    Fix remove single rule configuration for 
ClusterMetaDataManagerPersistService (#38691)
---
 .../service/ClusterMetaDataManagerPersistService.java    |  2 +-
 .../ClusterMetaDataManagerPersistServiceTest.java        | 16 ++++++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

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 32c1af09ec0..19de9d7d056 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
@@ -238,7 +238,7 @@ public final class ClusterMetaDataManagerPersistService 
implements MetaDataManag
     private void removeSingleRuleConfiguration(final ShardingSphereDatabase 
database, final RuleConfiguration toBeRemovedRuleItemConfig, final 
MetaDataContexts originalMetaDataContexts) {
         
metaDataPersistFacade.getDatabaseRuleService().delete(database.getName(), 
Collections.singleton(toBeRemovedRuleItemConfig));
         
metaDataPersistFacade.getDatabaseMetaDataFacade().persistReloadDatabaseByUnloadSingleTable(database.getName(),
-                
getReloadedMetaDataContexts(originalMetaDataContexts).getMetaData().getDatabase(database.getName()),
+                rebuildDatabaseSchemaIndex(database.getName(), 
getReloadedMetaDataContexts(originalMetaDataContexts)),
                 
originalMetaDataContexts.getMetaData().getDatabase(database.getName()));
     }
     
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 a358e03c8f8..529ff5eef95 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
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
@@ -48,6 +49,7 @@ import org.mockito.internal.configuration.plugins.Plugins;
 import org.mockito.junit.jupiter.MockitoExtension;
 
 import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.Properties;
 
 import static org.mockito.ArgumentMatchers.any;
@@ -188,6 +190,7 @@ class ClusterMetaDataManagerPersistServiceTest {
         ruleConfig.setTables(Collections.singleton("ds_0.t_order"));
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
         when(database.getName()).thenReturn("foo_db");
+        mockReloadedMetaDataContext();
         metaDataManagerPersistService.removeRuleConfigurationItem(database, 
ruleConfig);
         
verify(metaDataPersistFacade.getDatabaseRuleService()).delete("foo_db", 
Collections.singleton(ruleConfig));
         
verify(metaDataPersistFacade.getDatabaseMetaDataFacade()).persistReloadDatabaseByUnloadSingleTable(eq("foo_db"),
 any(), any());
@@ -210,6 +213,7 @@ class ClusterMetaDataManagerPersistServiceTest {
         ruleConfig.setTables(Collections.singleton("ds_0.t_order"));
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
         when(database.getName()).thenReturn("foo_db");
+        mockReloadedMetaDataContext();
         metaDataManagerPersistService.removeRuleConfiguration(database, 
ruleConfig, "SINGLE");
         
verify(metaDataPersistFacade.getDatabaseRuleService()).delete("foo_db", 
Collections.singleton(ruleConfig));
         
verify(metaDataPersistFacade.getDatabaseMetaDataFacade()).persistReloadDatabaseByUnloadSingleTable(eq("foo_db"),
 any(), any());
@@ -244,4 +248,16 @@ class ClusterMetaDataManagerPersistServiceTest {
                 Collections.emptyList(), new ConfigurationProperties(new 
Properties())), "foo_schema", Collections.singleton("foo_tbl"));
         
verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getTable()).drop("foo_db",
 "foo_schema", "foo_tbl");
     }
+    
+    private void mockReloadedMetaDataContext() {
+        ShardingSphereRule rule = mock(ShardingSphereRule.class);
+        when(rule.getAttributes()).thenReturn(new RuleAttributes());
+        ShardingSphereDatabase loadedDatabase = 
mock(ShardingSphereDatabase.class, Answers.RETURNS_DEEP_STUBS);
+        when(loadedDatabase.getName()).thenReturn("foo_db");
+        
when(loadedDatabase.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "MySQL"));
+        
when(loadedDatabase.getRuleMetaData().getRules()).thenReturn(Collections.singleton(rule));
+        
when(loadedDatabase.getResourceMetaData().getStorageUnits()).thenReturn(new 
LinkedHashMap<>());
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData(Collections.singleton(loadedDatabase), mock(), mock(), 
new ConfigurationProperties(new Properties()));
+        when(metaDataContextManager.getMetaDataContexts()).thenReturn(new 
MetaDataContexts(metaData, null));
+    }
 }

Reply via email to