You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by wu...@apache.org on 2022/01/30 14:11:46 UTC

[shardingsphere] branch master updated: Add MetaDataPersistService.getEffectiveDataSources() (#15215)

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 <te...@163.com>
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();