This is an automated email from the ASF dual-hosted git repository.
zhangyonglun 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 15ad5e4 Reuse TableMetaDataLoader in SchemaMetaDataLoader (#8075)
15ad5e4 is described below
commit 15ad5e4e150bdc2c1f2fe1c90fcc1056d7da7d56
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Nov 8 01:55:50 2020 +0800
Reuse TableMetaDataLoader in SchemaMetaDataLoader (#8075)
* Refactor TableMetaDataLoader
* Refactor TableMetaDataLoader
* Reuse TableMetaDataLoader in SchemaMetaDataLoader
* Refactor SchemaMetaDataLoader
* Remove useless method of PhysicalSchemaMetaData
* For code style
---
.../swapper/LogicSchemaMetaDataYamlSwapper.java | 4 +-
.../schema/loader/SchemaMetaDataLoader.java | 60 +++-------------------
.../schema/loader/TableMetaDataLoader.java | 22 +++++---
.../model/physical/PhysicalSchemaMetaData.java | 12 -----
.../schema/model/physical/SchemaMetaDataTest.java | 8 ---
5 files changed, 24 insertions(+), 82 deletions(-)
diff --git
a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-common/src/main/java/org/apache/shardingsphere/governance/core/yaml/swapper/LogicSchemaMetaDataYamlSwapper.java
b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-common/src/main/java/org/apache/shardingsphere/governance/core/yaml/swapper/LogicSchemaMetaDataYamlSwapper.java
index 8a1960e..00a5020 100644
---
a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-common/src/main/java/org/apache/shardingsphere/governance/core/yaml/swapper/LogicSchemaMetaDataYamlSwapper.java
+++
b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-common/src/main/java/org/apache/shardingsphere/governance/core/yaml/swapper/LogicSchemaMetaDataYamlSwapper.java
@@ -54,8 +54,8 @@ public final class LogicSchemaMetaDataYamlSwapper implements
YamlSwapper<YamlLog
}
private PhysicalSchemaMetaData convertSchema(final YamlSchemaMetaData
schema) {
- return new
PhysicalSchemaMetaData(schema.getTables().entrySet().stream().collect(Collectors.toMap(Entry::getKey,
- entry -> convertTable(entry.getValue()), (oldValue, currentValue)
-> oldValue, LinkedHashMap::new)));
+ return new
PhysicalSchemaMetaData(schema.getTables().entrySet().stream()
+ .collect(Collectors.toMap(Entry::getKey, entry ->
convertTable(entry.getValue()), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new)));
}
private PhysicalTableMetaData convertTable(final YamlTableMetaData table) {
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoader.java
index ddbf7ce..d199763 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoader.java
@@ -21,22 +21,14 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.datanode.DataNodes;
-import
org.apache.shardingsphere.infra.metadata.schema.loader.spi.ShardingSphereMetaDataLoader;
import
org.apache.shardingsphere.infra.metadata.schema.model.physical.PhysicalSchemaMetaData;
-import
org.apache.shardingsphere.infra.metadata.schema.model.physical.PhysicalTableMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.type.TableContainedRule;
-import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
-import org.apache.shardingsphere.infra.spi.ordered.OrderedSPIRegistry;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Optional;
/**
* Schema meta data loader.
@@ -44,10 +36,6 @@ import java.util.Optional;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class SchemaMetaDataLoader {
- static {
-
ShardingSphereServiceLoader.register(ShardingSphereMetaDataLoader.class);
- }
-
/**
* Load schema meta data.
*
@@ -60,50 +48,16 @@ public final class SchemaMetaDataLoader {
*/
public static PhysicalSchemaMetaData load(final DatabaseType databaseType,
final Map<String, DataSource> dataSourceMap,
final
Collection<ShardingSphereRule> rules, final ConfigurationProperties props)
throws SQLException {
- PhysicalSchemaMetaData result = loadSchemaMetaData(databaseType,
dataSourceMap, rules, props);
- decorateSchemaMetaData(rules, result);
- return result;
- }
-
- @SuppressWarnings("rawtypes")
- private static PhysicalSchemaMetaData loadSchemaMetaData(final
DatabaseType databaseType, final Map<String, DataSource> dataSourceMap,
- final
Collection<ShardingSphereRule> rules, final ConfigurationProperties props)
throws SQLException {
PhysicalSchemaMetaData result = new PhysicalSchemaMetaData();
- DataNodes dataNodes = new DataNodes(rules);
- for (Entry<ShardingSphereRule, ShardingSphereMetaDataLoader> entry :
OrderedSPIRegistry.getRegisteredServices(rules,
ShardingSphereMetaDataLoader.class).entrySet()) {
- if (entry.getKey() instanceof TableContainedRule) {
-
result.getTables().putAll(loadSchemaMetaDataByRule(databaseType, dataSourceMap,
(TableContainedRule) entry.getKey(), entry.getValue(), props, dataNodes,
result.getAllTableNames()));
- }
- }
- return result;
- }
-
- @SuppressWarnings({"rawtypes", "unchecked"})
- private static Map<String, PhysicalTableMetaData>
loadSchemaMetaDataByRule(final DatabaseType databaseType, final Map<String,
DataSource> dataSourceMap,
-
final TableContainedRule rule, final ShardingSphereMetaDataLoader loader, final
ConfigurationProperties props,
-
final DataNodes dataNodes, final Collection<String> existedTables) throws
SQLException {
- Collection<String> tables = rule.getTables();
- Map<String, PhysicalTableMetaData> result = new
HashMap<>(tables.size(), 1);
- for (String each : tables) {
- if (!existedTables.contains(each)) {
- Optional<PhysicalTableMetaData> tableMetaData =
loader.load(each, databaseType, dataSourceMap, dataNodes, rule, props);
- tableMetaData.ifPresent(optional -> result.put(each,
optional));
- }
- }
- return result;
- }
-
- @SuppressWarnings({"unchecked", "rawtypes"})
- private static void decorateSchemaMetaData(final
Collection<ShardingSphereRule> rules, final PhysicalSchemaMetaData
schemaMetaData) {
- Map<String, PhysicalTableMetaData> tableMetaDataMap = new
HashMap<>(schemaMetaData.getAllTableNames().size(), 1);
- Map<ShardingSphereRule, ShardingSphereMetaDataLoader> loaders =
OrderedSPIRegistry.getRegisteredServices(rules,
ShardingSphereMetaDataLoader.class);
- for (String each : schemaMetaData.getAllTableNames()) {
- for (Entry<ShardingSphereRule, ShardingSphereMetaDataLoader> entry
: loaders.entrySet()) {
- if (entry.getKey() instanceof TableContainedRule) {
- tableMetaDataMap.put(each, entry.getValue().decorate(each,
tableMetaDataMap.getOrDefault(each, schemaMetaData.get(each)),
(TableContainedRule) entry.getKey()));
+ for (ShardingSphereRule rule : rules) {
+ if (rule instanceof TableContainedRule) {
+ for (String table : ((TableContainedRule) rule).getTables()) {
+ if (!result.containsTable(table)) {
+ TableMetaDataLoader.load(table, databaseType,
dataSourceMap, rules, props).ifPresent(optional -> result.put(table, optional));
+ }
}
}
}
- schemaMetaData.merge(new PhysicalSchemaMetaData(tableMetaDataMap));
+ return result;
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/TableMetaDataLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/TableMetaDataLoader.java
index f92c047..3a2943e 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/TableMetaDataLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/TableMetaDataLoader.java
@@ -57,14 +57,23 @@ public final class TableMetaDataLoader {
* @return table meta data
* @throws SQLException SQL exception
*/
- @SuppressWarnings({"unchecked", "rawtypes"})
public static Optional<PhysicalTableMetaData> load(final String tableName,
final DatabaseType databaseType, final Map<String, DataSource> dataSourceMap,
final
Collection<ShardingSphereRule> rules, final ConfigurationProperties props)
throws SQLException {
+ Optional<PhysicalTableMetaData> tableMetaData =
loadTableMetaData(tableName, databaseType, dataSourceMap, rules, props);
+ return tableMetaData.map(optional -> decorateTableMetaData(tableName,
optional, rules));
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private static Optional<PhysicalTableMetaData> loadTableMetaData(final
String tableName, final DatabaseType databaseType, final Map<String,
DataSource> dataSourceMap,
+ final
Collection<ShardingSphereRule> rules, final ConfigurationProperties props)
throws SQLException {
+ DataNodes dataNodes = new DataNodes(rules);
for (Entry<ShardingSphereRule, ShardingSphereMetaDataLoader> entry :
OrderedSPIRegistry.getRegisteredServices(rules,
ShardingSphereMetaDataLoader.class).entrySet()) {
if (entry.getKey() instanceof TableContainedRule) {
- Optional<PhysicalTableMetaData> result =
entry.getValue().load(tableName, databaseType, dataSourceMap, new
DataNodes(rules), (TableContainedRule) entry.getKey(), props);
- if (result.isPresent()) {
- return Optional.of(decorate(tableName, result.get(),
rules));
+ TableContainedRule rule = (TableContainedRule) entry.getKey();
+ ShardingSphereMetaDataLoader loader = entry.getValue();
+ Optional<PhysicalTableMetaData> tableMetaData =
loader.load(tableName, databaseType, dataSourceMap, dataNodes, rule, props);
+ if (tableMetaData.isPresent()) {
+ return tableMetaData;
}
}
}
@@ -72,10 +81,9 @@ public final class TableMetaDataLoader {
}
@SuppressWarnings({"unchecked", "rawtypes"})
- private static PhysicalTableMetaData decorate(final String tableName,
final PhysicalTableMetaData tableMetaData, final Collection<ShardingSphereRule>
rules) {
- Map<ShardingSphereRule, ShardingSphereMetaDataLoader> decorators =
OrderedSPIRegistry.getRegisteredServices(rules,
ShardingSphereMetaDataLoader.class);
+ private static PhysicalTableMetaData decorateTableMetaData(final String
tableName, final PhysicalTableMetaData tableMetaData, final
Collection<ShardingSphereRule> rules) {
PhysicalTableMetaData result = null;
- for (Entry<ShardingSphereRule, ShardingSphereMetaDataLoader> entry :
decorators.entrySet()) {
+ for (Entry<ShardingSphereRule, ShardingSphereMetaDataLoader> entry :
OrderedSPIRegistry.getRegisteredServices(rules,
ShardingSphereMetaDataLoader.class).entrySet()) {
if (entry.getKey() instanceof TableContainedRule) {
result = entry.getValue().decorate(tableName, null == result ?
tableMetaData : result, (TableContainedRule) entry.getKey());
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/model/physical/PhysicalSchemaMetaData.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/model/physical/PhysicalSchemaMetaData.java
index a744a85..27dca88 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/model/physical/PhysicalSchemaMetaData.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/model/physical/PhysicalSchemaMetaData.java
@@ -17,8 +17,6 @@
package org.apache.shardingsphere.infra.metadata.schema.model.physical;
-import lombok.Getter;
-
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -29,7 +27,6 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* Physical schema meta data.
*/
-@Getter
public final class PhysicalSchemaMetaData {
private final Map<String, PhysicalTableMetaData> tables;
@@ -64,15 +61,6 @@ public final class PhysicalSchemaMetaData {
}
/**
- * Merge schema meta data.
- *
- * @param schemaMetaData schema meta data
- */
- public void merge(final PhysicalSchemaMetaData schemaMetaData) {
- tables.putAll(schemaMetaData.tables);
- }
-
- /**
* Add table meta data.
*
* @param tableName table name
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/model/physical/SchemaMetaDataTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/model/physical/SchemaMetaDataTest.java
index 88c8aff..e498c70 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/model/physical/SchemaMetaDataTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/model/physical/SchemaMetaDataTest.java
@@ -43,14 +43,6 @@ public final class SchemaMetaDataTest {
}
@Test
- public void assertMerge() {
- PhysicalSchemaMetaData actual = new
PhysicalSchemaMetaData(Collections.emptyMap());
- PhysicalTableMetaData tableMetaData =
mock(PhysicalTableMetaData.class);
- actual.merge(new PhysicalSchemaMetaData(ImmutableMap.of("tbl",
tableMetaData)));
- assertThat(actual.get("tbl"), is(tableMetaData));
- }
-
- @Test
public void assertPut() {
PhysicalSchemaMetaData actual = new
PhysicalSchemaMetaData(Collections.emptyMap());
PhysicalTableMetaData tableMetaData =
mock(PhysicalTableMetaData.class);