This is an automated email from the ASF dual-hosted git repository.

wuweijie 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 e9914d5  Add MetaDataPersistService.getEffectiveDataSources() (#15215)
e9914d5 is described below

commit e9914d521df85258a636c35370f516a78814edf5
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jan 30 22:10:56 2022 +0800

    Add MetaDataPersistService.getEffectiveDataSources() (#15215)
---
 .../metadata/persist/MetaDataPersistService.java   | 35 ++++++++++++++++++++
 .../cluster/ClusterContextManagerBuilder.java      | 36 +--------------------
 .../StandaloneContextManagerBuilder.java           | 37 +---------------------
 3 files changed, 37 insertions(+), 71 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 1b4a3e8..5161473 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
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.mode.metadata.persist;
 import lombok.Getter;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import org.apache.shardingsphere.infra.config.schema.SchemaConfiguration;
+import 
org.apache.shardingsphere.infra.datasource.pool.creator.DataSourcePoolCreator;
+import 
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyerFactory;
 import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
 import 
org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
 import 
org.apache.shardingsphere.mode.metadata.persist.service.ComputeNodePersistService;
@@ -31,6 +33,7 @@ import 
org.apache.shardingsphere.mode.metadata.persist.service.impl.SchemaRulePe
 import org.apache.shardingsphere.mode.persist.PersistRepository;
 
 import javax.sql.DataSource;
+import java.sql.SQLException;
 import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -104,4 +107,36 @@ public final class MetaDataPersistService {
     public void persistInstanceLabels(final String instanceId, final 
Collection<String> labels, final boolean isOverwrite) {
         computeNodePersistService.persistInstanceLabels(instanceId, labels, 
isOverwrite);
     }
+    
+    /**
+     * Get effective data sources.
+     * 
+     * @param schemaName schema name
+     * @param schemaConfigs schema configurations
+     * @return effective data sources
+     * @throws SQLException SQL exception
+     */
+    public Map<String, DataSource> getEffectiveDataSources(final String 
schemaName, final Map<String, ? extends SchemaConfiguration> schemaConfigs) 
throws SQLException {
+        Map<String, DataSourceProperties> persistedDataPropsMap = 
dataSourceService.load(schemaName);
+        return schemaConfigs.containsKey(schemaName)
+                ? mergeEffectiveDataSources(persistedDataPropsMap, 
schemaConfigs.get(schemaName).getDataSources()) : 
DataSourcePoolCreator.create(persistedDataPropsMap);
+    }
+    
+    private Map<String, DataSource> mergeEffectiveDataSources(
+            final Map<String, DataSourceProperties> 
persistedDataSourcePropsMap, final Map<String, DataSource> 
localConfiguredDataSources) throws SQLException {
+        Map<String, DataSource> result = new 
LinkedHashMap<>(persistedDataSourcePropsMap.size(), 1);
+        for (Entry<String, DataSourceProperties> entry : 
persistedDataSourcePropsMap.entrySet()) {
+            String dataSourceName = entry.getKey();
+            DataSourceProperties persistedDataSourceProps = entry.getValue();
+            DataSource localConfiguredDataSource = 
localConfiguredDataSources.get(dataSourceName);
+            if (null == localConfiguredDataSource) {
+                result.put(dataSourceName, 
DataSourcePoolCreator.create(persistedDataSourceProps));
+            } else if 
(DataSourcePropertiesCreator.create(localConfiguredDataSource).equals(persistedDataSourceProps))
 {
+                result.put(dataSourceName, localConfiguredDataSource);
+            } else {
+                
DataSourcePoolDestroyerFactory.destroy(localConfiguredDataSource);
+            }
+        }
+        return result;
+    }
 }
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 548440f..003f6d6 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
@@ -20,10 +20,6 @@ package org.apache.shardingsphere.mode.manager.cluster;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 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;
-import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
-import 
org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.instance.definition.InstanceDefinition;
 import org.apache.shardingsphere.infra.instance.definition.InstanceType;
@@ -47,7 +43,6 @@ import 
org.apache.shardingsphere.transaction.context.TransactionContextsBuilder;
 import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collection;
-import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
@@ -78,8 +73,7 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
         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);
+            Map<String, DataSource> dataSources = 
metaDataPersistService.getEffectiveDataSources(each, 
parameter.getSchemaConfigs());
             Collection<RuleConfiguration> schemaRuleConfigs = 
metaDataPersistService.getSchemaRuleService().load(each);
             result.addSchema(each, new 
DataSourceProvidedSchemaConfiguration(dataSources, schemaRuleConfigs), props);
         }
@@ -94,34 +88,6 @@ public final class ClusterContextManagerBuilder implements 
ContextManagerBuilder
         
metaDataPersistService.persistInstanceLabels(parameter.getInstanceDefinition().getInstanceId().getId(),
 parameter.getLabels(), isOverwrite);
     }
     
-    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);
-            }
-        }
-        return result;
-    }
-    
-    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 persistMetaData(final MetaDataPersistService 
metaDataPersistService, final Map<String, ShardingSphereSchema> schemaMap) {
         for (Entry<String, ShardingSphereSchema> entry : schemaMap.entrySet()) 
{
             
metaDataPersistService.getSchemaMetaDataService().persist(entry.getKey(), 
entry.getValue());
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 b997288..907ec37 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
@@ -19,10 +19,6 @@ package org.apache.shardingsphere.mode.manager.standalone;
 
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 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;
-import org.apache.shardingsphere.infra.datasource.props.DataSourceProperties;
-import 
org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCreator;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.instance.definition.InstanceType;
 import org.apache.shardingsphere.infra.rule.identifier.type.InstanceAwareRule;
@@ -40,9 +36,7 @@ import 
org.apache.shardingsphere.transaction.context.TransactionContextsBuilder;
 import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collection;
-import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Properties;
 
 /**
@@ -64,8 +58,7 @@ public final class StandaloneContextManagerBuilder implements 
ContextManagerBuil
         Collection<String> schemaNames = InstanceType.JDBC == 
parameter.getInstanceDefinition().getInstanceType()
                 ? parameter.getSchemaConfigs().keySet() : 
metaDataPersistService.getSchemaMetaDataService().loadAllNames();
         for (String each : schemaNames) {
-            Map<String, DataSource> dataSources = 
parameter.getSchemaConfigs().containsKey(each)
-                    ? getEffectiveDataSources(metaDataPersistService, each, 
parameter.getSchemaConfigs().get(each).getDataSources()) : 
loadDataSources(metaDataPersistService, each);
+            Map<String, DataSource> dataSources = 
metaDataPersistService.getEffectiveDataSources(each, 
parameter.getSchemaConfigs());
             Collection<RuleConfiguration> schemaRuleConfigs = 
metaDataPersistService.getSchemaRuleService().load(each);
             builder.addSchema(each, new 
DataSourceProvidedSchemaConfiguration(dataSources, schemaRuleConfigs), props);
         }
@@ -78,34 +71,6 @@ public final class StandaloneContextManagerBuilder 
implements ContextManagerBuil
         }
     }
     
-    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);
-            }
-        }
-        return result;
-    }
-    
-    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 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();

Reply via email to