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

sunnianjun 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 df7efca7866 Remove StorageResource.wrappedDataSources (#28647)
df7efca7866 is described below

commit df7efca786632a4fa30040fd032ff3359ba6f8b8
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Oct 6 19:12:42 2023 +0800

    Remove StorageResource.wrappedDataSources (#28647)
    
    * Remove StorageResource.wrappedDataSources
    
    * Remove StorageResource.wrappedDataSources
    
    * Use getStorageUnits instead of 
DatabaseConfiguration.getDataSourcePoolPropertiesMap()
    
    * Refactor DatabaseConfiguration
    
    * Remove DatabaseConfiguration.getDataSources()
---
 .../config/database/DatabaseConfiguration.java     | 22 ++++-------
 .../DataSourceGeneratedDatabaseConfiguration.java  | 27 +++++++------
 .../DataSourceProvidedDatabaseConfiguration.java   | 44 ++++++++++++++++------
 .../infra/database/DatabaseTypeEngine.java         |  8 ++--
 .../metadata/database/ShardingSphereDatabase.java  | 10 ++---
 .../database/resource/ResourceMetaData.java        | 10 +----
 .../database/resource/StorageResource.java         | 25 +-----------
 .../builder/database/DatabaseRulesBuilder.java     |  5 ++-
 .../state/datasource/DataSourceStateManager.java   | 19 ++++++----
 ...taSourceGeneratedDatabaseConfigurationTest.java |  6 +--
 ...ataSourceProvidedDatabaseConfigurationTest.java |  6 +--
 .../metadata/factory/ExternalMetaDataFactory.java  |  4 +-
 .../metadata/factory/InternalMetaDataFactory.java  |  2 +-
 .../factory/NewInternalMetaDataFactory.java        |  2 +-
 .../metadata/persist/MetaDataPersistService.java   |  7 ++--
 .../persist/NewMetaDataPersistService.java         | 19 ++--------
 .../manager/ContextManagerBuilderParameter.java    |  2 +-
 .../context/ConfigurationContextManager.java       | 12 +++---
 .../mode/metadata/MetaDataContextsFactory.java     |  4 +-
 .../mode/metadata/NewMetaDataContextsFactory.java  |  4 +-
 .../ContextManagerBuilderParameterTest.java        |  4 +-
 .../test/it/rewrite/engine/SQLRewriterIT.java      | 19 +++-------
 22 files changed, 117 insertions(+), 144 deletions(-)

diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/DatabaseConfiguration.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/DatabaseConfiguration.java
index 9f4b4fa6ca8..9ec063f76c0 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/DatabaseConfiguration.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/DatabaseConfiguration.java
@@ -18,10 +18,9 @@
 package org.apache.shardingsphere.infra.config.database;
 
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
-import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.StorageResource;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 
-import javax.sql.DataSource;
 import java.util.Collection;
 import java.util.Map;
 
@@ -31,18 +30,18 @@ import java.util.Map;
 public interface DatabaseConfiguration {
     
     /**
-     * Get data sources.
+     * Get rule configurations.
      * 
-     * @return data sources
+     * @return rule configurations
      */
-    Map<String, DataSource> getDataSources();
+    Collection<RuleConfiguration> getRuleConfigurations();
     
     /**
-     * Get rule configurations.
+     * Get storage units.
      * 
-     * @return rule configurations
+     * @return storage units
      */
-    Collection<RuleConfiguration> getRuleConfigurations();
+    Map<String, StorageUnit> getStorageUnits();
     
     /**
      * Get storage resource.
@@ -50,11 +49,4 @@ public interface DatabaseConfiguration {
      * @return storage resource
      */
     StorageResource getStorageResource();
-    
-    /**
-     * Get data source pool properties map.
-     *
-     * @return data source pool properties map
-     */
-    Map<String, DataSourcePoolProperties> getDataSourcePoolPropertiesMap();
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfiguration.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfiguration.java
index c96d9dce33c..83b132e3989 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfiguration.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfiguration.java
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePo
 import 
org.apache.shardingsphere.infra.metadata.database.resource.StorageResource;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNodeName;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitNodeMapUtils;
 
 import javax.sql.DataSource;
@@ -42,30 +43,34 @@ import java.util.stream.Collectors;
 @Getter
 public final class DataSourceGeneratedDatabaseConfiguration implements 
DatabaseConfiguration {
     
-    private final StorageResource storageResource;
-    
     private final Collection<RuleConfiguration> ruleConfigurations;
     
-    private final Map<String, DataSourcePoolProperties> 
dataSourcePoolPropertiesMap;
+    private final Map<String, StorageUnit> storageUnits;
+    
+    private final StorageResource storageResource;
     
     public DataSourceGeneratedDatabaseConfiguration(final Map<String, 
DataSourceConfiguration> dataSourceConfigs, final Collection<RuleConfiguration> 
ruleConfigs) {
         ruleConfigurations = ruleConfigs;
-        dataSourcePoolPropertiesMap = dataSourceConfigs.entrySet().stream()
+        Map<String, DataSourcePoolProperties> dataSourcePoolPropertiesMap = 
dataSourceConfigs.entrySet().stream()
                 .collect(Collectors.toMap(Entry::getKey, entry -> 
DataSourcePoolPropertiesCreator.create(entry.getValue()), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new));
         Map<String, StorageNode> storageUnitNodeMap = 
StorageUnitNodeMapUtils.fromDataSourcePoolProperties(dataSourcePoolPropertiesMap);
-        storageResource = new 
StorageResource(getStorageNodeDataSourceMap(storageUnitNodeMap), 
storageUnitNodeMap);
+        Map<StorageNodeName, DataSource> storageNodeDataSources = 
getStorageNodeDataSourceMap(dataSourcePoolPropertiesMap, storageUnitNodeMap);
+        storageUnits = new LinkedHashMap<>(dataSourceConfigs.size(), 1F);
+        for (Entry<String, DataSourceConfiguration> entry : 
dataSourceConfigs.entrySet()) {
+            String storageUnitName = entry.getKey();
+            StorageNode storageNode = storageUnitNodeMap.get(storageUnitName);
+            DataSource dataSource = 
storageNodeDataSources.get(storageNode.getName());
+            StorageUnit storageUnit = new StorageUnit(storageNode, 
dataSourcePoolPropertiesMap.get(storageUnitName), dataSource);
+            storageUnits.put(storageUnitName, storageUnit);
+        }
+        storageResource = new StorageResource(storageNodeDataSources, 
storageUnitNodeMap);
     }
     
-    private Map<StorageNodeName, DataSource> getStorageNodeDataSourceMap(final 
Map<String, StorageNode> storageUnitNodeMap) {
+    private Map<StorageNodeName, DataSource> getStorageNodeDataSourceMap(final 
Map<String, DataSourcePoolProperties> dataSourcePoolPropertiesMap, final 
Map<String, StorageNode> storageUnitNodeMap) {
         Map<StorageNodeName, DataSource> result = new 
LinkedHashMap<>(storageUnitNodeMap.size(), 1F);
         for (Entry<String, StorageNode> entry : storageUnitNodeMap.entrySet()) 
{
             result.computeIfAbsent(entry.getValue().getName(), key -> 
DataSourcePoolCreator.create(entry.getKey(), 
dataSourcePoolPropertiesMap.get(entry.getKey()), true, result.values()));
         }
         return result;
     }
-    
-    @Override
-    public Map<String, DataSource> getDataSources() {
-        return storageResource.getWrappedDataSources();
-    }
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfiguration.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfiguration.java
index 14aaf77972c..4da86afb39a 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfiguration.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfiguration.java
@@ -18,13 +18,15 @@
 package org.apache.shardingsphere.infra.config.database.impl;
 
 import lombok.Getter;
-import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.creator.DataSourcePoolPropertiesCreator;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.StorageResource;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNodeAggregator;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNodeName;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitNodeMapUtils;
 
 import javax.sql.DataSource;
@@ -37,29 +39,47 @@ import java.util.stream.Collectors;
 /**
  * Data source provided database configuration.
  */
-@RequiredArgsConstructor
 @Getter
 public final class DataSourceProvidedDatabaseConfiguration implements 
DatabaseConfiguration {
     
-    private final StorageResource storageResource;
-    
     private final Collection<RuleConfiguration> ruleConfigurations;
     
-    private final Map<String, DataSourcePoolProperties> 
dataSourcePoolPropertiesMap;
+    private final Map<String, StorageUnit> storageUnits;
+    
+    private final StorageResource storageResource;
     
     public DataSourceProvidedDatabaseConfiguration(final Map<String, 
DataSource> dataSources, final Collection<RuleConfiguration> ruleConfigs) {
         this.ruleConfigurations = ruleConfigs;
-        storageResource = new 
StorageResource(StorageNodeAggregator.aggregateDataSources(dataSources), 
StorageUnitNodeMapUtils.fromDataSources(dataSources));
-        dataSourcePoolPropertiesMap = 
createDataSourcePoolPropertiesMap(dataSources);
+        Map<String, StorageNode> storageUnitNodeMap = 
StorageUnitNodeMapUtils.fromDataSources(dataSources);
+        Map<StorageNodeName, DataSource> storageNodeDataSources = 
StorageNodeAggregator.aggregateDataSources(dataSources);
+        Map<String, DataSourcePoolProperties> dataSourcePoolPropertiesMap = 
createDataSourcePoolPropertiesMap(dataSources);
+        storageUnits = new LinkedHashMap<>(dataSourcePoolPropertiesMap.size(), 
1F);
+        for (Entry<String, DataSourcePoolProperties> entry : 
dataSourcePoolPropertiesMap.entrySet()) {
+            String storageUnitName = entry.getKey();
+            StorageNode storageNode = storageUnitNodeMap.get(storageUnitName);
+            StorageUnit storageUnit = new StorageUnit(storageNode, 
dataSourcePoolPropertiesMap.get(storageUnitName), 
storageNodeDataSources.get(storageNode.getName()));
+            storageUnits.put(storageUnitName, storageUnit);
+        }
+        storageResource = new StorageResource(storageNodeDataSources, 
storageUnitNodeMap);
+    }
+    
+    public DataSourceProvidedDatabaseConfiguration(final StorageResource 
storageResource,
+                                                   final 
Collection<RuleConfiguration> ruleConfigs, final Map<String, 
DataSourcePoolProperties> dataSourcePoolPropertiesMap) {
+        this.storageResource = storageResource;
+        this.ruleConfigurations = ruleConfigs;
+        Map<String, StorageNode> storageUnitNodeMap = 
StorageUnitNodeMapUtils.fromDataSourcePoolProperties(dataSourcePoolPropertiesMap);
+        Map<StorageNodeName, DataSource> storageNodeDataSources = 
storageResource.getDataSources();
+        storageUnits = new LinkedHashMap<>(dataSourcePoolPropertiesMap.size(), 
1F);
+        for (Entry<String, DataSourcePoolProperties> entry : 
dataSourcePoolPropertiesMap.entrySet()) {
+            String storageUnitName = entry.getKey();
+            StorageNode storageNode = storageUnitNodeMap.get(storageUnitName);
+            StorageUnit storageUnit = new StorageUnit(storageNode, 
dataSourcePoolPropertiesMap.get(storageUnitName), 
storageNodeDataSources.get(storageNode.getName()));
+            storageUnits.put(storageUnitName, storageUnit);
+        }
     }
     
     private Map<String, DataSourcePoolProperties> 
createDataSourcePoolPropertiesMap(final Map<String, DataSource> dataSources) {
         return dataSources.entrySet().stream().collect(Collectors
                 .toMap(Entry::getKey, entry -> 
DataSourcePoolPropertiesCreator.create(entry.getValue()), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new));
     }
-    
-    @Override
-    public Map<String, DataSource> getDataSources() {
-        return storageResource.getWrappedDataSources();
-    }
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
index 4fcdd47cfe9..1d8610dc8e7 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/database/DatabaseTypeEngine.java
@@ -58,7 +58,7 @@ public final class DatabaseTypeEngine {
         if (configuredDatabaseType.isPresent()) {
             return configuredDatabaseType.get();
         }
-        Collection<DataSource> enabledDataSources = 
DataSourceStateManager.getInstance().getEnabledDataSources(databaseName, 
databaseConfig);
+        Collection<DataSource> enabledDataSources = 
DataSourceStateManager.getInstance().getEnabledDataSources(databaseName, 
databaseConfig).values();
         return enabledDataSources.isEmpty() ? getDefaultStorageType() : 
getStorageType(enabledDataSources.iterator().next());
     }
     
@@ -86,7 +86,7 @@ public final class DatabaseTypeEngine {
     private static Map<String, DataSource> getEnabledDataSources(final 
Map<String, ? extends DatabaseConfiguration> databaseConfigs) {
         Map<String, DataSource> result = new LinkedHashMap<>();
         for (Entry<String, ? extends DatabaseConfiguration> entry : 
databaseConfigs.entrySet()) {
-            
result.putAll(DataSourceStateManager.getInstance().getEnabledDataSources(entry.getKey(),
 entry.getValue().getDataSources()));
+            
result.putAll(DataSourceStateManager.getInstance().getEnabledDataSources(entry.getKey(),
 entry.getValue()));
         }
         return result;
     }
@@ -99,8 +99,8 @@ public final class DatabaseTypeEngine {
      * @return storage types
      */
     public static Map<String, DatabaseType> getStorageTypes(final String 
databaseName, final DatabaseConfiguration databaseConfig) {
-        Map<String, DatabaseType> result = new 
LinkedHashMap<>(databaseConfig.getDataSources().size(), 1F);
-        Map<String, DataSource> enabledDataSources = 
DataSourceStateManager.getInstance().getEnabledDataSources(databaseName, 
databaseConfig.getDataSources());
+        Map<String, DatabaseType> result = new 
LinkedHashMap<>(databaseConfig.getStorageUnits().size(), 1F);
+        Map<String, DataSource> enabledDataSources = 
DataSourceStateManager.getInstance().getEnabledDataSources(databaseName, 
databaseConfig);
         for (Entry<String, DataSource> entry : enabledDataSources.entrySet()) {
             result.put(entry.getKey(), getStorageType(entry.getValue()));
         }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index 941f270b12e..ed608937ac1 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -24,10 +24,10 @@ import 
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
-import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.StorageResource;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
@@ -90,7 +90,7 @@ public final class ShardingSphereDatabase {
                                                 final DatabaseConfiguration 
databaseConfig, final ConfigurationProperties props, final InstanceContext 
instanceContext) throws SQLException {
         Collection<ShardingSphereRule> databaseRules = 
DatabaseRulesBuilder.build(name, databaseConfig, instanceContext);
         Map<String, ShardingSphereSchema> schemas = new 
ConcurrentHashMap<>(GenericSchemaBuilder
-                .build(new GenericSchemaBuilderMaterial(protocolType, 
storageTypes, DataSourceStateManager.getInstance().getEnabledDataSources(name, 
databaseConfig.getDataSources()), databaseRules,
+                .build(new GenericSchemaBuilderMaterial(protocolType, 
storageTypes, DataSourceStateManager.getInstance().getEnabledDataSources(name, 
databaseConfig), databaseRules,
                         props, new 
DatabaseTypeRegistry(protocolType).getDefaultSchemaName(name))));
         SystemSchemaBuilder.build(name, protocolType, 
props).forEach(schemas::putIfAbsent);
         return create(name, protocolType, databaseConfig, databaseRules, 
schemas);
@@ -121,13 +121,13 @@ public final class ShardingSphereDatabase {
      */
     public static ShardingSphereDatabase create(final String name, final 
DatabaseType protocolType, final DatabaseConfiguration databaseConfig,
                                                 final 
Collection<ShardingSphereRule> rules, final Map<String, ShardingSphereSchema> 
schemas) {
-        ResourceMetaData resourceMetaData = 
createResourceMetaData(databaseConfig.getStorageResource(), 
databaseConfig.getDataSourcePoolPropertiesMap());
+        ResourceMetaData resourceMetaData = 
createResourceMetaData(databaseConfig.getStorageResource(), 
databaseConfig.getStorageUnits());
         RuleMetaData ruleMetaData = new RuleMetaData(rules);
         return new ShardingSphereDatabase(name, protocolType, 
resourceMetaData, ruleMetaData, schemas);
     }
     
-    private static ResourceMetaData createResourceMetaData(final 
StorageResource storageResource, final Map<String, DataSourcePoolProperties> 
propsMap) {
-        return new ResourceMetaData(storageResource.getDataSources(), 
storageResource.getStorageUnitNodeMap(), propsMap);
+    private static ResourceMetaData createResourceMetaData(final 
StorageResource storageResource, final Map<String, StorageUnit> storageUnits) {
+        return new ResourceMetaData(storageResource.getDataSources(), 
storageUnits);
     }
     
     /**
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
index bd048bd62b7..0b8871ec912 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.infra.metadata.database.resource;
 
 import lombok.Getter;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.creator.DataSourcePoolPropertiesCreator;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
@@ -37,6 +38,7 @@ import java.util.stream.Collectors;
 /**
  * Resource meta data.
  */
+@RequiredArgsConstructor
 @Getter
 public final class ResourceMetaData {
     
@@ -55,14 +57,6 @@ public final class ResourceMetaData {
         }
     }
     
-    public ResourceMetaData(final Map<StorageNodeName, DataSource> 
dataSources, final Map<String, StorageNode> storageNodes, final Map<String, 
DataSourcePoolProperties> dataSourcePoolPropsMap) {
-        this.dataSources = dataSources;
-        storageUnits = new LinkedHashMap<>();
-        for (Entry<String, StorageNode> entry : storageNodes.entrySet()) {
-            storageUnits.put(entry.getKey(), new StorageUnit(entry.getValue(), 
dataSourcePoolPropsMap.get(entry.getKey()), 
dataSources.get(entry.getValue().getName())));
-        }
-    }
-    
     /**
      * Get all instance data source names.
      *
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResource.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResource.java
index 8c7686ae191..742bb9c7fbe 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResource.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/StorageResource.java
@@ -18,42 +18,21 @@
 package org.apache.shardingsphere.infra.metadata.database.resource;
 
 import lombok.Getter;
-import 
org.apache.shardingsphere.infra.datasource.pool.CatalogSwitchableDataSource;
+import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNodeName;
 
 import javax.sql.DataSource;
-import java.util.LinkedHashMap;
 import java.util.Map;
-import java.util.Map.Entry;
 
 /**
  * Storage resource.
  */
+@RequiredArgsConstructor
 @Getter
 public final class StorageResource {
     
     private final Map<StorageNodeName, DataSource> dataSources;
     
     private final Map<String, StorageNode> storageUnitNodeMap;
-    
-    private final Map<String, DataSource> wrappedDataSources;
-    
-    public StorageResource(final Map<StorageNodeName, DataSource> dataSources, 
final Map<String, StorageNode> storageUnitNodeMap) {
-        this.dataSources = dataSources;
-        this.storageUnitNodeMap = storageUnitNodeMap;
-        wrappedDataSources = createWrappedDataSources();
-    }
-    
-    private Map<String, DataSource> createWrappedDataSources() {
-        Map<String, DataSource> result = new 
LinkedHashMap<>(storageUnitNodeMap.size(), 1F);
-        for (Entry<String, StorageNode> entry : storageUnitNodeMap.entrySet()) 
{
-            StorageNode storageNode = entry.getValue();
-            DataSource dataSource = dataSources.get(storageNode.getName());
-            if (null != dataSource) {
-                result.put(entry.getKey(), new 
CatalogSwitchableDataSource(dataSource, storageNode.getCatalog(), 
storageNode.getUrl()));
-            }
-        }
-        return result;
-    }
 }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
index f446c5e26b8..18c8ca2dd4f 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/rule/builder/database/DatabaseRulesBuilder.java
@@ -59,10 +59,11 @@ public final class DatabaseRulesBuilder {
         for (Entry<RuleConfiguration, DatabaseRuleBuilder> entry : 
getRuleBuilderMap(databaseConfig).entrySet()) {
             RuleConfigurationChecker configChecker = 
OrderedSPILoader.getServicesByClass(
                     RuleConfigurationChecker.class, 
Collections.singleton(entry.getKey().getClass())).get(entry.getKey().getClass());
+            Map<String, DataSource> dataSources = 
databaseConfig.getStorageUnits().entrySet().stream().collect(Collectors.toMap(Entry::getKey,
 storageUnit -> storageUnit.getValue().getDataSource()));
             if (null != configChecker) {
-                configChecker.check(databaseName, entry.getKey(), 
databaseConfig.getDataSources(), result);
+                configChecker.check(databaseName, entry.getKey(), dataSources, 
result);
             }
-            result.add(entry.getValue().build(entry.getKey(), databaseName, 
databaseConfig.getDataSources(), result, instanceContext));
+            result.add(entry.getValue().build(entry.getKey(), databaseName, 
dataSources, result, instanceContext));
         }
         return result;
     }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/state/datasource/DataSourceStateManager.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/state/datasource/DataSourceStateManager.java
index 48d7a4c861e..b497f0de0cc 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/state/datasource/DataSourceStateManager.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/state/datasource/DataSourceStateManager.java
@@ -21,18 +21,19 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
-import 
org.apache.shardingsphere.infra.state.datasource.exception.UnavailableDataSourceException;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
+import 
org.apache.shardingsphere.infra.state.datasource.exception.UnavailableDataSourceException;
 
 import javax.sql.DataSource;
 import java.sql.Connection;
 import java.sql.SQLException;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
 
 /**
  * Data source state manager.
@@ -62,14 +63,14 @@ public final class DataSourceStateManager {
      * Set data source states when bootstrap.
      *
      * @param databaseName database name
-     * @param dataSources data sources
+     * @param storageUnits storage units
      * @param storageDataSourceStates storage node data source state
      * @param forceStart whether to force start
      */
-    public void initStates(final String databaseName, final Map<String, 
DataSource> dataSources, final Map<String, DataSourceState> 
storageDataSourceStates, final boolean forceStart) {
+    public void initStates(final String databaseName, final Map<String, 
StorageUnit> storageUnits, final Map<String, DataSourceState> 
storageDataSourceStates, final boolean forceStart) {
         this.forceStart = forceStart;
         if (initialized.compareAndSet(false, true)) {
-            dataSources.forEach((key, value) -> initState(databaseName, 
storageDataSourceStates, key, value));
+            storageUnits.forEach((key, value) -> initState(databaseName, 
storageDataSourceStates, key, value.getDataSource()));
         }
     }
     
@@ -98,8 +99,10 @@ public final class DataSourceStateManager {
      * @param databaseConfig database config
      * @return enabled data sources
      */
-    public Collection<DataSource> getEnabledDataSources(final String 
databaseName, final DatabaseConfiguration databaseConfig) {
-        return databaseConfig.getDataSources().isEmpty() ? 
Collections.emptyList() : getEnabledDataSources(databaseName, 
databaseConfig.getDataSources()).values();
+    public Map<String, DataSource> getEnabledDataSources(final String 
databaseName, final DatabaseConfiguration databaseConfig) {
+        Map<String, DataSource> dataSources = 
databaseConfig.getStorageUnits().entrySet().stream()
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new));
+        return getEnabledDataSources(databaseName, dataSources);
     }
     
     /**
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfigurationTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfigurationTest.java
index 696d8c75aae..36fa57f9d5d 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfigurationTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceGeneratedDatabaseConfigurationTest.java
@@ -42,7 +42,7 @@ class DataSourceGeneratedDatabaseConfigurationTest {
     @Test
     void assertGetDataSources() {
         DataSourceGeneratedDatabaseConfiguration databaseConfig = 
createDataSourceGeneratedDatabaseConfiguration();
-        DataSource dataSource = 
databaseConfig.getDataSources().get("normal_db");
+        DataSource dataSource = 
databaseConfig.getStorageUnits().get("normal_db").getDataSource();
         assertTrue(dataSource instanceof CatalogSwitchableDataSource);
         assertTrue(((CatalogSwitchableDataSource) dataSource).getDataSource() 
instanceof HikariDataSource);
     }
@@ -59,7 +59,7 @@ class DataSourceGeneratedDatabaseConfigurationTest {
     @Test
     void assertGetStorageUnits() {
         DataSourceGeneratedDatabaseConfiguration databaseConfig = 
createDataSourceGeneratedDatabaseConfiguration();
-        DataSource dataSource = 
databaseConfig.getDataSources().get("normal_db");
+        DataSource dataSource = 
databaseConfig.getStorageUnits().get("normal_db").getDataSource();
         assertTrue(dataSource instanceof CatalogSwitchableDataSource);
         assertTrue(((CatalogSwitchableDataSource) dataSource).getDataSource() 
instanceof HikariDataSource);
     }
@@ -74,7 +74,7 @@ class DataSourceGeneratedDatabaseConfigurationTest {
     @Test
     void assertGetDataSourcePoolProperties() {
         DataSourceGeneratedDatabaseConfiguration databaseConfig = 
createDataSourceGeneratedDatabaseConfiguration();
-        DataSourcePoolProperties props = 
databaseConfig.getDataSourcePoolPropertiesMap().get("normal_db");
+        DataSourcePoolProperties props = 
databaseConfig.getStorageUnits().get("normal_db").getDataSourcePoolProperties();
         Map<String, Object> poolStandardProps = 
props.getPoolPropertySynonyms().getStandardProperties();
         assertThat(poolStandardProps.size(), is(6));
         assertThat(poolStandardProps.get("connectionTimeoutMilliseconds"), 
is(2000L));
diff --git 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfigurationTest.java
 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfigurationTest.java
index 796b6958975..241d1c56248 100644
--- 
a/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfigurationTest.java
+++ 
b/infra/common/src/test/java/org/apache/shardingsphere/infra/config/database/impl/DataSourceProvidedDatabaseConfigurationTest.java
@@ -37,7 +37,7 @@ class DataSourceProvidedDatabaseConfigurationTest {
     @Test
     void assertGetDataSources() {
         DataSourceProvidedDatabaseConfiguration databaseConfig = 
createDataSourceProvidedDatabaseConfiguration();
-        DataSource dataSource = databaseConfig.getDataSources().get("foo_ds");
+        DataSource dataSource = 
databaseConfig.getStorageUnits().get("foo_ds").getDataSource();
         assertTrue(dataSource instanceof CatalogSwitchableDataSource);
         assertTrue(((CatalogSwitchableDataSource) dataSource).getDataSource() 
instanceof MockedDataSource);
     }
@@ -54,7 +54,7 @@ class DataSourceProvidedDatabaseConfigurationTest {
     @Test
     void assertGetStorageUnits() {
         DataSourceProvidedDatabaseConfiguration databaseConfig = 
createDataSourceProvidedDatabaseConfiguration();
-        DataSource dataSource = databaseConfig.getDataSources().get("foo_ds");
+        DataSource dataSource = 
databaseConfig.getStorageUnits().get("foo_ds").getDataSource();
         assertTrue(dataSource instanceof CatalogSwitchableDataSource);
         assertTrue(((CatalogSwitchableDataSource) dataSource).getDataSource() 
instanceof MockedDataSource);
     }
@@ -69,7 +69,7 @@ class DataSourceProvidedDatabaseConfigurationTest {
     @Test
     void assertGetDataSourcePoolProperties() {
         DataSourceProvidedDatabaseConfiguration databaseConfig = 
createDataSourceProvidedDatabaseConfiguration();
-        DataSourcePoolProperties props = 
databaseConfig.getDataSourcePoolPropertiesMap().get("foo_ds");
+        DataSourcePoolProperties props = 
databaseConfig.getStorageUnits().get("foo_ds").getDataSourcePoolProperties();
         Map<String, Object> poolStandardProps = 
props.getPoolPropertySynonyms().getStandardProperties();
         assertThat(poolStandardProps.size(), is(0));
         Map<String, Object> connStandardProps = 
props.getConnectionPropertySynonyms().getStandardProperties();
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
index af473642c20..a336f16bde5 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
@@ -80,7 +80,7 @@ public final class ExternalMetaDataFactory {
         Map<String, ShardingSphereDatabase> result = new 
HashMap<>(databaseConfigMap.size(), 1F);
         for (Entry<String, DatabaseConfiguration> entry : 
databaseConfigMap.entrySet()) {
             String databaseName = entry.getKey();
-            if (!entry.getValue().getDataSources().isEmpty() || 
!systemDatabase.getSystemSchemas().contains(databaseName)) {
+            if (!entry.getValue().getStorageUnits().isEmpty() || 
!systemDatabase.getSystemSchemas().contains(databaseName)) {
                 Map<String, DatabaseType> storageTypes = 
DatabaseTypeEngine.getStorageTypes(entry.getKey(), entry.getValue());
                 result.put(databaseName.toLowerCase(), 
ShardingSphereDatabase.create(databaseName, protocolType, storageTypes, 
entry.getValue(), props, instanceContext));
             }
@@ -92,7 +92,7 @@ public final class ExternalMetaDataFactory {
                                                                              
final SystemDatabase systemDatabase, final ConfigurationProperties props) {
         Map<String, ShardingSphereDatabase> result = new 
HashMap<>(systemDatabase.getSystemDatabaseSchemaMap().size(), 1F);
         for (String each : 
systemDatabase.getSystemDatabaseSchemaMap().keySet()) {
-            if (!databaseConfigMap.containsKey(each) || 
databaseConfigMap.get(each).getDataSources().isEmpty()) {
+            if (!databaseConfigMap.containsKey(each) || 
databaseConfigMap.get(each).getStorageUnits().isEmpty()) {
                 result.put(each.toLowerCase(), 
ShardingSphereDatabase.create(each, protocolType, props));
             }
         }
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
index 9b5a9a104e0..58a8f3e780e 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
@@ -73,7 +73,7 @@ public final class InternalMetaDataFactory {
         Map<String, ShardingSphereDatabase> result = new 
ConcurrentHashMap<>(databaseConfigMap.size(), 1F);
         for (Entry<String, DatabaseConfiguration> entry : 
databaseConfigMap.entrySet()) {
             String databaseName = entry.getKey();
-            if (entry.getValue().getDataSources().isEmpty()) {
+            if (entry.getValue().getStorageUnits().isEmpty()) {
                 result.put(databaseName.toLowerCase(), 
ShardingSphereDatabase.create(databaseName, protocolType, props));
             } else {
                 result.put(databaseName.toLowerCase(), create(databaseName, 
persistService, entry.getValue(), props, instanceContext));
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/NewInternalMetaDataFactory.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/NewInternalMetaDataFactory.java
index 02e7931f585..34c43929adc 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/NewInternalMetaDataFactory.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/NewInternalMetaDataFactory.java
@@ -74,7 +74,7 @@ public final class NewInternalMetaDataFactory {
         Map<String, ShardingSphereDatabase> result = new 
ConcurrentHashMap<>(databaseConfigMap.size(), 1F);
         for (Entry<String, DatabaseConfiguration> entry : 
databaseConfigMap.entrySet()) {
             String databaseName = entry.getKey();
-            if (entry.getValue().getDataSources().isEmpty()) {
+            if (entry.getValue().getStorageUnits().isEmpty()) {
                 result.put(databaseName.toLowerCase(), 
ShardingSphereDatabase.create(databaseName, protocolType, props));
             } else {
                 result.put(databaseName.toLowerCase(), create(databaseName, 
persistService, entry.getValue(), props, instanceContext));
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
index 5274f108d9f..6411201a0e4 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/MetaDataPersistService.java
@@ -114,10 +114,11 @@ public final class MetaDataPersistService implements 
MetaDataBasedPersistService
     }
     
     private Map<String, DataSourcePoolProperties> 
getDataSourcePoolPropertiesMap(final DatabaseConfiguration databaseConfigs) {
-        if (!databaseConfigs.getDataSources().isEmpty() && 
databaseConfigs.getDataSourcePoolPropertiesMap().isEmpty()) {
+        if (!databaseConfigs.getStorageUnits().isEmpty() && 
databaseConfigs.getStorageUnits().isEmpty()) {
             return 
getDataSourcePoolPropertiesMap(databaseConfigs.getStorageResource().getDataSources());
         }
-        return databaseConfigs.getDataSourcePoolPropertiesMap();
+        return databaseConfigs.getStorageUnits().entrySet().stream()
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new));
     }
     
     private Map<String, DataSourcePoolProperties> 
getDataSourcePoolPropertiesMap(final Map<StorageNodeName, DataSource> 
storageNodeDataSources) {
@@ -131,7 +132,7 @@ public final class MetaDataPersistService implements 
MetaDataBasedPersistService
     @Override
     public Map<String, DataSourceConfiguration> getEffectiveDataSources(final 
String databaseName, final Map<String, ? extends DatabaseConfiguration> 
databaseConfigs) {
         Map<String, DataSourcePoolProperties> propsMap = 
dataSourceUnitService.load(databaseName);
-        if (databaseConfigs.containsKey(databaseName) && 
!databaseConfigs.get(databaseName).getDataSources().isEmpty()) {
+        if (databaseConfigs.containsKey(databaseName) && 
!databaseConfigs.get(databaseName).getStorageUnits().isEmpty()) {
             
databaseConfigs.get(databaseName).getStorageResource().getDataSources().values().forEach(each
 -> new DataSourcePoolDestroyer(each).asyncDestroy());
         }
         return 
propsMap.entrySet().stream().collect(Collectors.toMap(Entry::getKey,
diff --git 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
index c94ae23f4c0..98b50b1b76f 100644
--- 
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
+++ 
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/NewMetaDataPersistService.java
@@ -23,9 +23,8 @@ import 
org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.rule.decorator.RuleConfigurationDecorator;
 import 
org.apache.shardingsphere.infra.datasource.pool.config.DataSourceConfiguration;
 import 
org.apache.shardingsphere.infra.datasource.pool.destroyer.DataSourcePoolDestroyer;
-import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.creator.DataSourcePoolPropertiesCreator;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNodeName;
+import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.metadata.persist.data.ShardingSphereDataPersistService;
@@ -120,18 +119,8 @@ public final class NewMetaDataPersistService implements 
MetaDataBasedPersistServ
     }
     
     private Map<String, DataSourcePoolProperties> 
getDataSourcePoolPropertiesMap(final DatabaseConfiguration databaseConfigs) {
-        if (!databaseConfigs.getDataSources().isEmpty() && 
databaseConfigs.getDataSourcePoolPropertiesMap().isEmpty()) {
-            return 
getDataSourcePoolPropertiesMap(databaseConfigs.getStorageResource().getDataSources());
-        }
-        return databaseConfigs.getDataSourcePoolPropertiesMap();
-    }
-    
-    private Map<String, DataSourcePoolProperties> 
getDataSourcePoolPropertiesMap(final Map<StorageNodeName, DataSource> 
storageNodeDataSources) {
-        Map<String, DataSourcePoolProperties> result = new 
LinkedHashMap<>(storageNodeDataSources.size(), 1F);
-        for (Entry<StorageNodeName, DataSource> entry : 
storageNodeDataSources.entrySet()) {
-            result.put(entry.getKey().getName(), 
DataSourcePoolPropertiesCreator.create(entry.getValue()));
-        }
-        return result;
+        return databaseConfigs.getStorageUnits().entrySet().stream()
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new));
     }
     
     /**
@@ -144,7 +133,7 @@ public final class NewMetaDataPersistService implements 
MetaDataBasedPersistServ
     @Override
     public Map<String, DataSourceConfiguration> getEffectiveDataSources(final 
String databaseName, final Map<String, ? extends DatabaseConfiguration> 
databaseConfigs) {
         Map<String, DataSourcePoolProperties> propsMap = 
dataSourceUnitService.load(databaseName);
-        if (databaseConfigs.containsKey(databaseName) && 
!databaseConfigs.get(databaseName).getDataSources().isEmpty()) {
+        if (databaseConfigs.containsKey(databaseName) && 
!databaseConfigs.get(databaseName).getStorageUnits().isEmpty()) {
             
databaseConfigs.get(databaseName).getStorageResource().getDataSources().values().forEach(each
 -> new DataSourcePoolDestroyer(each).asyncDestroy());
         }
         return 
propsMap.entrySet().stream().collect(Collectors.toMap(Entry::getKey,
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManagerBuilderParameter.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManagerBuilderParameter.java
index c849d10d02e..d362a7a498f 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManagerBuilderParameter.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManagerBuilderParameter.java
@@ -61,7 +61,7 @@ public final class ContextManagerBuilderParameter {
      */
     public boolean isEmpty() {
         return globalRuleConfigs.isEmpty() && props.isEmpty()
-                && databaseConfigs.entrySet().stream().allMatch(entry -> 
entry.getValue().getDataSources().isEmpty() && 
entry.getValue().getRuleConfigurations().isEmpty());
+                && databaseConfigs.entrySet().stream().allMatch(entry -> 
entry.getValue().getStorageUnits().isEmpty() && 
entry.getValue().getRuleConfigurations().isEmpty());
     }
     
     /**
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
index 2e38aeafa27..389e43a46d9 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
@@ -279,11 +279,9 @@ public final class ConfigurationContextManager {
      */
     public Map<String, ShardingSphereDatabase> renewDatabase(final 
ShardingSphereDatabase database, final SwitchingResource resource) {
         Map<StorageNodeName, DataSource> newStorageNodes = 
getNewStorageNodes(database.getResourceMetaData().getDataSources(), resource);
-        Map<String, StorageNode> newStorageUnitNodeMap = 
getNewStorageUnitNodes(database.getResourceMetaData().getStorageUnits(), 
resource);
-        Map<String, DataSourcePoolProperties> propsMap = 
database.getResourceMetaData().getStorageUnits().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
currentValue, LinkedHashMap::new));
+        Map<String, StorageUnit> newStorageUnits = 
getNewStorageUnits(database.getResourceMetaData().getStorageUnits(), resource);
         return Collections.singletonMap(database.getName().toLowerCase(), new 
ShardingSphereDatabase(database.getName(), database.getProtocolType(),
-                new ResourceMetaData(newStorageNodes, newStorageUnitNodeMap, 
propsMap), database.getRuleMetaData(), database.getSchemas()));
+                new ResourceMetaData(newStorageNodes, newStorageUnits), 
database.getRuleMetaData(), database.getSchemas()));
     }
     
     private Map<StorageNodeName, DataSource> getNewStorageNodes(final 
Map<StorageNodeName, DataSource> currentStorageNodes, final SwitchingResource 
resource) {
@@ -296,11 +294,11 @@ public final class ConfigurationContextManager {
         return result;
     }
     
-    private Map<String, StorageNode> getNewStorageUnitNodes(final Map<String, 
StorageUnit> currentStorageUnits, final SwitchingResource resource) {
-        Map<String, StorageNode> result = new 
LinkedHashMap<>(currentStorageUnits.size(), 1F);
+    private Map<String, StorageUnit> getNewStorageUnits(final Map<String, 
StorageUnit> currentStorageUnits, final SwitchingResource resource) {
+        Map<String, StorageUnit> result = new 
LinkedHashMap<>(currentStorageUnits.size(), 1F);
         for (Entry<String, StorageUnit> entry : 
currentStorageUnits.entrySet()) {
             if 
(!resource.getStaleStorageResource().getStorageUnitNodeMap().containsKey(entry.getKey()))
 {
-                result.put(entry.getKey(), entry.getValue().getStorageNode());
+                result.put(entry.getKey(), entry.getValue());
             }
         }
         return result;
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index 99ebdec90a7..b013a103fd9 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -124,8 +124,8 @@ public final class MetaDataContextsFactory {
     private static void checkDataSourceStates(final Map<String, 
DatabaseConfiguration> databaseConfigs, final Map<String, 
StorageNodeDataSource> storageNodes, final boolean force) {
         Map<String, DataSourceState> storageDataSourceStates = 
getStorageDataSourceStates(storageNodes);
         databaseConfigs.forEach((key, value) -> {
-            if (!value.getDataSources().isEmpty()) {
-                DataSourceStateManager.getInstance().initStates(key, 
value.getDataSources(), storageDataSourceStates, force);
+            if (!value.getStorageUnits().isEmpty()) {
+                DataSourceStateManager.getInstance().initStates(key, 
value.getStorageUnits(), storageDataSourceStates, force);
             }
         });
     }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
index f100b404727..33c37307072 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
@@ -126,8 +126,8 @@ public final class NewMetaDataContextsFactory {
     private static void checkDataSourceStates(final Map<String, 
DatabaseConfiguration> databaseConfigs, final Map<String, 
StorageNodeDataSource> storageNodes, final boolean force) {
         Map<String, DataSourceState> storageDataSourceStates = 
getStorageDataSourceStates(storageNodes);
         databaseConfigs.forEach((key, value) -> {
-            if (!value.getDataSources().isEmpty()) {
-                DataSourceStateManager.getInstance().initStates(key, 
value.getDataSources(), storageDataSourceStates, force);
+            if (!value.getStorageUnits().isEmpty()) {
+                DataSourceStateManager.getInstance().initStates(key, 
value.getStorageUnits(), storageDataSourceStates, force);
             }
         });
     }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerBuilderParameterTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerBuilderParameterTest.java
index cb61b4262de..adf5a5d7d50 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerBuilderParameterTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerBuilderParameterTest.java
@@ -73,9 +73,9 @@ class ContextManagerBuilderParameterTest {
         assertFalse(new ContextManagerBuilderParameter(null, 
mockDatabaseConfigurations(true, false), Collections.emptyMap(), 
Collections.emptyList(), new Properties(), null, null, false).isEmpty());
     }
     
-    private Map<String, DatabaseConfiguration> 
mockDatabaseConfigurations(final boolean isEmptyDataSources, final boolean 
isEmptyRuleConfigs) {
+    private Map<String, DatabaseConfiguration> 
mockDatabaseConfigurations(final boolean isEmptyStorageUnits, final boolean 
isEmptyRuleConfigs) {
         DatabaseConfiguration databaseConfig = 
mock(DatabaseConfiguration.class, RETURNS_DEEP_STUBS);
-        
when(databaseConfig.getDataSources().isEmpty()).thenReturn(isEmptyDataSources);
+        
when(databaseConfig.getStorageUnits().isEmpty()).thenReturn(isEmptyStorageUnits);
         
when(databaseConfig.getRuleConfigurations().isEmpty()).thenReturn(isEmptyRuleConfigs);
         return Collections.singletonMap("foo_ds", databaseConfig);
     }
diff --git 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
index bd624913c7b..aa641eadc83 100644
--- 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
+++ 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
@@ -33,7 +33,6 @@ import 
org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
@@ -83,6 +82,7 @@ import java.util.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Properties;
+import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -118,11 +118,12 @@ public abstract class SQLRewriterIT {
         YamlRootConfiguration rootConfig = createRootConfiguration(testParams);
         DatabaseConfiguration databaseConfig = new 
DataSourceProvidedDatabaseConfiguration(
                 new 
YamlDataSourceConfigurationSwapper().swapToDataSources(rootConfig.getDataSources()),
 new 
YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(rootConfig.getRules()));
-        mockDataSource(databaseConfig.getDataSources());
+        Map<String, DataSource> dataSources = 
databaseConfig.getStorageUnits().entrySet().stream()
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new));
+        mockDataSource(dataSources);
         DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, testParams.getDatabaseType());
-        Map<String, StorageUnit> storageUnits = 
createStorageUnits(databaseConfig, databaseType);
         ResourceMetaData resourceMetaData = mock(ResourceMetaData.class, 
RETURNS_DEEP_STUBS);
-        when(resourceMetaData.getStorageUnits()).thenReturn(storageUnits);
+        
when(resourceMetaData.getStorageUnits()).thenReturn(databaseConfig.getStorageUnits());
         String schemaName = new 
DatabaseTypeRegistry(databaseType).getDefaultSchemaName(DefaultDatabase.LOGIC_NAME);
         SQLStatementParserEngine sqlStatementParserEngine = new 
SQLStatementParserEngine(TypedSPILoader.getService(DatabaseType.class, 
testParams.getDatabaseType()),
                 sqlParserRule.getSqlStatementCache(), 
sqlParserRule.getParseTreeCache(), sqlParserRule.isSqlCommentParseEnabled());
@@ -170,16 +171,6 @@ public abstract class SQLRewriterIT {
         return result;
     }
     
-    private Map<String, StorageUnit> createStorageUnits(final 
DatabaseConfiguration databaseConfig, final DatabaseType databaseType) {
-        Map<String, StorageUnit> result = new 
LinkedHashMap<>(databaseConfig.getDataSources().size(), 1F);
-        for (Entry<String, DataSource> entry : 
databaseConfig.getDataSources().entrySet()) {
-            StorageUnit storageUnit = mock(StorageUnit.class, 
RETURNS_DEEP_STUBS);
-            when(storageUnit.getStorageType()).thenReturn(databaseType);
-            result.put(entry.getKey(), storageUnit);
-        }
-        return result;
-    }
-    
     private CursorStatementContext createCursorDefinition(final String 
schemaName, final ShardingSphereMetaData metaData, final 
SQLStatementParserEngine sqlStatementParserEngine) {
         SQLStatement sqlStatement = sqlStatementParserEngine.parse("CURSOR 
t_account_cursor FOR SELECT * FROM t_account WHERE account_id = 100", false);
         return (CursorStatementContext) new SQLBindEngine(metaData, 
schemaName).bind(sqlStatement, Collections.emptyList());

Reply via email to