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 9742a1239a3 Refactor execute RAL  statement reload metaData (#17720)
9742a1239a3 is described below

commit 9742a1239a319e4073d4e0cba2f0901491b06673
Author: zhaojinchao <zhaojinc...@apache.org>
AuthorDate: Tue May 17 13:12:08 2022 +0800

    Refactor execute RAL  statement reload metaData (#17720)
    
    * Refactor execute RAL  statement reload metaData
    
    * Fix checkstyle.
---
 .../mode/manager/ContextManager.java               | 22 ++++++++++++++--------
 .../mode/metadata/MetaDataContextsBuilder.java     | 13 -------------
 .../cluster/ClusterContextManagerBuilder.java      |  9 +++------
 3 files changed, 17 insertions(+), 27 deletions(-)

diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 9406237c677..7002f55c91e 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -201,6 +201,16 @@ public final class ContextManager implements AutoCloseable 
{
         }));
     }
     
+    private void persistMetaData(final MetaDataPersistService 
metaDataPersistService, final MetaDataContextsBuilder builder) {
+        builder.getDatabaseMap().forEach((databaseName, schemas) -> 
schemas.getSchemas().forEach((schemaName, tables) -> {
+            if (tables.getTables().isEmpty()) {
+                
metaDataPersistService.getSchemaMetaDataService().persistSchema(databaseName, 
schemaName);
+            } else {
+                
metaDataPersistService.getSchemaMetaDataService().persistTables(databaseName, 
schemaName, tables);
+            }
+        }));
+    }
+    
     private void alterTableSchema(final String databaseName, final String 
schemaName, final TableMetaData changedTableMetaData) {
         ShardingSphereMetaData metaData = 
metaDataContexts.getMetaData(databaseName);
         alterSingleTableDataNodes(databaseName, metaData, 
changedTableMetaData);
@@ -531,8 +541,7 @@ public final class ContextManager implements AutoCloseable {
         metaDataPersistService.ifPresent(optional -> 
persistTransactionConfiguration(databaseConfig, optional));
         MetaDataContextsBuilder builder = new MetaDataContextsBuilder(
                 Collections.singletonMap(originalMetaData.getDatabaseName(), 
databaseConfig), metaDataContexts.getGlobalRuleMetaData().getConfigurations(), 
metaDataContexts.getProps());
-        metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
optional.getSchemaMetaDataService()
-                .persistTables(originalMetaData.getDatabaseName(), 
originalMetaData.getDatabaseName(), 
builder.getSchemaMap(originalMetaData.getDatabaseName())));
+        metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
persistMetaData(optional, builder));
         return 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
     }
     
@@ -546,8 +555,7 @@ public final class ContextManager implements AutoCloseable {
         MetaDataContextsBuilder builder = new MetaDataContextsBuilder(
                 Collections.singletonMap(originalMetaData.getDatabaseName(), 
new 
DataSourceProvidedDatabaseConfiguration(originalMetaData.getResource().getDataSources(),
 ruleConfigs)),
                 metaDataContexts.getGlobalRuleMetaData().getConfigurations(), 
metaDataContexts.getProps());
-        metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
optional.getSchemaMetaDataService()
-                .persistTables(originalMetaData.getDatabaseName(), 
originalMetaData.getDatabaseName(), 
builder.getSchemaMap(originalMetaData.getDatabaseName())));
+        metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
persistMetaData(optional, builder));
         return 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
     }
     
@@ -560,8 +568,7 @@ public final class ContextManager implements AutoCloseable {
                 originalMetaData.getRuleMetaData().getConfigurations());
         MetaDataContextsBuilder builder = new 
MetaDataContextsBuilder(Collections.singletonMap(originalMetaData.getDatabaseName(),
 databaseConfig),
                 metaDataContexts.getGlobalRuleMetaData().getConfigurations(), 
metaDataContexts.getProps());
-        metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
optional.getSchemaMetaDataService()
-                .persistTables(originalMetaData.getDatabaseName(), 
originalMetaData.getDatabaseName(), 
builder.getSchemaMap(originalMetaData.getDatabaseName())));
+        metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
persistMetaData(optional, builder));
         return 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
     }
     
