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 7fd8a87de9a Move refresh single table rule from refresher to persist service after table dropped (#34818) 7fd8a87de9a is described below commit 7fd8a87de9af9a6c796b1125a050223dd5a22d61 Author: Haoran Meng <menghaora...@gmail.com> AuthorDate: Fri Feb 28 15:19:06 2025 +0800 Move refresh single table rule from refresher to persist service after table dropped (#34818) --- .../type/table/DropTablePushDownMetaDataRefresher.java | 14 +++----------- .../refresher/metadata/util/TableRefreshUtils.java | 7 +++---- .../persist/service/MetaDataManagerPersistService.java | 5 +++-- .../service/ClusterMetaDataManagerPersistService.java | 7 +++++-- .../service/ClusterMetaDataManagerPersistServiceTest.java | 5 +++-- .../service/StandaloneMetaDataManagerPersistService.java | 11 ++++++++--- .../StandaloneMetaDataManagerPersistServiceTest.java | 5 +++-- 7 files changed, 28 insertions(+), 26 deletions(-) diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java index f7ee2b0a21e..64e8b4ff0f2 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/DropTablePushDownMetaDataRefresher.java @@ -21,13 +21,12 @@ 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.mode.metadata.refresher.metadata.pushdown.PushDownMetaDataRefresher; -import org.apache.shardingsphere.mode.metadata.refresher.metadata.util.TableRefreshUtils; import org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService; -import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.statement.core.statement.ddl.DropTableStatement; import java.sql.SQLException; import java.util.Collection; +import java.util.stream.Collectors; /** * Drop table push down meta data refresher. @@ -37,15 +36,8 @@ public final class DropTablePushDownMetaDataRefresher implements PushDownMetaDat @Override public void refresh(final MetaDataManagerPersistService metaDataManagerPersistService, final ShardingSphereDatabase database, final Collection<String> logicDataSourceNames, final String schemaName, final DatabaseType databaseType, final DropTableStatement sqlStatement, final ConfigurationProperties props) throws SQLException { - boolean needRefresh = TableRefreshUtils.isNeedRefresh(database.getRuleMetaData(), schemaName, sqlStatement.getTables()); - boolean isRefreshed = false; - for (SimpleTableSegment each : sqlStatement.getTables()) { - metaDataManagerPersistService.dropTable(database, schemaName, each.getTableName().getIdentifier().getValue()); - if (!isRefreshed && needRefresh && TableRefreshUtils.isSingleTable(each.getTableName().getIdentifier().getValue(), database)) { - metaDataManagerPersistService.alterSingleRuleConfiguration(database, database.getRuleMetaData()); - isRefreshed = true; - } - } + Collection<String> tableNames = sqlStatement.getTables().stream().map(each -> each.getTableName().getIdentifier().getValue()).collect(Collectors.toList()); + metaDataManagerPersistService.dropTables(database, schemaName, tableNames); } @Override diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java index 3c701676a9b..ffe88698371 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/util/TableRefreshUtils.java @@ -32,7 +32,6 @@ import org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRu import org.apache.shardingsphere.infra.rule.attribute.table.TableMapperRuleAttribute; import org.apache.shardingsphere.single.config.SingleRuleConfiguration; import org.apache.shardingsphere.single.constant.SingleTableConstants; -import org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment; import org.apache.shardingsphere.sql.parser.statement.core.value.identifier.IdentifierValue; import java.util.Collection; @@ -74,11 +73,11 @@ public final class TableRefreshUtils { * * @param ruleMetaData rule meta data * @param schemaName schema name - * @param tableSegments table segments + * @param tableNames table names * @return need to refresh or not */ - public static boolean isNeedRefresh(final RuleMetaData ruleMetaData, final String schemaName, final Collection<SimpleTableSegment> tableSegments) { - return tableSegments.stream().anyMatch(each -> isNeedRefresh(ruleMetaData, schemaName, each.getTableName().getIdentifier().getValue())); + public static boolean isNeedRefresh(final RuleMetaData ruleMetaData, final String schemaName, final Collection<String> tableNames) { + return tableNames.stream().anyMatch(each -> isNeedRefresh(ruleMetaData, schemaName, each)); } /** 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 f726f087f9a..56b9cb4d8b5 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 @@ -101,9 +101,10 @@ public interface MetaDataManagerPersistService { * * @param database database * @param schemaName schema name - * @param tableName table name + * @param tableNames table names + * @throws SQLException SQL exception */ - void dropTable(ShardingSphereDatabase database, String schemaName, String tableName); + void dropTables(ShardingSphereDatabase database, String schemaName, Collection<String> tableNames) throws SQLException; /** * Register storage units. 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 d67288797e8..ea1e8e69623 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 @@ -120,8 +120,11 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag } @Override - public void dropTable(final ShardingSphereDatabase database, final String schemaName, final String tableName) { - metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(database.getName(), schemaName, tableName); + public void dropTables(final ShardingSphereDatabase database, final String schemaName, final Collection<String> tableNames) { + tableNames.forEach(each -> metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(database.getName(), schemaName, each)); + if (TableRefreshUtils.isNeedRefresh(database.getRuleMetaData(), schemaName, tableNames) && tableNames.stream().anyMatch(each -> TableRefreshUtils.isSingleTable(each, database))) { + alterSingleRuleConfiguration(database, database.getRuleMetaData()); + } } @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 c23b7e7d5c7..f8d7244622d 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 @@ -192,8 +192,9 @@ class ClusterMetaDataManagerPersistServiceTest { } @Test - void assertDropTable() { - metaDataManagerPersistService.dropTable(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), "foo_schema", "foo_tbl"); + void assertDropTables() { + metaDataManagerPersistService.dropTables(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), + Collections.emptyList()), "foo_schema", Collections.singleton("foo_tbl")); verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getTable()).drop("foo_db", "foo_schema", "foo_tbl"); } } 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 5887977463b..0c7608a4d67 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 @@ -138,9 +138,14 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa } @Override - public void dropTable(final ShardingSphereDatabase database, final String schemaName, final String tableName) { - metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(database.getName(), schemaName, tableName); - metaDataContextManager.getDatabaseMetaDataManager().dropTable(database.getName(), schemaName, tableName); + public void dropTables(final ShardingSphereDatabase database, final String schemaName, final Collection<String> tableNames) throws SQLException { + tableNames.forEach(each -> { + metaDataPersistFacade.getDatabaseMetaDataFacade().getTable().drop(database.getName(), schemaName, each); + metaDataContextManager.getDatabaseMetaDataManager().dropTable(database.getName(), schemaName, each); + }); + if (TableRefreshUtils.isNeedRefresh(database.getRuleMetaData(), schemaName, tableNames) && tableNames.stream().anyMatch(each -> TableRefreshUtils.isSingleTable(each, database))) { + alterSingleRuleConfiguration(database, database.getRuleMetaData()); + } } @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 e14d7b2a8ad..bd55516bbf6 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 @@ -230,8 +230,9 @@ class StandaloneMetaDataManagerPersistServiceTest { } @Test - void assertDropTable() { - metaDataManagerPersistService.dropTable(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), Collections.emptyList()), "foo_schema", "foo_tbl"); + void assertDropTables() throws SQLException { + metaDataManagerPersistService.dropTables(new ShardingSphereDatabase("foo_db", mock(), mock(), mock(), + Collections.emptyList()), "foo_schema", Collections.singleton("foo_tbl")); verify(metaDataPersistFacade.getDatabaseMetaDataFacade().getTable()).drop("foo_db", "foo_schema", "foo_tbl"); }