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";

Reply via email to