You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2025/01/25 09:51:24 UTC
(shardingsphere) branch master updated: Revert "Refactor TableRefreshUtils (#34486)" (#34487)
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 ace5843f530 Revert "Refactor TableRefreshUtils (#34486)" (#34487)
ace5843f530 is described below
commit ace5843f530084fd42ec1c814f7fb84485821a8a
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat Jan 25 17:51:19 2025 +0800
Revert "Refactor TableRefreshUtils (#34486)" (#34487)
This reverts commit 59354d7691a5ec3fa8fca1fb1dbc3ab01fdf577c.
---
mode/core/pom.xml | 5 --
.../CreateTablePushDownMetaDataRefresher.java | 2 +-
.../table/DropTablePushDownMetaDataRefresher.java | 2 +-
.../refresher/metadata/util/TableRefreshUtils.java | 54 +++++++++++++++-------
4 files changed, 40 insertions(+), 23 deletions(-)
diff --git a/mode/core/pom.xml b/mode/core/pom.xml
index 0ce406b2c53..1e31f07776b 100644
--- a/mode/core/pom.xml
+++ b/mode/core/pom.xml
@@ -37,11 +37,6 @@
<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 9ca75672420..f88518cbe43 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.isNeedRefresh(ruleMetaData, schemaName, tableName)) {
+ if (isSingleTable && TableRefreshUtils.isRuleRefreshRequired(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 d473e2f5104..87f419a8c35 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.isNeedRefresh(database.getRuleMetaData(), schemaName, sqlStatement.getTables());
+ boolean isRuleRefreshRequired = TableRefreshUtils.isRuleRefreshRequired(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 5b64c1c9412..105c6ab56a2 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,20 +20,23 @@ 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;
/**
@@ -67,36 +70,55 @@ public final class TableRefreshUtils {
}
/**
- * Judge whether to need refresh.
+ * Judge whether the rule need to be refreshed.
*
* @param ruleMetaData rule meta data
* @param schemaName schema name
* @param tableSegments table segments
- * @return need to refresh or not
+ * @return whether the rule need to be refreshed
*/
- 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 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;
}
/**
- * Judge whether to need refresh.
+ * Judge whether the rule need to be refreshed.
*
* @param ruleMetaData rule meta data
* @param schemaName schema name
* @param tableName table name
- * @return need to refresh or not
+ * @return whether the rule need to be refreshed
*/
- 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)) {
+ 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()) {
return false;
}
- 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));
+ 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));
}
private static String joinDataNodeSegments(final String... segments) {