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 acf037b0d30 Persist meta data after build MetaDataContexts finished. 
(#17726)
acf037b0d30 is described below

commit acf037b0d30b8ca2700df29d9d0372167b889c37
Author: zhaojinchao <zhaojinc...@apache.org>
AuthorDate: Tue May 17 14:58:41 2022 +0800

    Persist meta data after build MetaDataContexts finished. (#17726)
---
 .../mode/manager/ContextManager.java               | 38 +++++++++-------------
 .../cluster/ClusterContextManagerBuilder.java      |  8 ++---
 2 files changed, 20 insertions(+), 26 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 30912239258..1cffc7a0cd4 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
@@ -138,7 +138,7 @@ public final class ContextManager implements AutoCloseable {
         
metaDataContexts.getOptimizerContext().getFederationMetaData().getDatabases().put(databaseName,
 databaseMetaData);
         
metaDataContexts.getOptimizerContext().getPlannerContexts().put(databaseName, 
OptimizerPlannerContextFactory.create(databaseMetaData));
         metaDataContexts.getMetaDataMap().put(databaseName, 
newMetaDataContexts.getMetaData(databaseName));
-        
metaDataContexts.getMetaDataPersistService().ifPresent(this::persistMetaData);
+        persistMetaData(metaDataContexts);
         renewAllTransactionContext();
     }
     
@@ -190,22 +190,12 @@ public final class ContextManager implements 
AutoCloseable {
         }
     }
     
-    private void persistMetaData(final MetaDataPersistService 
metaDataPersistService) {
+    private void persistMetaData(final MetaDataContexts metaDataContexts) {
         metaDataContexts.getMetaDataMap().forEach((databaseName, schemas) -> 
schemas.getSchemas().forEach((schemaName, tables) -> {
             if (tables.getTables().isEmpty()) {
-                
metaDataPersistService.getSchemaMetaDataService().persistSchema(databaseName, 
schemaName);
+                
metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
optional.getSchemaMetaDataService().persistSchema(databaseName, schemaName));
             } else {
-                
metaDataPersistService.getSchemaMetaDataService().persistTables(databaseName, 
schemaName, tables);
-            }
-        }));
-    }
-    
-    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);
+                
metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
optional.getSchemaMetaDataService().persistTables(databaseName, schemaName, 
tables));
             }
         }));
     }
@@ -540,8 +530,9 @@ 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 -> 
persistMetaData(optional, builder));
-        return 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+        MetaDataContexts result = 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+        persistMetaData(result);
+        return result;
     }
     
     private void persistTransactionConfiguration(final DatabaseConfiguration 
databaseConfig, final MetaDataPersistService metaDataPersistService) {
@@ -554,8 +545,9 @@ 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 -> 
persistMetaData(optional, builder));
-        return 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+        MetaDataContexts result = 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+        persistMetaData(result);
+        return result;
     }
     
     private MetaDataContexts 
buildChangedMetaDataContextWithChangedDataSource(final ShardingSphereMetaData 
originalMetaData,
@@ -567,8 +559,9 @@ 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 -> 
persistMetaData(optional, builder));
-        return 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+        MetaDataContexts result = 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+        persistMetaData(result);
+        return result;
     }
     
     private MetaDataContexts 
buildChangedMetaDataContextWithChangedDataSourceAndRule(final 
ShardingSphereMetaData originalMetaData, final Map<String, 
DataSourceProperties> newDataSourceProps,
@@ -579,8 +572,9 @@ 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 -> 
persistMetaData(optional, builder));
-        return 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+        MetaDataContexts result = 
builder.build(metaDataContexts.getMetaDataPersistService().orElse(null));
+        persistMetaData(result);
+        return result;
     }
     
     private Map<String, DataSource> getNewDataSources(final Map<String, 
DataSource> originalDataSources,
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 073dc47199e..36172f4a2a0 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
@@ -71,7 +71,7 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
         RegistryCenter registryCenter = new RegistryCenter(repository);
         MetaDataContextsBuilder builder = 
createMetaDataContextsBuilder(metaDataPersistService, parameter);
         MetaDataContexts metaDataContexts = 
builder.build(metaDataPersistService);
-        persistMetaData(metaDataPersistService, metaDataContexts);
+        persistMetaData(metaDataContexts);
         Properties transactionProps = 
getTransactionProperties(metaDataContexts);
         persistTransactionConfiguration(parameter, metaDataPersistService, 
transactionProps);
         ContextManager result = createContextManager(repository, 
metaDataPersistService, parameter.getInstanceDefinition(), metaDataContexts, 
transactionProps, parameter.getModeConfig());
@@ -143,12 +143,12 @@ public final class ClusterContextManagerBuilder 
implements ContextManagerBuilder
         return new DataSourceProvidedDatabaseConfiguration(dataSources, 
databaseRuleConfigs);
     }
     
-    private void persistMetaData(final MetaDataPersistService 
metaDataPersistService, final MetaDataContexts metaDataContexts) {
+    private void persistMetaData(final MetaDataContexts metaDataContexts) {
         metaDataContexts.getMetaDataMap().forEach((databaseName, schemas) -> 
schemas.getSchemas().forEach((schemaName, tables) -> {
             if (tables.getTables().isEmpty()) {
-                
metaDataPersistService.getSchemaMetaDataService().persistSchema(databaseName, 
schemaName);
+                
metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
optional.getSchemaMetaDataService().persistSchema(databaseName, schemaName));
             } else {
-                
metaDataPersistService.getSchemaMetaDataService().persistTables(databaseName, 
schemaName, tables);
+                
metaDataContexts.getMetaDataPersistService().ifPresent(optional -> 
optional.getSchemaMetaDataService().persistTables(databaseName, schemaName, 
tables));
             }
         }));
     }

Reply via email to