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