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 d1545a06a1e Refactor MetaDataManagerPersistService.alterSchemaName() (#34471) d1545a06a1e is described below commit d1545a06a1e747d99d80c40ba638a40e3a94a45e Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Fri Jan 24 22:40:19 2025 +0800 Refactor MetaDataManagerPersistService.alterSchemaName() (#34471) * Refactor MetaDataManagerPersistService.alterSchemaName() * Refactor MetaDataManagerPersistService.alterSchemaName() * Remove AlterSchemaPOJO * Remove AlterSchemaPOJO --- .../database/schema/pojo/AlterSchemaPOJO.java | 44 ---------------------- .../AlterSchemaPushDownMetaDataRefresher.java | 4 +- .../service/MetaDataManagerPersistService.java | 8 ++-- .../ClusterMetaDataManagerPersistService.java | 21 +++++------ .../ClusterMetaDataManagerPersistServiceTest.java | 3 +- .../StandaloneMetaDataManagerPersistService.java | 21 +++++------ ...tandaloneMetaDataManagerPersistServiceTest.java | 5 +-- 7 files changed, 28 insertions(+), 78 deletions(-) diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/pojo/AlterSchemaPOJO.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/pojo/AlterSchemaPOJO.java deleted file mode 100644 index 502eecb1fd2..00000000000 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/pojo/AlterSchemaPOJO.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.shardingsphere.infra.metadata.database.schema.pojo; - -import lombok.Getter; - -import java.util.Collection; - -/** - * Alter schema pojo. - */ -@Getter -public final class AlterSchemaPOJO { - - private final String databaseName; - - private final String schemaName; - - private final String renameSchemaName; - - private final String logicDataSourceName; - - public AlterSchemaPOJO(final String databaseName, final String schemaName, final String renameSchemaName, final Collection<String> logicDataSourceNames) { - this.databaseName = databaseName; - this.schemaName = schemaName; - this.renameSchemaName = renameSchemaName; - this.logicDataSourceName = logicDataSourceNames.isEmpty() ? null : logicDataSourceNames.iterator().next(); - } -} 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 9ac703d2a73..bd05734f956 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 @@ -20,7 +20,6 @@ package org.apache.shardingsphere.mode.metadata.refresher.metadata.pushdown.type import org.apache.shardingsphere.infra.config.props.ConfigurationProperties; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; -import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO; import org.apache.shardingsphere.mode.metadata.refresher.metadata.pushdown.PushDownMetaDataRefresher; import org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService; import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.AlterSchemaStatement; @@ -41,7 +40,8 @@ public final class AlterSchemaPushDownMetaDataRefresher implements PushDownMetaD if (!renameSchemaName.isPresent()) { return; } - metaDataManagerPersistService.alterSchemaName(new AlterSchemaPOJO(database.getName(), sqlStatement.getSchemaName().getValue().toLowerCase(), renameSchemaName.get(), logicDataSourceNames)); + metaDataManagerPersistService.alterSchemaName( + database.getName(), sqlStatement.getSchemaName().getValue().toLowerCase(), renameSchemaName.get(), logicDataSourceNames.isEmpty() ? null : logicDataSourceNames.iterator().next()); } @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 fd62c7fa85e..27b615f1e12 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 @@ -21,7 +21,6 @@ import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO; -import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO; import java.sql.SQLException; import java.util.Collection; @@ -67,10 +66,13 @@ public interface MetaDataManagerPersistService { /** * Alter schema name. * - * @param alterSchemaPOJO alter schema pojo + * @param databaseName database name + * @param schemaName schema name + * @param renameSchemaName rename schema name + * @param logicDataSourceName logic data source name * @throws SQLException SQL exception */ - void alterSchemaName(AlterSchemaPOJO alterSchemaPOJO) throws SQLException; + void alterSchemaName(String databaseName, String schemaName, String renameSchemaName, String logicDataSourceName) throws SQLException; /** * 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 b91a4b60cdf..02920f47adc 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 @@ -26,20 +26,19 @@ import org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNo import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO; -import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO; import org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics; import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; -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.MetaDataContextManager; import org.apache.shardingsphere.mode.metadata.MetaDataContexts; import org.apache.shardingsphere.mode.metadata.factory.MetaDataContextsFactory; import org.apache.shardingsphere.mode.metadata.manager.SwitchingResource; -import org.apache.shardingsphere.mode.state.database.ListenerAssistedType; -import org.apache.shardingsphere.mode.state.database.ListenerAssistedPersistService; +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.persist.service.MetaDataManagerPersistService; import org.apache.shardingsphere.mode.spi.repository.PersistRepository; +import org.apache.shardingsphere.mode.state.database.ListenerAssistedPersistService; +import org.apache.shardingsphere.mode.state.database.ListenerAssistedType; import org.apache.shardingsphere.single.config.SingleRuleConfiguration; import javax.sql.DataSource; @@ -99,15 +98,13 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } @Override - public void alterSchemaName(final AlterSchemaPOJO alterSchemaPOJO) { - String databaseName = alterSchemaPOJO.getDatabaseName(); - String schemaName = alterSchemaPOJO.getSchemaName(); + public void alterSchemaName(final String databaseName, final String schemaName, final String renameSchemaName, final String logicDataSourceName) { ShardingSphereSchema schema = metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName); if (schema.isEmpty()) { - metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName, alterSchemaPOJO.getRenameSchemaName()); + metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName, renameSchemaName); } - metaDataPersistService.getDatabaseMetaDataFacade().getTable().persist(databaseName, alterSchemaPOJO.getRenameSchemaName(), schema.getAllTables()); - metaDataPersistService.getDatabaseMetaDataFacade().getView().persist(databaseName, alterSchemaPOJO.getRenameSchemaName(), schema.getAllViews()); + metaDataPersistService.getDatabaseMetaDataFacade().getTable().persist(databaseName, renameSchemaName, schema.getAllTables()); + metaDataPersistService.getDatabaseMetaDataFacade().getView().persist(databaseName, renameSchemaName, schema.getAllViews()); metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName, schemaName); } 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 1573200bd55..4b86e04a909 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,7 +22,6 @@ import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO; -import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO; import org.apache.shardingsphere.mode.metadata.MetaDataContextManager; import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService; import org.apache.shardingsphere.mode.spi.repository.PersistRepository; @@ -120,7 +119,7 @@ class ClusterMetaDataManagerPersistServiceTest { private void assertAlterSchemaName(final ShardingSphereSchema schema) { when(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(schema); - metaDataManagerPersistService.alterSchemaName(new AlterSchemaPOJO("foo_db", "foo_schema", "bar_schema", Collections.singleton("foo_ds"))); + metaDataManagerPersistService.alterSchemaName("foo_db", "foo_schema", "bar_schema", "foo_ds"); 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"); 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 44e6b2cfde1..e86d68ecabe 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.database.schema.pojo.AlterSchemaMetaDataPOJO; -import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO; 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; @@ -111,21 +110,19 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa } @Override - public void alterSchemaName(final AlterSchemaPOJO alterSchemaPOJO) { + public void alterSchemaName(final String databaseName, final String schemaName, final String renameSchemaName, final String logicDataSourceName) { ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData(); - ShardingSphereDatabase database = metaData.getDatabase(alterSchemaPOJO.getDatabaseName()); - putSchemaMetaData(database, alterSchemaPOJO.getSchemaName(), alterSchemaPOJO.getRenameSchemaName(), alterSchemaPOJO.getLogicDataSourceName()); - removeSchemaMetaData(database, alterSchemaPOJO.getSchemaName()); + ShardingSphereDatabase database = metaData.getDatabase(databaseName); + putSchemaMetaData(database, schemaName, renameSchemaName, logicDataSourceName); + removeSchemaMetaData(database, schemaName); metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); - ShardingSphereSchema alteredSchema = database.getSchema(alterSchemaPOJO.getRenameSchemaName()); - String databaseName = alterSchemaPOJO.getDatabaseName(); - String alteredSchemaName = alterSchemaPOJO.getRenameSchemaName(); + ShardingSphereSchema alteredSchema = database.getSchema(renameSchemaName); if (alteredSchema.isEmpty()) { - metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName, alteredSchemaName); + metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName, renameSchemaName); } - metaDataPersistService.getDatabaseMetaDataFacade().getTable().persist(databaseName, alteredSchemaName, alteredSchema.getAllTables()); - metaDataPersistService.getDatabaseMetaDataFacade().getView().persist(databaseName, alteredSchemaName, alteredSchema.getAllViews()); - metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName, alterSchemaPOJO.getSchemaName()); + metaDataPersistService.getDatabaseMetaDataFacade().getTable().persist(databaseName, renameSchemaName, alteredSchema.getAllTables()); + metaDataPersistService.getDatabaseMetaDataFacade().getView().persist(databaseName, renameSchemaName, alteredSchema.getAllViews()); + metaDataPersistService.getDatabaseMetaDataFacade().getSchema().drop(databaseName, schemaName); } private void putSchemaMetaData(final ShardingSphereDatabase database, final String schemaName, final String renamedSchemaName, final String logicDataSourceName) { 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 c5739499f76..38a5b254b45 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 @@ -26,7 +26,6 @@ import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema; import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable; import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO; -import org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO; import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion; import org.apache.shardingsphere.mode.metadata.MetaDataContextManager; import org.apache.shardingsphere.mode.metadata.manager.RuleItemChangedBuilder; @@ -114,7 +113,7 @@ class StandaloneMetaDataManagerPersistServiceTest { when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData); DatabaseMetaDataPersistFacade databaseMetaDataFacade = mock(DatabaseMetaDataPersistFacade.class, RETURNS_DEEP_STUBS); when(metaDataPersistService.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade); - metaDataManagerPersistService.alterSchemaName(new AlterSchemaPOJO("foo_db", "foo_schema", "bar_schema", Collections.singleton("foo_ds"))); + metaDataManagerPersistService.alterSchemaName("foo_db", "foo_schema", "bar_schema", "foo_ds"); 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()); @@ -131,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(new AlterSchemaPOJO("foo_db", "foo_schema", "bar_schema", Collections.singleton("foo_ds"))); + metaDataManagerPersistService.alterSchemaName("foo_db", "foo_schema", "bar_schema", "foo_ds"); verify(databaseMetaDataFacade.getSchema()).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());