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 bab16d58c98 Refactor SchemaMetaDataManager.dropTable and dropView (#34503) bab16d58c98 is described below commit bab16d58c98fc3a523a5a0e9a3ad28d06a5648fe Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sun Jan 26 12:23:01 2025 +0800 Refactor SchemaMetaDataManager.dropTable and dropView (#34503) * Refactor SchemaMetaDataManager * Refactor SchemaMetaDataManager.dropTable and dropView * Refactor SchemaMetaDataManager.dropTable and dropView --- .../infra/rule/scope/GlobalRule.java | 2 +- .../metadata/manager/SchemaMetaDataManager.java | 62 ++++++++++++---------- .../manager/SchemaMetaDataManagerTest.java | 26 ++------- .../database/metadata/TableChangedHandler.java | 2 +- .../database/metadata/ViewChangedHandler.java | 2 +- .../metadata/MetaDataChangedHandlerTest.java | 4 +- 6 files changed, 42 insertions(+), 56 deletions(-) diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java index 4ccc001ac38..3f361db212f 100644 --- a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java +++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/scope/GlobalRule.java @@ -37,7 +37,7 @@ public interface GlobalRule extends ShardingSphereRule { } /** - * Global rule changed type enum. + * Global rule changed type. */ enum GlobalRuleChangedType { diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java index 5e2f86d6a8a..3d4982d54da 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java @@ -17,7 +17,6 @@ package org.apache.shardingsphere.mode.metadata.manager; -import com.google.common.base.Strings; import lombok.RequiredArgsConstructor; import org.apache.shardingsphere.infra.database.DatabaseTypeEngine; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; @@ -124,26 +123,6 @@ public final class SchemaMetaDataManager { } } - /** - * Alter schema. - * - * @param databaseName database name - * @param schemaName schema name - * @param toBeDeletedTableName to be deleted table name - * @param toBeDeletedViewName to be deleted view name - */ - public synchronized void alterSchema(final String databaseName, final String schemaName, final String toBeDeletedTableName, final String toBeDeletedViewName) { - ShardingSphereMetaData metaData = metaDataContexts.getMetaData(); - if (!metaData.getDatabase(databaseName).containsSchema(schemaName)) { - return; - } - Optional.ofNullable(toBeDeletedTableName).ifPresent(optional -> dropTable(databaseName, schemaName, optional)); - Optional.ofNullable(toBeDeletedViewName).ifPresent(optional -> dropView(databaseName, schemaName, optional)); - if (!Strings.isNullOrEmpty(toBeDeletedTableName) || !Strings.isNullOrEmpty(toBeDeletedViewName)) { - metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); - } - } - private void alterTable(final String databaseName, final String schemaName, final ShardingSphereTable beBoChangedTable) { ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabase(databaseName); if (TableRefreshUtils.isSingleTable(beBoChangedTable.getName(), database)) { @@ -160,15 +139,40 @@ public final class SchemaMetaDataManager { database.getSchema(schemaName).putView(beBoChangedView); } - private void dropTable(final String databaseName, final String schemaName, final String toBeDeletedTableName) { - metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).removeTable(toBeDeletedTableName); - metaDataContexts.getMetaData().getDatabase(databaseName) - .getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each -> each.remove(schemaName, toBeDeletedTableName)); + /** + * Drop table. + * + * @param databaseName database name + * @param schemaName schema name + * @param toBeDroppedTableName to be dropped table name + */ + public synchronized void dropTable(final String databaseName, final String schemaName, final String toBeDroppedTableName) { + dropTableOrView(databaseName, schemaName, toBeDroppedTableName, true); } - private void dropView(final String databaseName, final String schemaName, final String toBeDeletedViewName) { - metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).removeView(toBeDeletedViewName); - metaDataContexts.getMetaData().getDatabase(databaseName) - .getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each -> each.remove(schemaName, toBeDeletedViewName)); + /** + * Drop view. + * + * @param databaseName database name + * @param schemaName schema name + * @param toBeDroppedViewName to be dropped view name + */ + public void dropView(final String databaseName, final String schemaName, final String toBeDroppedViewName) { + dropTableOrView(databaseName, schemaName, toBeDroppedViewName, false); + } + + private void dropTableOrView(final String databaseName, final String schemaName, final String toBeDroppedTableOrViewName, final boolean isTable) { + ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabase(databaseName); + if (!database.containsSchema(schemaName)) { + return; + } + if (isTable) { + database.getSchema(schemaName).removeTable(toBeDroppedTableOrViewName); + } else { + database.getSchema(schemaName).removeView(toBeDroppedTableOrViewName); + } + database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each -> each.remove(schemaName, toBeDroppedTableOrViewName)); + metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules() + .forEach(each -> ((GlobalRule) each).refresh(metaDataContexts.getMetaData().getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED)); } } diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java index 5041dbb506f..354080e7340 100644 --- a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java +++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java @@ -174,34 +174,16 @@ class SchemaMetaDataManagerTest { } @Test - void assertAlterNotExistedSchemaForTableDropped() { - ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema(); - when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema)); - when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema); - schemaMetaDataManager.alterSchema("foo_db", "bar_schema", "", ""); - verify(metaDataContexts.getMetaData().getDatabase("foo_db"), times(0)).getSchema(any()); - } - - @Test - void assertAlterSchemaForNothingTableDropped() { - ShardingSphereSchema toBeAlteredSchema = createToBeAlteredSchema(); - when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(toBeAlteredSchema)); - when(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(toBeAlteredSchema); - schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "", ""); - verify(metaDataContexts.getMetaData().getGlobalRuleMetaData(), times(0)).getRules(); - } - - @Test - void assertAlterSchemaForTableDropped() { + void assertDropTable() { when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(createToBeAlteredSchema())); - schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "foo_tbl", null); + schemaMetaDataManager.dropTable("foo_db", "foo_schema", "foo_tbl"); assertFalse(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema").containsTable("foo_tbl")); } @Test - void assertAlterSchemaForViewDropped() { + void assertDropView() { when(metaDataContexts.getMetaData().getDatabase("foo_db").getAllSchemas()).thenReturn(Collections.singleton(createToBeAlteredSchema())); - schemaMetaDataManager.alterSchema("foo_db", "foo_schema", "foo_view", null); + schemaMetaDataManager.dropView("foo_db", "foo_schema", "foo_view"); assertFalse(metaDataContexts.getMetaData().getDatabase("foo_db").getSchema("foo_schema").containsView("foo_view")); } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java index 90337250be2..3b0bab15755 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/TableChangedHandler.java @@ -62,7 +62,7 @@ public final class TableChangedHandler { */ public void handleDropped(final String databaseName, final String schemaName, final DataChangedEvent event) { String tableName = TableMetaDataNodePath.findTableName(event.getKey()).orElseThrow(() -> new IllegalStateException("Table name not found.")); - contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName, schemaName, tableName, null); + contextManager.getMetaDataContextManager().getSchemaMetaDataManager().dropTable(databaseName, schemaName, tableName); statisticsRefreshEngine.asyncRefresh(); } } diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java index 294d9f03a73..4a849a82bee 100644 --- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java +++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/ViewChangedHandler.java @@ -62,7 +62,7 @@ public final class ViewChangedHandler { */ public void handleDropped(final String databaseName, final String schemaName, final DataChangedEvent event) { String viewName = ViewMetaDataNodePath.findViewName(event.getKey()).orElseThrow(() -> new IllegalStateException("View name not found.")); - contextManager.getMetaDataContextManager().getSchemaMetaDataManager().alterSchema(databaseName, schemaName, null, viewName); + contextManager.getMetaDataContextManager().getSchemaMetaDataManager().dropView(databaseName, schemaName, viewName); statisticsRefreshEngine.asyncRefresh(); } } diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java index 3cb924b158a..b565844f4f9 100644 --- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java +++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/dispatch/handler/database/metadata/MetaDataChangedHandlerTest.java @@ -94,7 +94,7 @@ class MetaDataChangedHandlerTest { @Test void assertHandleTableDropped() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/schemas/foo_schema/tables/foo_tbl", "", Type.DELETED)); - verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db", "foo_schema", "foo_tbl", null); + verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).dropTable("foo_db", "foo_schema", "foo_tbl"); } @Test @@ -120,7 +120,7 @@ class MetaDataChangedHandlerTest { @Test void assertHandleViewDropped() { handler.handle("foo_db", new DataChangedEvent("/metadata/foo_db/schemas/foo_schema/views/foo_view", "", Type.DELETED)); - verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).alterSchema("foo_db", "foo_schema", null, "foo_view"); + verify(contextManager.getMetaDataContextManager().getSchemaMetaDataManager()).dropView("foo_db", "foo_schema", "foo_view"); } @Test