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 {