You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2025/03/19 07:04:37 UTC
(shardingsphere) branch master updated: Refactor drop rule configuration (#35036)
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 <me...@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");
}