From d07cc903e1ef6d64e5cb50ab7cebf919a6efbf24 Mon Sep 17 00:00:00 2001 From: Haoran Meng Date: Thu, 22 Aug 2024 14:58:34 +0800 Subject: [PATCH] Split the create method of MetaDataContextsFactory to createByLocal and createByRepository --- .../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 90551bd97d7ad..1edaea0824b2d 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 effectiveDatabaseConfigs = isDatabaseMetaDataExisted - ? createEffectiveDatabaseConfigurations(getDatabaseNames(computeNodeInstanceContext, param.getDatabaseConfigs(), persistService), param.getDatabaseConfigs(), persistService) - : param.getDatabaseConfigs(); - // TODO load global data sources from persist service - Map globalDataSources = param.getGlobalDataSources(); - Collection 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 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 static MetaDataContexts create(final MetaDataPersistService persistServic return new MetaDataContexts(metaData, initStatistics(persistService, metaData)); } + private static MetaDataContexts createByLocal(final MetaDataPersistService persistService, final ContextManagerBuilderParameter param, + final ComputeNodeInstanceContext computeNodeInstanceContext) throws SQLException { + Map effectiveDatabaseConfigs = param.getDatabaseConfigs(); + Collection 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 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) throws SQLException { + Map effectiveDatabaseConfigs = + createEffectiveDatabaseConfigurations(getDatabaseNames(computeNodeInstanceContext, param.getDatabaseConfigs(), persistService), param.getDatabaseConfigs(), persistService); + Collection globalRuleConfigs = persistService.getGlobalRuleService().load(); + ConfigurationProperties props = new ConfigurationProperties(persistService.getPropsService().load()); + Map 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 globalRuleConfigs, final Map 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 getDatabaseNames(final ComputeNodeInstanceContext computeNodeInstanceContext, final Map databaseConfigs, final MetaDataPersistService persistService) { return computeNodeInstanceContext.getInstance().getMetaData() instanceof JDBCInstanceMetaData ? databaseConfigs.keySet() : persistService.getDatabaseMetaDataService().loadAllDatabaseNames();