This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 c32e923 Refactor ClusterContextManagerBuilder (#15205)
c32e923 is described below
commit c32e9238f76a4cf23a91dbaaee6127af8ab624ea
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jan 30 12:51:52 2022 +0800
Refactor ClusterContextManagerBuilder (#15205)
* Refactor ClusterContextManagerBuilder
* Refactor ClusterContextManagerBuilder
---
.../metadata/persist/MetaDataPersistService.java | 2 +-
.../cluster/ClusterContextManagerBuilder.java | 167 +++++++--------------
.../StandaloneContextManagerBuilder.java | 8 +-
3 files changed, 61 insertions(+), 116 deletions(-)
diff --git
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
index d9eaaec..5f1b27e 100644
---
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
+++
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/persist/MetaDataPersistService.java
@@ -99,7 +99,7 @@ public final class MetaDataPersistService {
*
* @param instanceId instance id
* @param labels collection of label
- * @param isOverwrite whether overwrite registry center's configuration if
existed
+ * @param isOverwrite whether overwrite registry center's configuration if
existed
*/
public void persistInstanceConfigurations(final String instanceId, final
Collection<String> labels, final boolean isOverwrite) {
computeNodePersistService.persistInstanceLabels(instanceId, labels,
isOverwrite);
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 a62acb5..4589853 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
@@ -17,9 +17,7 @@
package org.apache.shardingsphere.mode.manager.cluster;
-import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import org.apache.shardingsphere.infra.config.schema.SchemaConfiguration;
import
org.apache.shardingsphere.infra.config.schema.impl.DataSourceProvidedSchemaConfiguration;
import
org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator;
import
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyerFactory;
@@ -52,62 +50,46 @@ import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
-import java.util.stream.Collectors;
/**
* Cluster context manager builder.
*/
-@Slf4j
public final class ClusterContextManagerBuilder implements
ContextManagerBuilder {
- private RegistryCenter registryCenter;
-
- private MetaDataPersistService metaDataPersistService;
-
- private MetaDataContexts metaDataContexts;
-
- private TransactionContexts transactionContexts;
-
- private InstanceContext instanceContext;
-
- private ContextManager contextManager;
-
@Override
public ContextManager build(final ContextManagerBuilderParameter
parameter) throws SQLException {
- beforeBuildContextManager(parameter);
- contextManager = new ContextManager();
- contextManager.init(metaDataContexts, transactionContexts,
instanceContext);
- afterBuildContextManager(parameter);
- return contextManager;
- }
-
- private void beforeBuildContextManager(final
ContextManagerBuilderParameter parameter) throws SQLException {
- ClusterPersistRepository repository =
ClusterPersistRepositoryFactory.newInstance((ClusterPersistRepositoryConfiguration)
parameter.getModeConfig().getRepository());
- registryCenter = new RegistryCenter(repository);
ModeScheduleContextFactory.getInstance().init(parameter.getInstanceDefinition().getInstanceId().getId(),
parameter.getModeConfig());
- metaDataPersistService = new MetaDataPersistService(repository);
+ ClusterPersistRepository repository =
ClusterPersistRepositoryFactory.newInstance((ClusterPersistRepositoryConfiguration)
parameter.getModeConfig().getRepository());
+ MetaDataPersistService metaDataPersistService = new
MetaDataPersistService(repository);
persistConfigurations(metaDataPersistService, parameter);
- persistInstanceConfigurations(parameter.getLabels(),
parameter.getInstanceDefinition(), parameter.getModeConfig().isOverwrite());
+ MetaDataContextsBuilder metaDataContextsBuilder =
createMetaDataContextsBuilder(metaDataPersistService, parameter);
+ persistMetaData(metaDataPersistService,
metaDataContextsBuilder.getSchemaMap());
+ ContextManager result = createContextManager(repository,
metaDataPersistService, parameter.getInstanceDefinition(),
metaDataContextsBuilder.build(metaDataPersistService));
+ registerOnline(repository, metaDataPersistService,
parameter.getInstanceDefinition(), result);
+ return result;
+ }
+
+ private MetaDataContextsBuilder createMetaDataContextsBuilder(final
MetaDataPersistService metaDataPersistService, final
ContextManagerBuilderParameter parameter) throws SQLException {
Collection<String> schemaNames = InstanceType.JDBC ==
parameter.getInstanceDefinition().getInstanceType()
? parameter.getSchemaConfigs().keySet() :
metaDataPersistService.getSchemaMetaDataService().loadAllNames();
- Map<String, Map<String, DataSource>> loadedDataSources =
loadDataSourcesMap(metaDataPersistService, parameter.getSchemaConfigs(),
schemaNames);
- Properties loadedProps =
metaDataPersistService.getPropsService().load();
- MetaDataContextsBuilder metaDataContextsBuilder = new
MetaDataContextsBuilder(metaDataPersistService.getGlobalRuleService().load(),
loadedProps);
- Map<String, Collection<RuleConfiguration>> loadedSchemaRuleConfigs =
loadSchemaRules(metaDataPersistService, schemaNames);
- for (String each : loadedDataSources.keySet()) {
- metaDataContextsBuilder.addSchema(each, new
DataSourceProvidedSchemaConfiguration(loadedDataSources.get(each),
loadedSchemaRuleConfigs.get(each)), loadedProps);
+ Collection<RuleConfiguration> globalRuleConfigs =
metaDataPersistService.getGlobalRuleService().load();
+ Properties props = metaDataPersistService.getPropsService().load();
+ MetaDataContextsBuilder result = new
MetaDataContextsBuilder(globalRuleConfigs, props);
+ for (String each : schemaNames) {
+ Map<String, DataSource> dataSources =
parameter.getSchemaConfigs().containsKey(each)
+ ? getEffectiveDataSources(metaDataPersistService, each,
parameter.getSchemaConfigs().get(each).getDataSources()) :
loadDataSources(metaDataPersistService, each);
+ Collection<RuleConfiguration> schemaRuleConfigs =
metaDataPersistService.getSchemaRuleService().load(each);
+ result.addSchema(each, new
DataSourceProvidedSchemaConfiguration(dataSources, schemaRuleConfigs), props);
}
- persistMetaData(metaDataContextsBuilder.getSchemaMap());
- metaDataContexts =
metaDataContextsBuilder.build(metaDataPersistService);
- transactionContexts = new
TransactionContextsBuilder(metaDataContexts.getMetaDataMap(),
metaDataContexts.getGlobalRuleMetaData().getRules()).build();
- instanceContext = new
InstanceContext(metaDataPersistService.getComputeNodePersistService().loadComputeNodeInstance(
- parameter.getInstanceDefinition()), new
ClusterWorkerIdGenerator(repository, metaDataPersistService,
parameter.getInstanceDefinition()), getType());
+ return result;
}
private void persistConfigurations(final MetaDataPersistService
metaDataPersistService, final ContextManagerBuilderParameter parameter) {
+ boolean isOverwrite = parameter.getModeConfig().isOverwrite();
if (!isEmptyLocalConfiguration(parameter)) {
-
metaDataPersistService.persistConfigurations(parameter.getSchemaConfigs(),
parameter.getGlobalRuleConfigs(), parameter.getProps(),
parameter.getModeConfig().isOverwrite());
+
metaDataPersistService.persistConfigurations(parameter.getSchemaConfigs(),
parameter.getGlobalRuleConfigs(), parameter.getProps(), isOverwrite);
}
+
metaDataPersistService.persistInstanceConfigurations(parameter.getInstanceDefinition().getInstanceId().getId(),
parameter.getLabels(), isOverwrite);
}
private boolean isEmptyLocalConfiguration(final
ContextManagerBuilderParameter parameter) {
@@ -115,90 +97,55 @@ public final class ClusterContextManagerBuilder implements
ContextManagerBuilder
&& parameter.getGlobalRuleConfigs().isEmpty() &&
parameter.getProps().isEmpty();
}
- private void persistInstanceConfigurations(final Collection<String>
labels, final InstanceDefinition instanceDefinition, final boolean overwrite) {
-
metaDataPersistService.persistInstanceConfigurations(instanceDefinition.getInstanceId().getId(),
labels, overwrite);
- }
-
- private Map<String, Map<String, DataSource>> loadDataSourcesMap(final
MetaDataPersistService metaDataPersistService, final Map<String, ? extends
SchemaConfiguration> schemaConfig,
- final
Collection<String> schemaNames) {
- Map<String, Map<String, DataSourceProperties>>
loadedDataSourcePropertiesMap =
loadDataSourceDataSourcePropertiesMap(metaDataPersistService, schemaNames);
- Map<String, Map<String, DataSource>> dataSourcesMap =
getDataSourcesMap(schemaConfig);
- Map<String, Map<String, DataSource>> result =
getLoadedDataSourceMap(loadedDataSourcePropertiesMap, dataSourcesMap);
- closeLocalDataSources(dataSourcesMap, result);
- return result;
- }
-
- private Map<String, Map<String, DataSourceProperties>>
loadDataSourceDataSourcePropertiesMap(final MetaDataPersistService
metaDataPersistService, final Collection<String> schemaNames) {
- Map<String, Map<String, DataSourceProperties>> result = new
LinkedHashMap<>();
- for (String each : schemaNames) {
- result.put(each,
metaDataPersistService.getDataSourceService().load(each));
- }
- return result;
- }
-
- private Map<String, Map<String, DataSource>> getDataSourcesMap(final
Map<String, ? extends SchemaConfiguration> schemaConfig) {
- Map<String, Map<String, DataSource>> result = new
LinkedHashMap<>(schemaConfig.size(), 1);
- for (Entry<String, ? extends SchemaConfiguration> entry :
schemaConfig.entrySet()) {
- result.put(entry.getKey(), entry.getValue().getDataSources());
- }
- return result;
- }
-
- private Map<String, Map<String, DataSource>> getLoadedDataSourceMap(final
Map<String, Map<String, DataSourceProperties>> loadedDataSourcePropertiesMaps,
- final
Map<String, Map<String, DataSource>> localDataSourceMaps) {
- Map<String, Map<String, DataSource>> result = new
LinkedHashMap<>(loadedDataSourcePropertiesMaps.size(), 1);
- for (Entry<String, Map<String, DataSourceProperties>> each :
loadedDataSourcePropertiesMaps.entrySet()) {
- Map<String, DataSource> dataSources = new LinkedHashMap<>();
- Map<String, DataSourceProperties> loadedDataSourcePropertiesMap =
loadedDataSourcePropertiesMaps.get(each.getKey());
- for (Entry<String, DataSourceProperties> entry :
loadedDataSourcePropertiesMap.entrySet()) {
- Map<String, DataSource> localDataSources =
localDataSourceMaps.get(each.getKey());
- if (null != localDataSources && null !=
localDataSources.get(entry.getKey()) &&
DataSourcePropertiesCreator.create(localDataSources.get(entry.getKey())).equals(entry.getValue()))
{
- dataSources.put(entry.getKey(),
localDataSources.get(entry.getKey()));
- } else {
- dataSources.put(entry.getKey(),
DataSourcePoolCreator.create(entry.getValue()));
- }
+ private Map<String, DataSource> getEffectiveDataSources(final
MetaDataPersistService metaDataPersistService,
+ final String
schemaName, final Map<String, DataSource> localDataSources) throws SQLException
{
+ Map<String, DataSourceProperties> loadedDataSourcePropsMap =
metaDataPersistService.getDataSourceService().load(schemaName);
+ Map<String, DataSource> result = new
LinkedHashMap<>(loadedDataSourcePropsMap.size(), 1);
+ for (Entry<String, DataSourceProperties> entry :
loadedDataSourcePropsMap.entrySet()) {
+ String dataSourceName = entry.getKey();
+ DataSourceProperties loadedDataSourceProps = entry.getValue();
+ DataSource localDataSource = localDataSources.get(dataSourceName);
+ if (null == localDataSource) {
+ result.put(dataSourceName,
DataSourcePoolCreator.create(loadedDataSourceProps));
+ } else if
(DataSourcePropertiesCreator.create(localDataSource).equals(loadedDataSourceProps))
{
+ result.put(dataSourceName, localDataSource);
+ } else {
+ DataSourcePoolDestroyerFactory.destroy(localDataSource);
}
- result.put(each.getKey(), dataSources);
}
return result;
}
- private void closeLocalDataSources(final Map<String, Map<String,
DataSource>> localDataSourceMap, final Map<String, Map<String, DataSource>>
loadDataSourceMap) {
- for (Entry<String, Map<String, DataSource>> entry :
localDataSourceMap.entrySet()) {
- if (loadDataSourceMap.containsKey(entry.getKey())) {
- entry.getValue().forEach((key, value) -> {
- if (null ==
loadDataSourceMap.get(entry.getKey()).get(key)) {
- closeDataSource(value);
- }
- });
- }
+ private Map<String, DataSource> loadDataSources(final
MetaDataPersistService metaDataPersistService, final String schemaName) {
+ Map<String, DataSourceProperties> dataSourceProps =
metaDataPersistService.getDataSourceService().load(schemaName);
+ Map<String, DataSource> result = new
LinkedHashMap<>(dataSourceProps.size(), 1);
+ for (Entry<String, DataSourceProperties> entry :
dataSourceProps.entrySet()) {
+ result.put(entry.getKey(),
DataSourcePoolCreator.create(entry.getValue()));
}
+ return result;
}
- private void closeDataSource(final DataSource dataSource) {
- try {
- DataSourcePoolDestroyerFactory.destroy(dataSource);
- // CHECKSTYLE:OFF
- } catch (SQLException ex) {
- // CHECKSTYLE:ON
- log.error("Close datasource connection failed", ex);
- }
- }
-
- private Map<String, Collection<RuleConfiguration>> loadSchemaRules(final
MetaDataPersistService metaDataPersistService, final Collection<String>
schemaNames) {
- return schemaNames.stream().collect(Collectors.toMap(
- each -> each, each ->
metaDataPersistService.getSchemaRuleService().load(each), (oldValue,
currentValue) -> oldValue, LinkedHashMap::new));
- }
-
- private void persistMetaData(final Map<String, ShardingSphereSchema>
schemaMap) {
+ private void persistMetaData(final MetaDataPersistService
metaDataPersistService, final Map<String, ShardingSphereSchema> schemaMap) {
for (Entry<String, ShardingSphereSchema> entry : schemaMap.entrySet())
{
metaDataPersistService.getSchemaMetaDataService().persist(entry.getKey(),
entry.getValue());
}
}
- private void afterBuildContextManager(final ContextManagerBuilderParameter
parameter) {
+ private ContextManager createContextManager(final ClusterPersistRepository
repository,
+ final MetaDataPersistService
metaDataPersistService, final InstanceDefinition instanceDefinition, final
MetaDataContexts metaDataContexts) {
+ TransactionContexts transactionContexts = new
TransactionContextsBuilder(metaDataContexts.getMetaDataMap(),
metaDataContexts.getGlobalRuleMetaData().getRules()).build();
+ InstanceContext instanceContext = new
InstanceContext(metaDataPersistService.getComputeNodePersistService().loadComputeNodeInstance(instanceDefinition),
+ new ClusterWorkerIdGenerator(repository,
metaDataPersistService, instanceDefinition), getType());
+ ContextManager result = new ContextManager();
+ result.init(metaDataContexts, transactionContexts, instanceContext);
+ return result;
+ }
+
+ private void registerOnline(final ClusterPersistRepository repository,
+ final MetaDataPersistService
metaDataPersistService, final InstanceDefinition instanceDefinition, final
ContextManager contextManager) {
+ RegistryCenter registryCenter = new RegistryCenter(repository);
new ClusterContextManagerCoordinator(metaDataPersistService,
contextManager, registryCenter);
- registryCenter.onlineInstance(parameter.getInstanceDefinition());
+ registryCenter.onlineInstance(instanceDefinition);
}
@Override
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
index b0dcd5d..4ba5324 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
@@ -54,9 +54,7 @@ public final class StandaloneContextManagerBuilder implements
ContextManagerBuil
public ContextManager build(final ContextManagerBuilderParameter
parameter) throws SQLException {
MetaDataPersistService metaDataPersistService = new
MetaDataPersistService(StandalonePersistRepositoryFactory.newInstance(parameter.getModeConfig().getRepository()));
persistConfigurations(metaDataPersistService, parameter);
- MetaDataContexts metaDataContexts =
createMetaDataContexts(metaDataPersistService, parameter);
- TransactionContexts transactionContexts = new
TransactionContextsBuilder(metaDataContexts.getMetaDataMap(),
metaDataContexts.getGlobalRuleMetaData().getRules()).build();
- return createContextManager(metaDataPersistService, parameter,
metaDataContexts, transactionContexts);
+ return createContextManager(metaDataPersistService, parameter,
createMetaDataContexts(metaDataPersistService, parameter));
}
private MetaDataContexts createMetaDataContexts(final
MetaDataPersistService metaDataPersistService, final
ContextManagerBuilderParameter parameter) throws SQLException {
@@ -113,9 +111,9 @@ public final class StandaloneContextManagerBuilder
implements ContextManagerBuil
return result;
}
- private ContextManager createContextManager(final MetaDataPersistService
metaDataPersistService,
- final
ContextManagerBuilderParameter parameter, final MetaDataContexts
metaDataContexts, final TransactionContexts transactionContexts) {
+ private ContextManager createContextManager(final MetaDataPersistService
metaDataPersistService, final ContextManagerBuilderParameter parameter, final
MetaDataContexts metaDataContexts) {
ContextManager result = new ContextManager();
+ TransactionContexts transactionContexts = new
TransactionContextsBuilder(metaDataContexts.getMetaDataMap(),
metaDataContexts.getGlobalRuleMetaData().getRules()).build();
InstanceContext instanceContext = new InstanceContext(
metaDataPersistService.getComputeNodePersistService().loadComputeNodeInstance(parameter.getInstanceDefinition()),
new StandaloneWorkerIdGenerator(), getType());
result.init(metaDataContexts, transactionContexts, instanceContext);