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 <[email protected]>
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();