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