This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 c99ab65 Fix broad cast table meta data missing. (#12559)
c99ab65 is described below
commit c99ab658faf129ee692a1da6c73c834b9764b3bc
Author: tuichenchuxin <[email protected]>
AuthorDate: Wed Sep 22 10:50:18 2021 +0800
Fix broad cast table meta data missing. (#12559)
---
.../metadata/ShardingTableMetaDataBuilder.java | 4 ++--
.../shardingsphere/sharding/rule/ShardingRule.java | 5 +++--
.../sharding/rule/ShardingRuleTest.java | 2 +-
.../schema/builder/util/TableMetaDataUtil.java | 23 +++++++++++++++++-----
4 files changed, 24 insertions(+), 10 deletions(-)
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingTableMetaDataBuilder.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingTableMetaDataBuilder.java
index de101e5..5b40149 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingTableMetaDataBuilder.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/metadata/ShardingTableMetaDataBuilder.java
@@ -52,7 +52,7 @@ public final class ShardingTableMetaDataBuilder implements
RuleBasedTableMetaDat
@Override
public Map<String, TableMetaData> load(final Collection<String>
tableNames, final ShardingRule rule, final SchemaBuilderMaterials materials)
throws SQLException {
- Collection<String> needLoadTables = tableNames.stream().filter(each ->
rule.findTableRule(each).isPresent()).collect(Collectors.toList());
+ Collection<String> needLoadTables = tableNames.stream().filter(each ->
rule.findTableRule(each).isPresent() ||
rule.isBroadcastTable(each)).collect(Collectors.toList());
if (needLoadTables.isEmpty()) {
return Collections.emptyMap();
}
@@ -86,7 +86,7 @@ public final class ShardingTableMetaDataBuilder implements
RuleBasedTableMetaDat
private Map<String, TableMetaData> getTableMetaDataMap(final
Collection<TableMetaData> tableMetaDataList, final ShardingRule rule) {
Map<String, TableMetaData> result = new LinkedHashMap<>();
for (TableMetaData each : tableMetaDataList) {
-
rule.findLogicTableByActualTable(each.getName()).ifPresent(tableName ->
result.putIfAbsent(tableName, each));
+
result.putIfAbsent(rule.findLogicTableByActualTable(each.getName()).orElse(each.getName()),
each);
}
return result;
}
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index efda0db..ffc9d6f 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -186,7 +186,6 @@ public final class ShardingRule implements SchemaRule,
DataNodeContainedRule, Ta
public Collection<String> getAllTables() {
Collection<String> result = new HashSet<>(getTables());
result.addAll(getAllActualTables());
- result.addAll(broadcastTables);
return result;
}
@@ -491,7 +490,9 @@ public final class ShardingRule implements SchemaRule,
DataNodeContainedRule, Ta
@Override
public Collection<String> getTables() {
- return
tableRules.values().stream().map(TableRule::getLogicTable).collect(Collectors.toSet());
+ Collection<String> result =
tableRules.values().stream().map(TableRule::getLogicTable).collect(Collectors.toSet());
+ result.addAll(broadcastTables);
+ return result;
}
@Override
diff --git
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
index f37ed50..a3f552d 100644
---
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
+++
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
@@ -303,7 +303,7 @@ public final class ShardingRuleTest {
@Test
public void assertGetTables() {
- assertThat(createMaximumShardingRule().getTables(), is(new
LinkedHashSet<>(Arrays.asList("LOGIC_TABLE", "SUB_LOGIC_TABLE"))));
+ assertThat(createMaximumShardingRule().getTables(), is(new
LinkedHashSet<>(Arrays.asList("LOGIC_TABLE", "SUB_LOGIC_TABLE",
"BROADCAST_TABLE"))));
}
@Test
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/util/TableMetaDataUtil.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/util/TableMetaDataUtil.java
index 09fc0c4..429564a 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/util/TableMetaDataUtil.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/builder/util/TableMetaDataUtil.java
@@ -50,17 +50,30 @@ public class TableMetaDataUtil {
DataNodes dataNodes = new DataNodes(materials.getRules());
for (String each : tableNames) {
if (checkMetaDataEnable) {
- dataNodes.getDataNodes(each).forEach(dataNode ->
addDataSourceTableGroups(dataNode.getDataSourceName(), dataNode.getTableName(),
dataSourceTableGroups));
+ addAllActualTableDataNode(materials, dataSourceTableGroups,
dataNodes, each);
} else {
- Optional<DataNode> optional =
dataNodes.getDataNodes(each).stream().findFirst();
- String dataSourceName =
optional.map(DataNode::getDataSourceName).orElse(materials.getDataSourceMap().keySet().iterator().next());
- String tableName =
optional.map(DataNode::getTableName).orElse(each);
- addDataSourceTableGroups(dataSourceName, tableName,
dataSourceTableGroups);
+ addOneActualTableDataNode(materials, dataSourceTableGroups,
dataNodes, each);
}
}
return dataSourceTableGroups.entrySet().stream().map(entry -> new
TableMetaDataLoaderMaterial(entry.getValue(),
materials.getDataSourceMap().get(entry.getKey()))).collect(Collectors.toList());
}
+ private static void addOneActualTableDataNode(final SchemaBuilderMaterials
materials, final Map<String, Collection<String>> dataSourceTableGroups, final
DataNodes dataNodes, final String table) {
+ Optional<DataNode> optional =
dataNodes.getDataNodes(table).stream().findFirst();
+ String dataSourceName =
optional.map(DataNode::getDataSourceName).orElse(materials.getDataSourceMap().keySet().iterator().next());
+ String tableName = optional.map(DataNode::getTableName).orElse(table);
+ addDataSourceTableGroups(dataSourceName, tableName,
dataSourceTableGroups);
+ }
+
+ private static void addAllActualTableDataNode(final SchemaBuilderMaterials
materials, final Map<String, Collection<String>> dataSourceTableGroups, final
DataNodes dataNodes, final String table) {
+ Collection<DataNode> tableDataNodes = dataNodes.getDataNodes(table);
+ if (tableDataNodes.isEmpty()) {
+
addDataSourceTableGroups(materials.getDataSourceMap().keySet().iterator().next(),
table, dataSourceTableGroups);
+ } else {
+ tableDataNodes.forEach(dataNode ->
addDataSourceTableGroups(dataNode.getDataSourceName(), dataNode.getTableName(),
dataSourceTableGroups));
+ }
+ }
+
private static void addDataSourceTableGroups(final String dataSourceName,
final String tableName, final Map<String, Collection<String>>
dataSourceTableGroups) {
Collection<String> tables =
dataSourceTableGroups.getOrDefault(dataSourceName, new LinkedList<>());
tables.add(tableName);