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 59354d7691a Refactor TableRefreshUtils (#34486) 59354d7691a is described below commit 59354d7691a5ec3fa8fca1fb1dbc3ab01fdf577c Author: Liang Zhang <zhangli...@apache.org> AuthorDate: Sat Jan 25 17:47:34 2025 +0800 Refactor TableRefreshUtils (#34486) * Refactor TableRefreshUtils * Refactor TableRefreshUtils --- mode/core/pom.xml | 5 ++ .../CreateTablePushDownMetaDataRefresher.java | 2 +- .../table/DropTablePushDownMetaDataRefresher.java | 2 +- .../refresher/metadata/util/TableRefreshUtils.java | 54 +++++++--------------- 4 files changed, 23 insertions(+), 40 deletions(-) diff --git a/mode/core/pom.xml b/mode/core/pom.xml index 1e31f07776b..0ce406b2c53 100644 --- a/mode/core/pom.xml +++ b/mode/core/pom.xml @@ -37,6 +37,11 @@ <artifactId>shardingsphere-mode-node</artifactId> <version>${project.version}</version> </dependency> + <dependency> + <groupId>org.apache.shardingsphere</groupId> + <artifactId>shardingsphere-single-core</artifactId> + <version>${project.version}</version> + </dependency> <dependency> <groupId>org.apache.shardingsphere</groupId> diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java index f88518cbe43..9ca75672420 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/metadata/pushdown/type/table/CreateTablePushDownMetaDataRefresher.java @@ -58,7 +58,7 @@ public final class CreateTablePushDownMetaDataRefresher implements PushDownMetaD Optional<ShardingSphereTable> actualTableMetaData = Optional.ofNullable(schemas.get(schemaName)).map(optional -> optional.getTable(tableName)); Preconditions.checkState(actualTableMetaData.isPresent(), "Load actual table metadata '%s' failed.", tableName); metaDataManagerPersistService.createTable(database.getName(), schemaName, actualTableMetaData.get(), logicDataSourceNames.isEmpty() ? null : logicDataSourceNames.iterator().next()); - if (isSingleTable && TableRefreshUtils.isRuleRefreshRequired(ruleMetaData, schemaName, tableName)) { + if (isSingleTable && TableRefreshUtils.isNeedRefresh(ruleMetaData, schemaName, tableName)) { metaDataManagerPersistService.alterSingleRuleConfiguration(database.getName(), ruleMetaData); } } 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 87f419a8c35..d473e2f5104 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 @@ -39,7 +39,7 @@ public final class DropTablePushDownMetaDataRefresher implements PushDownMetaDat 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 { Collection<String> tableNames = sqlStatement.getTables().stream().map(each -> each.getTableName().getIdentifier().getValue()).collect(Collectors.toList()); - boolean isRuleRefreshRequired = TableRefreshUtils.isRuleRefreshRequired(database.getRuleMetaData(), schemaName, sqlStatement.getTables()); + boolean isRuleRefreshRequired = TableRefreshUtils.isNeedRefresh(database.getRuleMetaData(), schemaName, sqlStatement.getTables()); metaDataManagerPersistService.dropTables(database.getName(), schemaName, tableNames); for (SimpleTableSegment each : sqlStatement.getTables()) { if (isRuleRefreshRequired && TableRefreshUtils.isSingleTable(each.getTableName().getIdentifier().getValue(), database)) { 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 105c6ab56a2..5b64c1c9412 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 @@ -20,23 +20,20 @@ package org.apache.shardingsphere.mode.metadata.refresher.metadata.util; import com.google.common.base.Joiner; import lombok.AccessLevel; import lombok.NoArgsConstructor; -import org.apache.shardingsphere.infra.config.rule.RuleConfiguration; import org.apache.shardingsphere.infra.database.core.metadata.database.enums.QuoteCharacter; import org.apache.shardingsphere.infra.database.core.type.DatabaseType; import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry; import org.apache.shardingsphere.infra.datanode.DataNode; import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase; import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData; -import org.apache.shardingsphere.infra.rule.ShardingSphereRule; import org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute; 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.single.rule.SingleRule; 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; -import java.util.LinkedList; import java.util.Optional; /** @@ -70,55 +67,36 @@ public final class TableRefreshUtils { } /** - * Judge whether the rule need to be refreshed. + * Judge whether to need refresh. * * @param ruleMetaData rule meta data * @param schemaName schema name * @param tableSegments table segments - * @return whether the rule need to be refreshed + * @return need to refresh or not */ - public static boolean isRuleRefreshRequired(final RuleMetaData ruleMetaData, final String schemaName, final Collection<SimpleTableSegment> tableSegments) { - for (SimpleTableSegment each : tableSegments) { - if (isRuleRefreshRequired(ruleMetaData, schemaName, each.getTableName().getIdentifier().getValue())) { - return true; - } - } - return false; + 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())); } /** - * Judge whether the rule need to be refreshed. + * Judge whether to need refresh. * * @param ruleMetaData rule meta data * @param schemaName schema name * @param tableName table name - * @return whether the rule need to be refreshed + * @return need to refresh or not */ - public static boolean isRuleRefreshRequired(final RuleMetaData ruleMetaData, final String schemaName, final String tableName) { - Collection<ShardingSphereRule> rules = new LinkedList<>(); - for (ShardingSphereRule each : ruleMetaData.getRules()) { - each.getAttributes().findAttribute(MutableDataNodeRuleAttribute.class).ifPresent(optional -> rules.add(each)); - } - if (rules.isEmpty()) { - return false; - } - ShardingSphereRule rule = rules.iterator().next(); - RuleConfiguration ruleConfig = rule.getConfiguration(); - if (!(ruleConfig instanceof SingleRuleConfiguration)) { - return false; - } - Collection<String> tablesConfig = ((SingleRuleConfiguration) ruleConfig).getTables(); - if (tablesConfig.contains(SingleTableConstants.ALL_TABLES) || tablesConfig.contains(SingleTableConstants.ALL_SCHEMA_TABLES)) { - return false; - } - Optional<DataNode> dataNode = rule.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).findTableDataNode(schemaName, tableName); - if (!dataNode.isPresent()) { + public static boolean isNeedRefresh(final RuleMetaData ruleMetaData, final String schemaName, final String tableName) { + SingleRule singleRule = ruleMetaData.getSingleRule(SingleRule.class); + Collection<String> singleTableNames = singleRule.getConfiguration().getTables(); + if (singleTableNames.contains(SingleTableConstants.ALL_TABLES) || singleTableNames.contains(SingleTableConstants.ALL_SCHEMA_TABLES)) { return false; } - DataNode actualNode = dataNode.get(); - return !tablesConfig.contains(joinDataNodeSegments(actualNode.getDataSourceName(), SingleTableConstants.ASTERISK)) - && !tablesConfig.contains(joinDataNodeSegments(actualNode.getDataSourceName(), SingleTableConstants.ASTERISK, SingleTableConstants.ASTERISK)) - && !tablesConfig.contains(joinDataNodeSegments(actualNode.getDataSourceName(), actualNode.getSchemaName(), SingleTableConstants.ASTERISK)); + Optional<DataNode> dataNode = singleRule.getAttributes().getAttribute(MutableDataNodeRuleAttribute.class).findTableDataNode(schemaName, tableName); + return dataNode.isPresent() + && !singleTableNames.contains(joinDataNodeSegments(dataNode.get().getDataSourceName(), SingleTableConstants.ASTERISK)) + && !singleTableNames.contains(joinDataNodeSegments(dataNode.get().getDataSourceName(), SingleTableConstants.ALL_TABLES, SingleTableConstants.ASTERISK)) + && !singleTableNames.contains(joinDataNodeSegments(dataNode.get().getDataSourceName(), dataNode.get().getSchemaName(), SingleTableConstants.ASTERISK)); } private static String joinDataNodeSegments(final String... segments) {