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 b6699498ac1 Refactor MetaDataManagerPersistService.alterSchemaName() (#34522) b6699498ac1 is described below commit b6699498ac12cd7391e4a6ce5f595df2e4b5d065 Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Mon Jan 27 17:23:17 2025 +0800 Refactor MetaDataManagerPersistService.alterSchemaName() (#34522) * Refactor MetaDataManagerPersistService.alterSchemaName() * Rename MetaDataManagerPersistService.renameSchema --- .../AlterSchemaPushDownMetaDataRefresher.java | 3 +- .../service/MetaDataManagerPersistService.java | 5 ++- .../ClusterMetaDataManagerPersistService.java | 2 +- .../ClusterMetaDataManagerPersistServiceTest.java | 8 ++--- .../StandaloneMetaDataManagerPersistService.java | 41 +++++++--------------- ...tandaloneMetaDataManagerPersistServiceTest.java | 8 ++--- 6 files changed, 24 insertions(+), 43 deletions(-) diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/schema/AlterSchemaPushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/schema/AlterSchemaPushDownMetaDataRefresher.java index bd05734f956..d2aa7bdc60a 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/schema/AlterSchemaPushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/schema/AlterSchemaPushDownMetaDataRefresher.java @@ -40,8 +40,7 @@ public final class AlterSchemaPushDownMetaDataRefresher implements PushDownMetaD if (!renameSchemaName.isPresent()) { return; } - metaDataManagerPersistService.alterSchemaName( - database.getName(), sqlStatement.getSchemaName().getValue().toLowerCase(), renameSchemaName.get(), logicDataSourceNames.isEmpty() ? null : logicDataSourceNames.iterator().next()); + metaDataManagerPersistService.renameSchema(database.getName(), sqlStatement.getSchemaName().getValue().toLowerCase(), renameSchemaName.get()); } @Override 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 7cbcf682d00..b5ee1cc48c7 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 @@ -70,14 +70,13 @@ public interface MetaDataManagerPersistService { Collection<ShardingSphereTable> alteredTables, Collection<ShardingSphereView> alteredViews, Collection<String> droppedTables, Collection<String> droppedViews); /** - * Alter schema name. + * Rename schema. * * @param databaseName database name * @param schemaName schema name * @param renameSchemaName rename schema name - * @param logicDataSourceName logic data source name */ - void alterSchemaName(String databaseName, String schemaName, String renameSchemaName, String logicDataSourceName); + void renameSchema(String databaseName, String schemaName, String renameSchemaName); /** * Drop schema. 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 900363c62ea..9c141e59ed4 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 @@ -99,7 +99,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } @Override - public void alterSchemaName(final String databaseName, final String schemaName, final String renameSchemaName, final String logicDataSourceName) { + public void renameSchema(final String databaseName, final String schemaName, final String renameSchemaName) { ShardingSphereSchema schema = metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName); if (schema.isEmpty()) { metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName, renameSchemaName); 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 2a906cbe00a..172e056b4d1 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 @@ -99,10 +99,10 @@ class ClusterMetaDataManagerPersistServiceTest { } @Test - void assertAlterNotEmptySchemaName() { + void assertRenameNotEmptySchemaName() { ShardingSphereSchema schema = mock(ShardingSphereSchema.class); when(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(schema); - metaDataManagerPersistService.alterSchemaName("foo_db", "foo_schema", "bar_schema", "foo_ds"); + metaDataManagerPersistService.renameSchema("foo_db", "foo_schema", "bar_schema"); verify(metaDataPersistService.getDatabaseMetaDataFacade().getTable()).persist(eq("foo_db"), eq("bar_schema"), anyCollection()); verify(metaDataPersistService.getDatabaseMetaDataFacade().getView()).persist(eq("foo_db"), eq("bar_schema"), anyCollection()); verify(metaDataPersistService.getDatabaseMetaDataFacade().getSchema()).drop("foo_db", "foo_schema"); @@ -110,11 +110,11 @@ class ClusterMetaDataManagerPersistServiceTest { } @Test - void assertAlterEmptySchemaName() { + void assertRenameEmptySchemaName() { ShardingSphereSchema schema = mock(ShardingSphereSchema.class); when(schema.isEmpty()).thenReturn(true); when(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(schema); - metaDataManagerPersistService.alterSchemaName("foo_db", "foo_schema", "bar_schema", "foo_ds"); + metaDataManagerPersistService.renameSchema("foo_db", "foo_schema", "bar_schema"); verify(metaDataPersistService.getDatabaseMetaDataFacade().getSchema()).drop("foo_db", "foo_schema"); verify(metaDataPersistService.getDatabaseMetaDataFacade().getSchema()).add("foo_db", "bar_schema"); } 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 66636bc24c0..983f4b84315 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 @@ -17,7 +17,6 @@ package org.apache.shardingsphere.mode.manager.standalone.persist.service; -import com.google.common.base.Strings; import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; @@ -32,15 +31,14 @@ 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; import org.apache.shardingsphere.mode.event.DataChangedEvent.Type; +import org.apache.shardingsphere.mode.manager.standalone.changed.RuleItemChangedBuilder; import org.apache.shardingsphere.mode.metadata.MetaDataContextManager; import org.apache.shardingsphere.mode.metadata.MetaDataContexts; import org.apache.shardingsphere.mode.metadata.factory.MetaDataContextsFactory; -import org.apache.shardingsphere.mode.manager.standalone.changed.RuleItemChangedBuilder; import org.apache.shardingsphere.mode.metadata.manager.SwitchingResource; import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService; import org.apache.shardingsphere.mode.metadata.persist.config.database.DataSourceUnitPersistService; import org.apache.shardingsphere.mode.metadata.persist.metadata.DatabaseMetaDataPersistFacade; -import org.apache.shardingsphere.mode.metadata.refresher.metadata.util.TableRefreshUtils; import org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService; import org.apache.shardingsphere.mode.spi.rule.item.RuleChangedItem; import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem; @@ -111,9 +109,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa } @Override - public void alterSchemaName(final String databaseName, final String schemaName, final String renameSchemaName, final String logicDataSourceName) { - ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData(); - ShardingSphereDatabase database = metaData.getDatabase(databaseName); + public void renameSchema(final String databaseName, final String schemaName, final String renameSchemaName) { ShardingSphereSchema schema = metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName); if (schema.isEmpty()) { metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName, renameSchemaName); @@ -122,35 +118,18 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa metaDataPersistService.getDatabaseMetaDataFacade().getView().persist(databaseName, renameSchemaName, schema.getAllViews()); } metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName, schemaName); - putSchemaMetaData(database, schemaName, renameSchemaName, logicDataSourceName); - removeSchemaMetaData(database, schemaName); - metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); + renameSchemaMetaData(databaseName, schemaName, renameSchemaName); } - private void putSchemaMetaData(final ShardingSphereDatabase database, final String schemaName, final String renamedSchemaName, final String logicDataSourceName) { + 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); - addDataNode(database, logicDataSourceName, schemaName, schema.getAllTables()); - } - - private void addDataNode(final ShardingSphereDatabase database, final String logicDataSourceName, final String schemaName, final Collection<ShardingSphereTable> tobeAddedTables) { - for (ShardingSphereTable each : tobeAddedTables) { - if (!Strings.isNullOrEmpty(logicDataSourceName) && TableRefreshUtils.isSingleTable(each.getName(), database)) { - database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(rule -> rule.put(logicDataSourceName, schemaName, each.getName())); - } - } - } - - private void removeSchemaMetaData(final ShardingSphereDatabase database, final String schemaName) { - ShardingSphereSchema schema = new ShardingSphereSchema(schemaName, database.getSchema(schemaName).getAllTables(), database.getSchema(schemaName).getAllViews()); database.dropSchema(schemaName); - removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class), Collections.singleton(schemaName), - schema.getAllTables().stream().map(ShardingSphereTable::getName).collect(Collectors.toSet())); - } - - 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))); + database.reloadRules(); + metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); } @Override @@ -168,6 +147,10 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa 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))); + } + @Override public void createTable(final String databaseName, final String schemaName, final ShardingSphereTable table) { metaDataPersistService.getDatabaseMetaDataFacade().getTable().persist(databaseName, schemaName, Collections.singleton(table)); 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 f70d5d13167..7f135b5eee2 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 @@ -106,14 +106,14 @@ class StandaloneMetaDataManagerPersistServiceTest { } @Test - void assertAlterSchemaNameWithEmptyAlteredSchema() { + void assertRenameSchemaNameWithEmptyAlteredSchema() { ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS); when(database.getName()).thenReturn("foo_db"); ShardingSphereMetaData metaData = new ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new ConfigurationProperties(new Properties())); when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData); DatabaseMetaDataPersistFacade databaseMetaDataFacade = mock(DatabaseMetaDataPersistFacade.class, RETURNS_DEEP_STUBS); when(metaDataPersistService.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade); - metaDataManagerPersistService.alterSchemaName("foo_db", "foo_schema", "bar_schema", "foo_ds"); + metaDataManagerPersistService.renameSchema("foo_db", "foo_schema", "bar_schema"); verify(databaseMetaDataFacade.getSchema(), times(0)).add("foo_db", "bar_schema"); verify(databaseMetaDataFacade.getTable()).persist(eq("foo_db"), eq("bar_schema"), anyCollection()); verify(databaseMetaDataFacade.getView()).persist(eq("foo_db"), eq("bar_schema"), anyCollection()); @@ -121,7 +121,7 @@ class StandaloneMetaDataManagerPersistServiceTest { } @Test - void assertAlterSchemaNameWithNotEmptyAlteredSchema() { + void assertRenameSchemaNameWithNotEmptyAlteredSchema() { ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS); when(database.getName()).thenReturn("foo_db"); when(database.getSchema("foo_schema")).thenReturn(new ShardingSphereSchema("foo_schema")); @@ -130,7 +130,7 @@ class StandaloneMetaDataManagerPersistServiceTest { when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData); DatabaseMetaDataPersistFacade databaseMetaDataFacade = mock(DatabaseMetaDataPersistFacade.class, RETURNS_DEEP_STUBS); when(metaDataPersistService.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade); - metaDataManagerPersistService.alterSchemaName("foo_db", "foo_schema", "bar_schema", "foo_ds"); + metaDataManagerPersistService.renameSchema("foo_db", "foo_schema", "bar_schema"); verify(databaseMetaDataFacade.getSchema()).add("foo_db", "bar_schema"); verify(databaseMetaDataFacade.getSchema()).drop("foo_db", "foo_schema"); }