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