This is an automated email from the ASF dual-hosted git repository. zhangliang 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 c60021777d2 Refactor StandaloneMetaDataManagerPersistService.dropSchema() (#34523) c60021777d2 is described below commit c60021777d2a43704cbe9873c38aa656845bc358 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Mon Jan 27 23:13:03 2025 +0800 Refactor StandaloneMetaDataManagerPersistService.dropSchema() (#34523) * Add DatabaseMetaDataManager.renameSchema() * Refactor StandaloneMetaDataManagerPersistService.dropSchema() * Refactor StandaloneMetaDataManagerPersistService.dropSchema() * Refactor StandaloneMetaDataManagerPersistService.dropSchema() --- .../metadata/manager/DatabaseMetaDataManager.java | 23 ++++++++++++++++++- .../StandaloneMetaDataManagerPersistService.java | 26 ++-------------------- ...tandaloneMetaDataManagerPersistServiceTest.java | 3 ++- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java index 69cafe4cd07..e1286595c46 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseMetaDataManager.java @@ -100,6 +100,27 @@ public final class DatabaseMetaDataManager { return; } database.dropSchema(schemaName); + if (database.getSchema(schemaName).getAllTables().stream().anyMatch(each -> TableRefreshUtils.isSingleTable(each.getName(), database))) { + database.reloadRules(); + } + metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); + } + + /** + * Rename schema. + * + * @param databaseName database name + * @param schemaName schema name + * @param renamedSchemaName renamed schema name + */ + public synchronized void renameSchema(final String databaseName, final String schemaName, final String renamedSchemaName) { + ShardingSphereMetaData metaData = metaDataContexts.getMetaData(); + ShardingSphereDatabase database = metaData.getDatabase(databaseName); + ShardingSphereSchema schema = database.getSchema(schemaName); + ShardingSphereSchema renamedSchema = new ShardingSphereSchema(renamedSchemaName, schema.getAllTables(), schema.getAllViews()); + database.addSchema(renamedSchema); + database.dropSchema(schemaName); + database.reloadRules(); metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); } @@ -131,10 +152,10 @@ public final class DatabaseMetaDataManager { return; } ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabase(databaseName); + alterAction.accept(database.getSchema(schemaName)); if (TableRefreshUtils.isSingleTable(tableOrViewName, database)) { database.reloadRules(); } - alterAction.accept(database.getSchema(schemaName)); metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); } 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 983f4b84315..97d1c3ef338 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 @@ -26,7 +26,6 @@ import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereView; import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; -import org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute; import org.apache.shardingsphere.infra.rule.scope.GlobalRule; import org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType; import org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache; @@ -52,7 +51,6 @@ import java.util.Collections; import java.util.Map; import java.util.Optional; import java.util.Properties; -import java.util.stream.Collectors; /** * Standalone meta data manager persist service. @@ -118,18 +116,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa metaDataPersistService.getDatabaseMetaDataFacade().getView().persist(databaseName, renameSchemaName, schema.getAllViews()); } metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName, schemaName); - renameSchemaMetaData(databaseName, schemaName, renameSchemaName); - } - - private void renameSchemaMetaData(final String databaseName, final String schemaName, final String renamedSchemaName) { - ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData(); - ShardingSphereDatabase database = metaData.getDatabase(databaseName); - ShardingSphereSchema schema = database.getSchema(schemaName); - ShardingSphereSchema renamedSchema = new ShardingSphereSchema(renamedSchemaName, schema.getAllTables(), schema.getAllViews()); - database.addSchema(renamedSchema); - database.dropSchema(schemaName); - database.reloadRules(); - metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); + metaDataContextManager.getDatabaseMetaDataManager().renameSchema(databaseName, schemaName, renameSchemaName); } @Override @@ -139,16 +126,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa private void dropSchema(final String databaseName, final String schemaName) { metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName, schemaName); - ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData(); - ShardingSphereDatabase database = metaData.getDatabase(databaseName); - Collection<String> tobeRemovedTables = database.getSchema(schemaName).getAllTables().stream().map(ShardingSphereTable::getName).collect(Collectors.toSet()); - database.dropSchema(schemaName); - removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class), Collections.singleton(schemaName.toLowerCase()), tobeRemovedTables); - metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); - } - - private void removeDataNode(final Collection<MutableDataNodeRuleAttribute> ruleAttributes, final Collection<String> schemaNames, final Collection<String> tobeRemovedTables) { - tobeRemovedTables.forEach(each -> ruleAttributes.forEach(rule -> rule.remove(schemaNames, each))); + metaDataContextManager.getDatabaseMetaDataManager().dropSchema(databaseName, schemaName); } @Override 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 7f135b5eee2..5290541fc91 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 @@ -143,7 +143,8 @@ class StandaloneMetaDataManagerPersistServiceTest { ShardingSphereMetaData metaData = new ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new ConfigurationProperties(new Properties())); when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData); metaDataManagerPersistService.dropSchema("foo_db", Collections.singleton("foo_schema")); - verify(database).dropSchema(any()); + verify(metaDataPersistService.getDatabaseMetaDataFacade().getSchema()).drop("foo_db", "foo_schema"); + verify(metaDataContextManager.getDatabaseMetaDataManager()).dropSchema("foo_db", "foo_schema"); } @Test