This is an automated email from the ASF dual-hosted git repository.
totalo 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 4952063861f Add MetaDataContextsFactory (#19261)
4952063861f is described below
commit 4952063861f1898dac23a0f08d89af4caac9b4f8
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jul 16 14:28:16 2022 +0800
Add MetaDataContextsFactory (#19261)
---
.../mode/metadata/MetaDataContextsFactory.java | 83 ++++++++++++++++++++++
.../cluster/ClusterContextManagerBuilder.java | 44 +-----------
.../StandaloneContextManagerBuilder.java | 44 +-----------
3 files changed, 87 insertions(+), 84 deletions(-)
diff --git
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
new file mode 100644
index 00000000000..c15c1111f05
--- /dev/null
+++
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.mode.metadata;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.config.RuleConfiguration;
+import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
+import
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import
org.apache.shardingsphere.infra.federation.optimizer.context.OptimizerContextFactory;
+import org.apache.shardingsphere.infra.instance.InstanceContext;
+import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
+import
org.apache.shardingsphere.infra.instance.metadata.jdbc.JDBCInstanceMetaData;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabasesFactory;
+import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
+
+import javax.sql.DataSource;
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * Meta data contexts.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class MetaDataContextsFactory {
+
+ /**
+ * Create meta data contexts.
+ *
+ * @param persistService persist service
+ * @param databaseConfigs database configurations
+ * @param instanceMetaData instance meta data
+ * @param instanceContext instance context
+ * @return meta data contexts
+ * @throws SQLException SQL exception
+ */
+ public static MetaDataContexts create(final MetaDataPersistService
persistService, final Map<String, DatabaseConfiguration> databaseConfigs,
+ final InstanceMetaData
instanceMetaData, final InstanceContext instanceContext) throws SQLException {
+ Collection<String> databaseNames = instanceMetaData instanceof
JDBCInstanceMetaData ? databaseConfigs.keySet() :
persistService.getDatabaseMetaDataService().loadAllDatabaseNames();
+ Map<String, DatabaseConfiguration> effectiveDatabaseConfigs =
createEffectiveDatabaseConfigurations(databaseNames, databaseConfigs,
persistService);
+ Collection<RuleConfiguration> globalRuleConfigs =
persistService.getGlobalRuleService().load();
+ ConfigurationProperties props = new
ConfigurationProperties(persistService.getPropsService().load());
+ Map<String, ShardingSphereDatabase> databases =
ShardingSphereDatabasesFactory.create(effectiveDatabaseConfigs, props,
instanceContext);
+ ShardingSphereRuleMetaData globalMetaData = new
ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs,
databases, instanceContext));
+ return new MetaDataContexts(persistService, new
ShardingSphereMetaData(databases, globalMetaData, props),
OptimizerContextFactory.create(databases, globalMetaData));
+ }
+
+ private static Map<String, DatabaseConfiguration>
createEffectiveDatabaseConfigurations(final Collection<String> databaseNames,
+
final Map<String, DatabaseConfiguration> databaseConfigs, final
MetaDataPersistService persistService) {
+ return databaseNames.stream().collect(
+ Collectors.toMap(each -> each, each ->
createEffectiveDatabaseConfiguration(each, databaseConfigs, persistService),
(a, b) -> b, () -> new HashMap<>(databaseNames.size(), 1)));
+ }
+
+ private static DatabaseConfiguration
createEffectiveDatabaseConfiguration(final String databaseName,
+
final Map<String, DatabaseConfiguration> databaseConfigs, final
MetaDataPersistService persistService) {
+ Map<String, DataSource> effectiveDataSources =
persistService.getEffectiveDataSources(databaseName, databaseConfigs);
+ Collection<RuleConfiguration> databaseRuleConfigs =
persistService.getDatabaseRulePersistService().load(databaseName);
+ return new
DataSourceProvidedDatabaseConfiguration(effectiveDataSources,
databaseRuleConfigs);
+ }
+}
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 9f5ea29f7bf..86b3d758873 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,20 +17,9 @@
package org.apache.shardingsphere.mode.manager.cluster;
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
-import
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.eventbus.EventBusContext;
-import
org.apache.shardingsphere.infra.federation.optimizer.context.OptimizerContextFactory;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.infra.instance.InstanceContext;
-import
org.apache.shardingsphere.infra.instance.metadata.jdbc.JDBCInstanceMetaData;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabasesFactory;
-import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilder;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
@@ -39,17 +28,14 @@ import
org.apache.shardingsphere.mode.manager.cluster.coordinator.RegistryCenter
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.lock.DistributedLockContext;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.workerid.generator.ClusterWorkerIdGenerator;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
import
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryFactory;
import org.apache.shardingsphere.schedule.core.ScheduleContextFactory;
-import javax.sql.DataSource;
import java.sql.SQLException;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
/**
* Cluster context manager builder.
@@ -65,7 +51,7 @@ public final class ClusterContextManagerBuilder implements
ContextManagerBuilder
RegistryCenter registryCenter = new RegistryCenter(repository, new
EventBusContext());
InstanceContext instanceContext = buildInstanceContext(registryCenter,
parameter);
registryCenter.getRepository().watchSessionConnection(instanceContext);
- MetaDataContexts metaDataContexts =
buildMetaDataContexts(persistService, parameter, instanceContext);
+ MetaDataContexts metaDataContexts =
MetaDataContextsFactory.create(persistService, parameter.getDatabaseConfigs(),
parameter.getInstanceMetaData(), instanceContext);
persistMetaData(metaDataContexts);
ContextManager result = new ContextManager(metaDataContexts,
instanceContext);
registerOnline(persistService, registryCenter, parameter, result);
@@ -83,32 +69,6 @@ public final class ClusterContextManagerBuilder implements
ContextManagerBuilder
parameter.getModeConfiguration(), new
DistributedLockContext(registryCenter.getRepository()),
registryCenter.getEventBusContext());
}
- private MetaDataContexts buildMetaDataContexts(final
MetaDataPersistService persistService,
- final
ContextManagerBuilderParameter parameter, final InstanceContext
instanceContext) throws SQLException {
- Collection<String> databaseNames = parameter.getInstanceMetaData()
instanceof JDBCInstanceMetaData
- ? parameter.getDatabaseConfigs().keySet()
- :
persistService.getDatabaseMetaDataService().loadAllDatabaseNames();
- Map<String, DatabaseConfiguration> databaseConfigMap =
buildDatabaseConfigMap(databaseNames, persistService, parameter);
- Collection<RuleConfiguration> globalRuleConfigs =
persistService.getGlobalRuleService().load();
- ConfigurationProperties props = new
ConfigurationProperties(persistService.getPropsService().load());
- Map<String, ShardingSphereDatabase> databases =
ShardingSphereDatabasesFactory.create(databaseConfigMap, props,
instanceContext);
- ShardingSphereRuleMetaData globalMetaData = new
ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs,
databases, instanceContext));
- return new MetaDataContexts(persistService, new
ShardingSphereMetaData(databases, globalMetaData, props),
OptimizerContextFactory.create(databases, globalMetaData));
- }
-
- private Map<String, DatabaseConfiguration> buildDatabaseConfigMap(final
Collection<String> databaseNames,
- final
MetaDataPersistService persistService, final ContextManagerBuilderParameter
parameter) {
- Map<String, DatabaseConfiguration> result = new
HashMap<>(databaseNames.size(), 1);
- databaseNames.forEach(each -> result.put(each,
buildDatabaseConfiguration(each, persistService, parameter)));
- return result;
- }
-
- private DatabaseConfiguration buildDatabaseConfiguration(final String
databaseName, final MetaDataPersistService persistService, final
ContextManagerBuilderParameter parameter) {
- Map<String, DataSource> dataSources =
persistService.getEffectiveDataSources(databaseName,
parameter.getDatabaseConfigs());
- Collection<RuleConfiguration> databaseRuleConfigs =
persistService.getDatabaseRulePersistService().load(databaseName);
- return new DataSourceProvidedDatabaseConfiguration(dataSources,
databaseRuleConfigs);
- }
-
private void persistMetaData(final MetaDataContexts metaDataContexts) {
metaDataContexts.getMetaData().getDatabases().forEach((databaseName,
schemas) -> schemas.getSchemas()
.forEach((schemaName, tables) ->
metaDataContexts.getPersistService().getDatabaseMetaDataService().persistMetaData(databaseName,
schemaName, tables)));
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 cdb24bec67c..15eeb4b993f 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
@@ -17,36 +17,22 @@
package org.apache.shardingsphere.mode.manager.standalone;
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
-import
org.apache.shardingsphere.infra.config.database.impl.DataSourceProvidedDatabaseConfiguration;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.eventbus.EventBusContext;
-import
org.apache.shardingsphere.infra.federation.optimizer.context.OptimizerContextFactory;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.infra.instance.InstanceContext;
-import
org.apache.shardingsphere.infra.instance.metadata.jdbc.JDBCInstanceMetaData;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabasesFactory;
-import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilder;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
import
org.apache.shardingsphere.mode.manager.standalone.lock.StandaloneLockContext;
import
org.apache.shardingsphere.mode.manager.standalone.workerid.generator.StandaloneWorkerIdGenerator;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import
org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepository;
import
org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepositoryFactory;
import org.apache.shardingsphere.schedule.core.ScheduleContextFactory;
-import javax.sql.DataSource;
import java.sql.SQLException;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
/**
* Standalone context manager builder.
@@ -60,7 +46,7 @@ public final class StandaloneContextManagerBuilder implements
ContextManagerBuil
MetaDataPersistService persistService = new
MetaDataPersistService(repository);
persistConfigurations(persistService, parameter);
InstanceContext instanceContext = buildInstanceContext(parameter);
- MetaDataContexts metaDataContexts =
buildMetaDataContexts(persistService, parameter, instanceContext);
+ MetaDataContexts metaDataContexts =
MetaDataContextsFactory.create(persistService, parameter.getDatabaseConfigs(),
parameter.getInstanceMetaData(), instanceContext);
return new ContextManager(metaDataContexts, instanceContext);
}
@@ -75,32 +61,6 @@ public final class StandaloneContextManagerBuilder
implements ContextManagerBuil
new StandaloneWorkerIdGenerator(),
parameter.getModeConfiguration(), new StandaloneLockContext(), new
EventBusContext());
}
- private MetaDataContexts buildMetaDataContexts(final
MetaDataPersistService persistService,
- final
ContextManagerBuilderParameter parameter, final InstanceContext
instanceContext) throws SQLException {
- Collection<String> databaseNames = parameter.getInstanceMetaData()
instanceof JDBCInstanceMetaData
- ? parameter.getDatabaseConfigs().keySet()
- :
persistService.getDatabaseMetaDataService().loadAllDatabaseNames();
- Map<String, DatabaseConfiguration> databaseConfigMap =
buildDatabaseConfigMap(databaseNames, persistService, parameter);
- Collection<RuleConfiguration> globalRuleConfigs =
persistService.getGlobalRuleService().load();
- ConfigurationProperties props = new
ConfigurationProperties(persistService.getPropsService().load());
- Map<String, ShardingSphereDatabase> databases =
ShardingSphereDatabasesFactory.create(databaseConfigMap, props,
instanceContext);
- ShardingSphereRuleMetaData globalMetaData = new
ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs,
databases, instanceContext));
- return new MetaDataContexts(persistService, new
ShardingSphereMetaData(databases, globalMetaData, props),
OptimizerContextFactory.create(databases, globalMetaData));
- }
-
- private Map<String, DatabaseConfiguration> buildDatabaseConfigMap(final
Collection<String> databaseNames,
- final
MetaDataPersistService persistService, final ContextManagerBuilderParameter
parameter) {
- Map<String, DatabaseConfiguration> result = new
HashMap<>(databaseNames.size(), 1);
- databaseNames.forEach(each -> result.put(each,
buildDatabaseConfiguration(each, persistService, parameter)));
- return result;
- }
-
- private DatabaseConfiguration buildDatabaseConfiguration(final String
databaseName, final MetaDataPersistService persistService, final
ContextManagerBuilderParameter parameter) {
- Map<String, DataSource> dataSources =
persistService.getEffectiveDataSources(databaseName,
parameter.getDatabaseConfigs());
- Collection<RuleConfiguration> databaseRuleConfigs =
persistService.getDatabaseRulePersistService().load(databaseName);
- return new DataSourceProvidedDatabaseConfiguration(dataSources,
databaseRuleConfigs);
- }
-
@Override
public String getType() {
return "Standalone";