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 <[email protected]>
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) {