This is an automated email from the ASF dual-hosted git repository. zhaojinchao 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 15e5d13722f Split the create method of MetaDataContextsFactory to createByLocal and createByRepository (#32628) 15e5d13722f is described below commit 15e5d13722fdbb9d69c9f636ad58dba9400bd926 Author: Haoran Meng <menghaora...@gmail.com> AuthorDate: Thu Aug 22 15:44:03 2024 +0800 Split the create method of MetaDataContextsFactory to createByLocal and createByRepository (#32628) * Split the create method of MetaDataContextsFactory to createByLocal and createByRepository * Fix spotless issue * Fix spotless issue --- .../mode/metadata/MetaDataContextsFactory.java | 76 +++++++++++++--------- 1 file changed, 44 insertions(+), 32 deletions(-) diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java index 90551bd97d7..95355819740 100644 --- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java +++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java @@ -83,38 +83,8 @@ public final class MetaDataContextsFactory { */ public static MetaDataContexts create(final MetaDataPersistService persistService, final ContextManagerBuilderParameter param, final ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException { - boolean isDatabaseMetaDataExisted = !persistService.getDatabaseMetaDataService().loadAllDatabaseNames().isEmpty(); - Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = isDatabaseMetaDataExisted - ? createEffectiveDatabaseConfigurations(getDatabaseNames(computeNodeInstanceContext, param.getDatabaseConfigs(), persistService), param.getDatabaseConfigs(), persistService) - : param.getDatabaseConfigs(); - // TODO load global data sources from persist service - Map<String, DataSource> globalDataSources = param.getGlobalDataSources(); - Collection<RuleConfiguration> globalRuleConfigs; - if (isDatabaseMetaDataExisted) { - globalRuleConfigs = persistService.getGlobalRuleService().load(); - } else if (computeNodeInstanceContext.getModeConfiguration().isCluster()) { - globalRuleConfigs = new RuleConfigurationPersistDecorateEngine(computeNodeInstanceContext).tryRestore(param.getGlobalRuleConfigs()); - param.getGlobalRuleConfigs().clear(); - param.getGlobalRuleConfigs().addAll(globalRuleConfigs); - } else { - globalRuleConfigs = param.getGlobalRuleConfigs(); - } - ConfigurationProperties props = isDatabaseMetaDataExisted ? new ConfigurationProperties(persistService.getPropsService().load()) : new ConfigurationProperties(param.getProps()); - Map<String, ShardingSphereDatabase> databases = isDatabaseMetaDataExisted - ? InternalMetaDataFactory.create(persistService, effectiveDatabaseConfigs, props, computeNodeInstanceContext) - : ExternalMetaDataFactory.create(effectiveDatabaseConfigs, props, computeNodeInstanceContext); - ResourceMetaData globalResourceMetaData = new ResourceMetaData(globalDataSources); - RuleMetaData globalRuleMetaData = new RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, databases, props)); - ShardingSphereMetaData shardingSphereMetaData = new ShardingSphereMetaData(databases, globalResourceMetaData, globalRuleMetaData, props); - ShardingSphereStatistics shardingSphereStatistics = initStatistics(persistService, shardingSphereMetaData); - MetaDataContexts result = new MetaDataContexts(shardingSphereMetaData, shardingSphereStatistics); - if (isDatabaseMetaDataExisted) { - restoreRules(result, computeNodeInstanceContext); - } else { - persistDatabaseConfigurations(result, param, persistService, computeNodeInstanceContext); - persistMetaData(result, persistService); - } - return result; + return persistService.getDatabaseMetaDataService().loadAllDatabaseNames().isEmpty() ? createByLocal(persistService, param, computeNodeInstanceContext) + : createByRepository(persistService, param, computeNodeInstanceContext); } /** @@ -128,6 +98,48 @@ public final class MetaDataContextsFactory { return new MetaDataContexts(metaData, initStatistics(persistService, metaData)); } + private static MetaDataContexts createByLocal(final MetaDataPersistService persistService, final ContextManagerBuilderParameter param, + final ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException { + Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = param.getDatabaseConfigs(); + Collection<RuleConfiguration> globalRuleConfigs; + if (computeNodeInstanceContext.getModeConfiguration().isCluster()) { + globalRuleConfigs = new RuleConfigurationPersistDecorateEngine(computeNodeInstanceContext).tryRestore(param.getGlobalRuleConfigs()); + param.getGlobalRuleConfigs().clear(); + param.getGlobalRuleConfigs().addAll(globalRuleConfigs); + } else { + globalRuleConfigs = param.getGlobalRuleConfigs(); + } + ConfigurationProperties props = new ConfigurationProperties(param.getProps()); + Map<String, ShardingSphereDatabase> databases = ExternalMetaDataFactory.create(effectiveDatabaseConfigs, props, computeNodeInstanceContext); + MetaDataContexts result = newMetaDataContexts(persistService, param, globalRuleConfigs, databases, props); + persistDatabaseConfigurations(result, param, persistService, computeNodeInstanceContext); + persistMetaData(result, persistService); + return result; + } + + private static MetaDataContexts createByRepository(final MetaDataPersistService persistService, final ContextManagerBuilderParameter param, + final ComputeNodeInstanceContext computeNodeInstanceContext) { + Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = + createEffectiveDatabaseConfigurations(getDatabaseNames(computeNodeInstanceContext, param.getDatabaseConfigs(), persistService), param.getDatabaseConfigs(), persistService); + Collection<RuleConfiguration> globalRuleConfigs = persistService.getGlobalRuleService().load(); + ConfigurationProperties props = new ConfigurationProperties(persistService.getPropsService().load()); + Map<String, ShardingSphereDatabase> databases = InternalMetaDataFactory.create(persistService, effectiveDatabaseConfigs, props, computeNodeInstanceContext); + MetaDataContexts result = newMetaDataContexts(persistService, param, globalRuleConfigs, databases, props); + restoreRules(result, computeNodeInstanceContext); + return result; + } + + private static MetaDataContexts newMetaDataContexts(final MetaDataPersistService persistService, final ContextManagerBuilderParameter param, + final Collection<RuleConfiguration> globalRuleConfigs, final Map<String, ShardingSphereDatabase> databases, + final ConfigurationProperties props) { + // TODO load global data sources from persist service + ResourceMetaData globalResourceMetaData = new ResourceMetaData(param.getGlobalDataSources()); + RuleMetaData globalRuleMetaData = new RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, databases, props)); + ShardingSphereMetaData shardingSphereMetaData = new ShardingSphereMetaData(databases, globalResourceMetaData, globalRuleMetaData, props); + ShardingSphereStatistics shardingSphereStatistics = initStatistics(persistService, shardingSphereMetaData); + return new MetaDataContexts(shardingSphereMetaData, shardingSphereStatistics); + } + private static Collection<String> getDatabaseNames(final ComputeNodeInstanceContext computeNodeInstanceContext, final Map<String, DatabaseConfiguration> databaseConfigs, final MetaDataPersistService persistService) { return computeNodeInstanceContext.getInstance().getMetaData() instanceof JDBCInstanceMetaData ? databaseConfigs.keySet() : persistService.getDatabaseMetaDataService().loadAllDatabaseNames();