@@ -573,8 +580,7 @@ public final class ContextManager implements AutoCloseable {
                 getAddedDataSources(originalMetaData, newDataSourceProps), 
changedDataSources, deletedDataSources), ruleConfigs);
         MetaDataContextsBuilder builder = new MetaDataContextsBuilder(
                 Collections.singletonMap(originalMetaData.getDatabaseName(), 
databaseConfig), metaDataContexts.getGlobalRuleMetaData().getConfigurations(), 
metaDataContexts.getProps());
-        metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
optional.getSchemaMetaDataService()
-                .persistTables(originalMetaData.getDatabaseName(), 
originalMetaData.getDatabaseName(), 
builder.getSchemaMap(originalMetaData.getDatabaseName())));
+        metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
persistMetaData(optional, builder));
         return 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
     }
     
diff --git 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilder.java
 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilder.java
index efa9c4fc80d..792f7ad2aa8 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilder.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsBuilder.java
@@ -31,7 +31,6 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.loader.DatabaseLoader;
 import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
 import org.apache.shardingsphere.infra.rule.builder.schema.SchemaRulesBuilder;
@@ -111,22 +110,10 @@ public final class MetaDataContextsBuilder {
         DatabaseType frontendDatabaseType = 
DatabaseTypeEngine.getFrontendDatabaseType(databaseConfigMap, props);
         for (Entry<String, ShardingSphereDatabase> entry : 
databaseMap.entrySet()) {
             String databaseName = entry.getKey();
-            // TODO support database and schema configuration separately
             DatabaseConfiguration databaseConfig = 
databaseConfigMap.getOrDefault(databaseName, new 
DataSourceProvidedDatabaseConfiguration(new LinkedHashMap<>(), new 
LinkedList<>()));
             Collection<ShardingSphereRule> rules = 
databaseRulesMap.getOrDefault(databaseName, new LinkedList<>());
             result.put(databaseName, 
ShardingSphereMetaData.create(databaseName, frontendDatabaseType, 
entry.getValue().getSchemas(), databaseConfig, rules));
         }
         return result;
     }
-    
-    /**
-     * Get schema map.
-     * 
-     * @param databaseName database name
-     * @return ShardingSphere schema
-     */
-    public ShardingSphereSchema getSchemaMap(final String databaseName) {
-        // TODO remove these logic when mode support persist 
ShardingSphereDatabase
-        return databaseMap.get(databaseName).getSchemas().get(databaseName);
-    }
 }
diff --git 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index 389ab7e8386..073dc47199e 100644
--- 
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ 
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -28,7 +28,6 @@ import 
org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.instance.definition.InstanceDefinition;
 import org.apache.shardingsphere.infra.instance.definition.InstanceType;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilder;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
@@ -53,7 +52,6 @@ import 
org.apache.shardingsphere.transaction.spi.TransactionConfigurationFileGen
 import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Optional;
@@ -72,9 +70,8 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
         persistConfigurations(metaDataPersistService, parameter);
         RegistryCenter registryCenter = new RegistryCenter(repository);
         MetaDataContextsBuilder builder = 
createMetaDataContextsBuilder(metaDataPersistService, parameter);
-        Map<String, ShardingSphereDatabase> databaseMap = 
builder.getDatabaseMap().isEmpty() ? Collections.emptyMap() : 
builder.getDatabaseMap();
-        persistMetaData(metaDataPersistService, databaseMap);
         MetaDataContexts metaDataContexts = 
builder.build(metaDataPersistService);
+        persistMetaData(metaDataPersistService, metaDataContexts);
         Properties transactionProps = 
getTransactionProperties(metaDataContexts);
         persistTransactionConfiguration(parameter, metaDataPersistService, 
transactionProps);
         ContextManager result = createContextManager(repository, 
metaDataPersistService, parameter.getInstanceDefinition(), metaDataContexts, 
transactionProps, parameter.getModeConfig());
@@ -146,8 +143,8 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
         return new DataSourceProvidedDatabaseConfiguration(dataSources, 
databaseRuleConfigs);
     }
     
-    private void persistMetaData(final MetaDataPersistService 
metaDataPersistService, final Map<String, ShardingSphereDatabase> databaseMap) {
-        databaseMap.forEach((databaseName, schemas) -> 
schemas.getSchemas().forEach((schemaName, tables) -> {
+    private void persistMetaData(final MetaDataPersistService 
metaDataPersistService, final MetaDataContexts metaDataContexts) {
+        metaDataContexts.getMetaDataMap().forEach((databaseName, schemas) -> 
schemas.getSchemas().forEach((schemaName, tables) -> {
             if (tables.getTables().isEmpty()) {
                 
metaDataPersistService.getSchemaMetaDataService().persistSchema(databaseName, 
schemaName);
             } else {

Reply via email to