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);

Reply via email to