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

duanzhengqiang 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 981cd191d4b Refactor usages of StorageUnitMetaData.dataSources (#28160)
981cd191d4b is described below

commit 981cd191d4b1dcfcc0edbb62195e301842e4612b
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Aug 18 18:15:27 2023 +0800

    Refactor usages of StorageUnitMetaData.dataSources (#28160)
---
 .../data/ShardingStatisticsTableCollector.java     | 12 ++++----
 .../ShardingSphereTableDataCollectorUtils.java     |  8 ++---
 .../route/engine/impl/PartialSQLRouteExecutor.java | 17 ++++-------
 .../engine/impl/PartialSQLRouteExecutorTest.java   | 10 +++----
 .../transaction/rule/TransactionRule.java          |  2 +-
 .../mode/manager/ContextManager.java               |  4 +--
 .../ProcessListChangedSubscriberTest.java          |  4 +--
 .../jdbc/datasource/JDBCBackendDataSource.java     |  2 +-
 .../executor/AbstractDatabaseMetaDataExecutor.java |  9 +++---
 .../ral/queryable/ExportStorageNodesExecutor.java  |  8 ++---
 .../unit/AlterStorageUnitBackendHandler.java       |  9 +++---
 .../unit/UnregisterStorageUnitBackendHandler.java  | 10 +++----
 .../rql/storage/unit/ShowStorageUnitExecutor.java  |  9 +++---
 .../jdbc/datasource/JDBCBackendDataSourceTest.java |  5 +++-
 .../queryable/ExportStorageNodesExecutorTest.java  | 35 +++++++++++++---------
 .../unit/AlterStorageUnitBackendHandlerTest.java   |  9 ++++--
 .../UnregisterStorageUnitBackendHandlerTest.java   | 19 ++++++++----
 17 files changed, 94 insertions(+), 78 deletions(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java
index 349e989d36a..3f92dcec779 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.storage.StorageUnit;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereRowData;
 import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereTableData;
@@ -31,7 +32,6 @@ import 
org.apache.shardingsphere.sharding.metadata.data.dialect.DialectShardingS
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import org.apache.shardingsphere.sharding.rule.TableRule;
 
-import javax.sql.DataSource;
 import java.math.BigDecimal;
 import java.sql.Connection;
 import java.sql.SQLException;
@@ -81,20 +81,18 @@ public final class ShardingStatisticsTableCollector 
implements ShardingSphereSta
                 row.add(each.getLogicTable());
                 row.add(dataNode.getDataSourceName());
                 row.add(dataNode.getTableName());
-                
addTableRowsAndDataLength(shardingSphereDatabase.getResourceMetaData().getStorageTypes(),
-                        
shardingSphereDatabase.getResourceMetaData().getStorageUnitMetaData().getDataSources(),
 dataNode, row);
+                
addTableRowsAndDataLength(shardingSphereDatabase.getResourceMetaData().getStorageUnitMetaData().getStorageUnits(),
 dataNode, row);
                 tableData.getRows().add(new ShardingSphereRowData(row));
             }
         }
     }
     
-    private void addTableRowsAndDataLength(final Map<String, DatabaseType> 
databaseTypes, final Map<String, DataSource> dataSources,
-                                           final DataNode dataNode, final 
List<Object> row) throws SQLException {
-        DatabaseType databaseType = 
databaseTypes.get(dataNode.getDataSourceName());
+    private void addTableRowsAndDataLength(final Map<String, StorageUnit> 
storageUnits, final DataNode dataNode, final List<Object> row) throws 
SQLException {
+        DatabaseType databaseType = 
storageUnits.get(dataNode.getDataSourceName()).getStorageType();
         Optional<DialectShardingStatisticsTableCollector> dialectCollector = 
DatabaseTypedSPILoader.findService(DialectShardingStatisticsTableCollector.class,
 databaseType);
         boolean isAppended = false;
         if (dialectCollector.isPresent()) {
-            try (Connection connection = 
dataSources.get(dataNode.getDataSourceName()).getConnection()) {
+            try (Connection connection = 
storageUnits.get(dataNode.getDataSourceName()).getDataSource().getConnection()) 
{
                 isAppended = dialectCollector.get().appendRow(connection, 
dataNode, row);
             }
         }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
index b3413d095fa..96849f50ac9 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
@@ -19,12 +19,12 @@ package 
org.apache.shardingsphere.infra.metadata.statistics.collector;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereRowData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.storage.StorageUnit;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereRowData;
 
-import javax.sql.DataSource;
 import java.sql.Connection;
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -57,9 +57,9 @@ public final class ShardingSphereTableDataCollectorUtils {
             return Collections.emptyList();
         }
         Collection<ShardingSphereRowData> result = new LinkedList<>();
-        for (DataSource each : 
shardingSphereDatabase.getResourceMetaData().getStorageUnitMetaData().getDataSources().values())
 {
+        for (StorageUnit each : 
shardingSphereDatabase.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().values())
 {
             try (
-                    Connection connection = each.getConnection();
+                    Connection connection = 
each.getDataSource().getConnection();
                     Statement statement = connection.createStatement();
                     ResultSet resultSet = statement.executeQuery(sql)) {
                 result.addAll(getRows(resultSet, table, selectedColumnNames));
diff --git 
a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutor.java
 
b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutor.java
index 1f646fbec94..27df0a9d3b4 100644
--- 
a/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutor.java
+++ 
b/infra/route/src/main/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutor.java
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.infra.hint.HintManager;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.hint.SQLHintDataSourceNotExistsException;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.storage.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.route.SQLRouter;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
@@ -33,7 +34,6 @@ import 
org.apache.shardingsphere.infra.session.connection.ConnectionContext;
 import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.infra.spi.type.ordered.OrderedSPILoader;
 
-import javax.sql.DataSource;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
@@ -59,7 +59,7 @@ public final class PartialSQLRouteExecutor implements 
SQLRouteExecutor {
     @SuppressWarnings({"unchecked", "rawtypes"})
     public RouteContext route(final ConnectionContext connectionContext, final 
QueryContext queryContext, final RuleMetaData globalRuleMetaData, final 
ShardingSphereDatabase database) {
         RouteContext result = new RouteContext();
-        Optional<String> dataSourceName = 
findDataSourceByHint(queryContext.getHintValueContext(), 
database.getResourceMetaData().getStorageUnitMetaData().getDataSources());
+        Optional<String> dataSourceName = 
findDataSourceByHint(queryContext.getHintValueContext(), 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits());
         if (dataSourceName.isPresent()) {
             result.getRouteUnits().add(new RouteUnit(new 
RouteMapper(dataSourceName.get(), dataSourceName.get()), 
Collections.emptyList()));
             return result;
@@ -72,20 +72,15 @@ public final class PartialSQLRouteExecutor implements 
SQLRouteExecutor {
             }
         }
         if (result.getRouteUnits().isEmpty() && 1 == 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().size())
 {
-            String singleDataSourceName = 
database.getResourceMetaData().getStorageUnitMetaData().getDataSources().keySet().iterator().next();
+            String singleDataSourceName = 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().keySet().iterator().next();
             result.getRouteUnits().add(new RouteUnit(new 
RouteMapper(singleDataSourceName, singleDataSourceName), 
Collections.emptyList()));
         }
         return result;
     }
     
-    private Optional<String> findDataSourceByHint(final HintValueContext 
hintValueContext, final Map<String, DataSource> dataSources) {
-        Optional<String> result;
-        if (HintManager.isInstantiated() && 
HintManager.getDataSourceName().isPresent()) {
-            result = HintManager.getDataSourceName();
-        } else {
-            result = hintValueContext.findHintDataSourceName();
-        }
-        if (result.isPresent() && !dataSources.containsKey(result.get())) {
+    private Optional<String> findDataSourceByHint(final HintValueContext 
hintValueContext, final Map<String, StorageUnit> storageUnits) {
+        Optional<String> result = HintManager.isInstantiated() && 
HintManager.getDataSourceName().isPresent() ? HintManager.getDataSourceName() : 
hintValueContext.findHintDataSourceName();
+        if (result.isPresent() && !storageUnits.containsKey(result.get())) {
             throw new SQLHintDataSourceNotExistsException(result.get());
         }
         return result;
diff --git 
a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutorTest.java
 
b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutorTest.java
index 3d4ae1ba633..66ce7718922 100644
--- 
a/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutorTest.java
+++ 
b/infra/route/src/test/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutorTest.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.infra.hint.HintManager;
 import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.hint.SQLHintDataSourceNotExistsException;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.storage.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
@@ -34,7 +35,6 @@ import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 
-import javax.sql.DataSource;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
@@ -65,10 +65,10 @@ class PartialSQLRouteExecutorTest {
     
     @BeforeEach
     void setup() {
-        Map<String, DataSource> dataSourceMap = new HashMap<>();
-        dataSourceMap.put("ds_0", null);
-        dataSourceMap.put("ds_1", null);
-        
when(database.getResourceMetaData().getStorageUnitMetaData().getDataSources()).thenReturn(dataSourceMap);
+        Map<String, StorageUnit> storageUnits = new HashMap<>();
+        storageUnits.put("ds_0", null);
+        storageUnits.put("ds_1", null);
+        
when(database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits()).thenReturn(storageUnits);
     }
     
     @Test
diff --git 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
index 9477e5ba0d9..63dc7914a74 100644
--- 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
+++ 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
@@ -71,7 +71,7 @@ public final class TransactionRule implements GlobalRule, 
ResourceHeldRule<Shard
         Map<String, DatabaseType> databaseTypes = new 
LinkedHashMap<>(databases.size(), 1F);
         for (Entry<String, ShardingSphereDatabase> entry : 
databases.entrySet()) {
             ShardingSphereDatabase database = entry.getValue();
-            
database.getResourceMetaData().getStorageUnitMetaData().getDataSources().forEach((key,
 value) -> dataSourceMap.put(database.getName() + "." + key, value));
+            
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().forEach((key,
 value) -> dataSourceMap.put(database.getName() + "." + key, 
value.getDataSource()));
             database.getResourceMetaData().getStorageTypes().forEach((key, 
value) -> databaseTypes.put(database.getName() + "." + key, value));
         }
         if (dataSourceMap.isEmpty()) {
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 2d547c32e39..9553a5c6674 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -182,7 +182,7 @@ public final class ContextManager implements AutoCloseable {
         ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
         database.reloadRules(MutableDataNodeRule.class);
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(database.getProtocolType(), 
database.getResourceMetaData().getStorageTypes(),
-                Collections.singletonMap(dataSourceName, 
database.getResourceMetaData().getStorageUnitMetaData().getDataSources().get(dataSourceName)),
+                Collections.singletonMap(dataSourceName, 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().get(dataSourceName).getDataSource()),
                 database.getRuleMetaData().getRules(), 
metaDataContexts.get().getMetaData().getProps(), schemaName);
         ShardingSphereSchema result = 
GenericSchemaBuilder.build(material).get(schemaName);
         
result.getViews().putAll(metaDataContexts.get().getPersistService().getDatabaseMetaDataService().getViewMetaDataPersistService().load(database.getName(),
 schemaName));
@@ -215,7 +215,7 @@ public final class ContextManager implements AutoCloseable {
      */
     public void reloadTable(final String databaseName, final String 
schemaName, final String dataSourceName, final String tableName) {
         Map<String, DataSource> dataSourceMap = Collections.singletonMap(
-                dataSourceName, 
metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getDataSources().get(dataSourceName));
+                dataSourceName, 
metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageUnits().get(dataSourceName).getDataSource());
         try {
             reloadTable(databaseName, schemaName, tableName, dataSourceMap);
         } catch (final SQLException ex) {
diff --git 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/subscriber/ProcessListChangedSubscriberTest.java
 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/subscriber/ProcessListChangedSubscriberTest.java
index 537b2b36714..7dde3740a43 100644
--- 
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/subscriber/ProcessListChangedSubscriberTest.java
+++ 
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/registry/process/subscriber/ProcessListChangedSubscriberTest.java
@@ -30,8 +30,8 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.rule.identifier.type.ResourceHeldRule;
-import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.infra.util.eventbus.EventBusContext;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
 import 
org.apache.shardingsphere.mode.manager.cluster.ClusterContextManagerBuilder;
@@ -53,7 +53,6 @@ import org.mockito.junit.jupiter.MockitoExtension;
 
 import java.sql.SQLException;
 import java.util.Collections;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.Properties;
@@ -98,7 +97,6 @@ class ProcessListChangedSubscriberTest {
     }
     
     private Map<String, ShardingSphereDatabase> createDatabases() {
-        
when(database.getResourceMetaData().getStorageUnitMetaData().getDataSources()).thenReturn(new
 LinkedHashMap<>());
         
when(database.getResourceMetaData().getStorageTypes()).thenReturn(Collections.singletonMap("ds_0",
 TypedSPILoader.getService(DatabaseType.class, "MySQL")));
         
when(database.getSchemas()).thenReturn(Collections.singletonMap("foo_schema", 
new ShardingSphereSchema()));
         
when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "MySQL"));
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSource.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSource.java
index 07cb4218717..eaa76e016a8 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSource.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSource.java
@@ -69,7 +69,7 @@ public final class JDBCBackendDataSource implements 
BackendDataSource {
     public List<Connection> getConnections(final String databaseName, final 
String dataSourceName,
                                            final int connectionSize, final 
ConnectionMode connectionMode, final TransactionType transactionType) throws 
SQLException {
         DataSource dataSource = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()
-                
.getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getDataSources().get(dataSourceName);
+                
.getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageUnits().get(dataSourceName).getDataSource();
         if (dataSourceName.contains(".")) {
             String dataSourceStr = dataSourceName.split("\\.")[0];
             if 
(GlobalDataSourceRegistry.getInstance().getCachedDataSources().containsKey(dataSourceStr))
 {
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
index c37aab7c5b0..7975e0280c7 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
@@ -31,11 +31,11 @@ import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.type.me
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import 
org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.storage.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 
-import javax.sql.DataSource;
 import java.sql.Connection;
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -49,7 +49,6 @@ import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.function.Consumer;
 import java.util.stream.Collectors;
@@ -161,12 +160,12 @@ public abstract class AbstractDatabaseMetaDataExecutor 
implements DatabaseAdminQ
         @Override
         protected void processMetaData(final String databaseName, final 
Consumer<ResultSet> callback) throws SQLException {
             ResourceMetaData resourceMetaData = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData();
-            Optional<Entry<String, DataSource>> dataSourceEntry = 
resourceMetaData.getStorageUnitMetaData().getDataSources().entrySet().stream().findFirst();
-            if (!dataSourceEntry.isPresent()) {
+            Optional<StorageUnit> storageUnit = 
resourceMetaData.getStorageUnitMetaData().getStorageUnits().values().stream().findFirst();
+            if (!storageUnit.isPresent()) {
                 return;
             }
             try (
-                    Connection connection = 
dataSourceEntry.get().getValue().getConnection();
+                    Connection connection = 
storageUnit.get().getDataSource().getConnection();
                     PreparedStatement preparedStatement = 
connection.prepareStatement(sql)) {
                 for (int i = 0; i < parameters.size(); i++) {
                     preparedStatement.setObject(i + 1, parameters.get(i));
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutor.java
index f12e20e3480..feb75008599 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutor.java
@@ -25,13 +25,13 @@ import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePrecondition
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.storage.StorageUnit;
 import org.apache.shardingsphere.infra.util.json.JsonUtils;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.distsql.export.ExportedStorageNode;
 import 
org.apache.shardingsphere.proxy.backend.distsql.export.ExportedStorageNodes;
 import org.apache.shardingsphere.proxy.backend.util.ExportUtils;
 
-import javax.sql.DataSource;
 import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.Collection;
@@ -87,15 +87,15 @@ public final class ExportStorageNodesExecutor implements 
MetaDataRequiredQueryab
     
     private Map<String, Collection<ExportedStorageNode>> 
generateDatabaseExportStorageNodesData(final ShardingSphereDatabase database) {
         Map<String, ExportedStorageNode> storageNodes = new LinkedHashMap<>();
-        for (Entry<String, DataSource> entry : 
database.getResourceMetaData().getStorageUnitMetaData().getDataSources().entrySet())
 {
+        for (Entry<String, StorageUnit> entry : 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().entrySet())
 {
             ConnectionProperties connectionProps = 
database.getResourceMetaData().getConnectionProperties(entry.getKey());
             String databaseInstanceIp = getDatabaseInstanceIp(connectionProps);
             if (storageNodes.containsKey(databaseInstanceIp)) {
                 continue;
             }
-            Map<String, Object> standardProperties = 
DataSourcePoolPropertiesCreator.create(entry.getValue()).getConnectionPropertySynonyms().getStandardProperties();
+            Map<String, Object> standardProps = 
DataSourcePoolPropertiesCreator.create(entry.getValue().getDataSource()).getConnectionPropertySynonyms().getStandardProperties();
             ExportedStorageNode exportedStorageNode = new 
ExportedStorageNode(connectionProps.getHostname(), 
String.valueOf(connectionProps.getPort()),
-                    String.valueOf(standardProperties.get("username")), 
String.valueOf(standardProperties.get("password")), 
connectionProps.getCatalog());
+                    String.valueOf(standardProps.get("username")), 
String.valueOf(standardProps.get("password")), connectionProps.getCatalog());
             storageNodes.put(databaseInstanceIp, exportedStorageNode);
         }
         return Collections.singletonMap(database.getName(), 
storageNodes.values());
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandler.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandler.java
index c00e6fe3f44..9fca6f85c21 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandler.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandler.java
@@ -30,10 +30,11 @@ import 
org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterStorage
 import org.apache.shardingsphere.infra.database.core.connector.url.JdbcUrl;
 import 
org.apache.shardingsphere.infra.database.core.connector.url.StandardJdbcUrlParser;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-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.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.exception.core.external.ShardingSphereExternalException;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.storage.StorageUnit;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
@@ -100,15 +101,15 @@ public final class AlterStorageUnitBackendHandler extends 
StorageUnitDefinitionB
     }
     
     private void checkStorageUnitNameExisted(final String databaseName, final 
Collection<String> storageUnitNames) {
-        Map<String, DataSource> storageUnits = 
ProxyContext.getInstance().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getDataSources();
+        Map<String, StorageUnit> storageUnits = 
ProxyContext.getInstance().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageUnits();
         Collection<String> notExistedStorageUnitNames = 
storageUnitNames.stream().filter(each -> 
!storageUnits.containsKey(each)).collect(Collectors.toList());
         
ShardingSpherePreconditions.checkState(notExistedStorageUnitNames.isEmpty(), () 
-> new MissingRequiredStorageUnitsException(databaseName, 
notExistedStorageUnitNames));
     }
     
     private void checkDatabase(final String databaseName, final 
AlterStorageUnitStatement sqlStatement) {
-        Map<String, DataSource> storageUnits = 
ProxyContext.getInstance().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getDataSources();
+        Map<String, StorageUnit> storageUnits = 
ProxyContext.getInstance().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageUnits();
         Collection<String> invalidStorageUnitNames = 
sqlStatement.getStorageUnits().stream().collect(Collectors.toMap(DataSourceSegment::getName,
 each -> each)).entrySet().stream()
-                .filter(each -> !isIdenticalDatabase(each.getValue(), 
storageUnits.get(each.getKey()))).map(Entry::getKey).collect(Collectors.toSet());
+                .filter(each -> !isIdenticalDatabase(each.getValue(), 
storageUnits.get(each.getKey()).getDataSource())).map(Entry::getKey).collect(Collectors.toSet());
         
ShardingSpherePreconditions.checkState(invalidStorageUnitNames.isEmpty(),
                 () -> new 
InvalidStorageUnitsException(Collections.singleton(String.format("Cannot alter 
the database of %s", invalidStorageUnitNames))));
     }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandler.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandler.java
index 07715988233..91505767c34 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandler.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandler.java
@@ -22,9 +22,10 @@ import 
org.apache.shardingsphere.distsql.handler.exception.storageunit.InvalidSt
 import 
org.apache.shardingsphere.distsql.handler.exception.storageunit.MissingRequiredStorageUnitsException;
 import 
org.apache.shardingsphere.distsql.handler.exception.storageunit.StorageUnitInUsedException;
 import 
org.apache.shardingsphere.distsql.parser.statement.rdl.drop.UnregisterStorageUnitStatement;
-import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.exception.core.external.server.ShardingSphereServerException;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.storage.StorageUnit;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
@@ -32,7 +33,6 @@ import 
org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.proxy.backend.util.StorageUnitUtils;
 import org.apache.shardingsphere.single.rule.SingleRule;
 
-import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collection;
 import java.util.Collections;
@@ -71,15 +71,15 @@ public final class UnregisterStorageUnitBackendHandler 
extends StorageUnitDefini
     }
     
     private void checkExisted(final String databaseName, final 
Collection<String> storageUnitNames) {
-        Map<String, DataSource> dataSources = 
ProxyContext.getInstance().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getDataSources();
-        Collection<String> notExistedStorageUnits = 
storageUnitNames.stream().filter(each -> 
!dataSources.containsKey(each)).collect(Collectors.toList());
+        Map<String, StorageUnit> storageUnits = 
ProxyContext.getInstance().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaData().getStorageUnits();
+        Collection<String> notExistedStorageUnits = 
storageUnitNames.stream().filter(each -> 
!storageUnits.containsKey(each)).collect(Collectors.toList());
         
ShardingSpherePreconditions.checkState(notExistedStorageUnits.isEmpty(), () -> 
new MissingRequiredStorageUnitsException(databaseName, notExistedStorageUnits));
     }
     
     private void checkInUsed(final String databaseName, final 
UnregisterStorageUnitStatement sqlStatement) {
         ShardingSphereDatabase database = 
ProxyContext.getInstance().getDatabase(databaseName);
         Map<String, Collection<String>> inUsedStorageUnits = 
StorageUnitUtils.getInUsedStorageUnits(
-                database.getRuleMetaData(), 
database.getResourceMetaData().getStorageUnitMetaData().getDataSources().size());
+                database.getRuleMetaData(), 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().size());
         Collection<String> inUsedStorageUnitNames = 
inUsedStorageUnits.keySet();
         inUsedStorageUnitNames.retainAll(sqlStatement.getStorageUnitNames());
         if (!inUsedStorageUnitNames.isEmpty()) {
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
index e2c7713e92c..a28ba7aeb3f 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
@@ -30,6 +30,7 @@ import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePo
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 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.storage.StorageUnit;
 import org.apache.shardingsphere.proxy.backend.util.StorageUnitUtils;
 
 import javax.sql.DataSource;
@@ -100,15 +101,15 @@ public final class ShowStorageUnitExecutor implements 
RQLExecutor<ShowStorageUni
         if (usageCount.isPresent()) {
             Map<String, Collection<String>> inUsedStorageUnits = 
StorageUnitUtils.getInUsedStorageUnits(
                     database.getRuleMetaData(), 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().size());
-            for (Entry<String, DataSource> entry : 
database.getResourceMetaData().getStorageUnitMetaData().getDataSources().entrySet())
 {
+            for (Entry<String, StorageUnit> entry : 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().entrySet())
 {
                 Integer currentUsageCount = 
inUsedStorageUnits.containsKey(entry.getKey()) ? 
inUsedStorageUnits.get(entry.getKey()).size() : 0;
                 if (usageCount.get().equals(currentUsageCount)) {
-                    result.put(entry.getKey(), 
getDataSourcePoolProperties(propsMap, entry.getKey(), 
storageTypes.get(entry.getKey()), entry.getValue()));
+                    result.put(entry.getKey(), 
getDataSourcePoolProperties(propsMap, entry.getKey(), 
storageTypes.get(entry.getKey()), entry.getValue().getDataSource()));
                 }
             }
         } else {
-            for (Entry<String, DataSource> entry : 
database.getResourceMetaData().getStorageUnitMetaData().getDataSources().entrySet())
 {
-                result.put(entry.getKey(), 
getDataSourcePoolProperties(propsMap, entry.getKey(), 
storageTypes.get(entry.getKey()), entry.getValue()));
+            for (Entry<String, StorageUnit> entry : 
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().entrySet())
 {
+                result.put(entry.getKey(), 
getDataSourcePoolProperties(propsMap, entry.getKey(), 
storageTypes.get(entry.getKey()), entry.getValue().getDataSource()));
             }
         }
         return result;
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
index 93834d4da6a..0632e4d0a26 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
@@ -53,6 +53,7 @@ import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
@@ -99,7 +100,9 @@ class JDBCBackendDataSourceTest {
         storageTypes.put("ds_0", databaseType);
         storageTypes.put("ds_1", databaseType);
         
when(database.getResourceMetaData().getStorageTypes()).thenReturn(storageTypes);
-        
when(database.getResourceMetaData().getStorageUnitMetaData().getDataSources()).thenReturn(mockDataSources(2));
+        for (Entry<String, DataSource> entry : mockDataSources(2).entrySet()) {
+            
when(database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().get(entry.getKey()).getDataSource()).thenReturn(entry.getValue());
+        }
         return Collections.singletonMap("schema", database);
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
index 7e538738bf1..2c06f0d1b83 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryRes
 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.storage.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
@@ -50,8 +51,9 @@ import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Answers;
 import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoSettings;
+import org.mockito.quality.Strictness;
 
-import javax.sql.DataSource;
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -72,6 +74,7 @@ import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(AutoMockExtension.class)
+@MockitoSettings(strictness = Strictness.LENIENT)
 @StaticMockSettings(ProxyContext.class)
 class ExportStorageNodesExecutorTest {
     
@@ -125,7 +128,8 @@ class ExportStorageNodesExecutorTest {
     @Test
     void assertExecute() {
         when(database.getName()).thenReturn("normal_db");
-        
when(database.getResourceMetaData().getStorageUnitMetaData().getDataSources()).thenReturn(createDataSourceMap());
+        Map<String, StorageUnit> storageUnits = createStorageUnits();
+        
when(database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits()).thenReturn(storageUnits);
         
when(database.getRuleMetaData().getConfigurations()).thenReturn(Collections.singleton(createShardingRuleConfiguration()));
         ContextManager contextManager = mockContextManager();
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
@@ -138,7 +142,8 @@ class ExportStorageNodesExecutorTest {
     @Test
     void assertExecuteWithDatabaseName() {
         when(database.getName()).thenReturn("normal_db");
-        
when(database.getResourceMetaData().getStorageUnitMetaData().getDataSources()).thenReturn(createDataSourceMap());
+        Map<String, StorageUnit> storageUnits = createStorageUnits();
+        
when(database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits()).thenReturn(storageUnits);
         
when(database.getRuleMetaData().getConfigurations()).thenReturn(Collections.singleton(createShardingRuleConfiguration()));
         ContextManager contextManager = mockContextManager();
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
@@ -158,20 +163,22 @@ class ExportStorageNodesExecutorTest {
         return result;
     }
     
-    private Map<String, DataSource> createDataSourceMap() {
-        Map<String, DataSource> result = new LinkedHashMap<>(2, 1F);
-        result.put("ds_0", createDataSource("demo_ds_0"));
-        result.put("ds_1", createDataSource("demo_ds_1"));
+    private Map<String, StorageUnit> createStorageUnits() {
+        Map<String, StorageUnit> result = new LinkedHashMap<>(2, 1F);
+        result.put("ds_0", createStorageUnit("demo_ds_0"));
+        result.put("ds_1", createStorageUnit("demo_ds_1"));
         return result;
     }
     
-    private DataSource createDataSource(final String name) {
-        MockedDataSource result = new MockedDataSource();
-        result.setUrl(String.format("jdbc:mock://127.0.0.1/%s", name));
-        result.setUsername("root");
-        result.setPassword("test");
-        result.setMaxPoolSize(50);
-        result.setMinPoolSize(1);
+    private StorageUnit createStorageUnit(final String name) {
+        MockedDataSource dataSource = new MockedDataSource();
+        dataSource.setUrl(String.format("jdbc:mock://127.0.0.1/%s", name));
+        dataSource.setUsername("root");
+        dataSource.setPassword("test");
+        dataSource.setMaxPoolSize(50);
+        dataSource.setMinPoolSize(1);
+        StorageUnit result = mock(StorageUnit.class);
+        when(result.getDataSource()).thenReturn(dataSource);
         return result;
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandlerTest.java
index bd97a3e397b..b3365c2be4a 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandlerTest.java
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterStorage
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 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.storage.StorageUnit;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
@@ -79,7 +80,9 @@ class AlterStorageUnitBackendHandlerTest {
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
         
when(ProxyContext.getInstance().getDatabase("foo_db")).thenReturn(database);
         ResourceMetaData resourceMetaData = mock(ResourceMetaData.class, 
RETURNS_DEEP_STUBS);
-        
when(resourceMetaData.getStorageUnitMetaData().getDataSources()).thenReturn(Collections.singletonMap("ds_0",
 mockHikariDataSource("ds_0")));
+        StorageUnit storageUnit = mock(StorageUnit.class);
+        
when(storageUnit.getDataSource()).thenReturn(mockHikariDataSource("ds_0"));
+        
when(resourceMetaData.getStorageUnitMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("ds_0",
 storageUnit));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         assertThat(handler.execute("foo_db", 
createAlterStorageUnitStatement("ds_0")), 
instanceOf(UpdateResponseHeader.class));
     }
@@ -104,7 +107,9 @@ class AlterStorageUnitBackendHandlerTest {
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
         
when(ProxyContext.getInstance().getDatabase("foo_db")).thenReturn(database);
         ResourceMetaData resourceMetaData = mock(ResourceMetaData.class, 
RETURNS_DEEP_STUBS);
-        
when(resourceMetaData.getStorageUnitMetaData().getDataSources()).thenReturn(Collections.singletonMap("ds_0",
 mockHikariDataSource("ds_1")));
+        StorageUnit storageUnit = mock(StorageUnit.class);
+        
when(storageUnit.getDataSource()).thenReturn(mockHikariDataSource("ds_1"));
+        
when(resourceMetaData.getStorageUnitMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("ds_0",
 storageUnit));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         assertThrows(InvalidStorageUnitsException.class, () -> 
handler.execute("foo_db", createAlterStorageUnitStatement("ds_0")));
     }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandlerTest.java
index 335f8c67a01..dc155e15b4a 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandlerTest.java
@@ -17,14 +17,15 @@
 
 package 
org.apache.shardingsphere.proxy.backend.handler.distsql.rdl.storage.unit;
 
-import 
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.DistSQLException;
 import 
org.apache.shardingsphere.distsql.handler.exception.storageunit.MissingRequiredStorageUnitsException;
 import 
org.apache.shardingsphere.distsql.handler.exception.storageunit.StorageUnitInUsedException;
 import 
org.apache.shardingsphere.distsql.parser.statement.rdl.drop.UnregisterStorageUnitStatement;
 import org.apache.shardingsphere.infra.datanode.DataNode;
+import 
org.apache.shardingsphere.infra.exception.core.external.sql.type.kernel.category.DistSQLException;
 import org.apache.shardingsphere.infra.instance.mode.ModeContextManager;
 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.storage.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
@@ -109,7 +110,9 @@ class UnregisterStorageUnitBackendHandlerTest {
     
     @Test
     void assertExecute() throws SQLException {
-        
when(resourceMetaData.getStorageUnitMetaData().getDataSources()).thenReturn(Collections.singletonMap("foo_ds",
 dataSource));
+        StorageUnit storageUnit = mock(StorageUnit.class);
+        when(storageUnit.getDataSource()).thenReturn(dataSource);
+        
when(resourceMetaData.getStorageUnitMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnit));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         
when(contextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db")).thenReturn(database);
         UnregisterStorageUnitStatement unregisterStorageUnitStatement = new 
UnregisterStorageUnitStatement(Collections.singleton("foo_ds"), false);
@@ -129,7 +132,9 @@ class UnregisterStorageUnitBackendHandlerTest {
         
when(ruleMetaData.findRules(DataSourceContainedRule.class)).thenReturn(Collections.singleton(shadowRule));
         when(shadowRule.getType()).thenReturn("ShadowRule");
         
when(shadowRule.getDataSourceMapper()).thenReturn(Collections.singletonMap("", 
Collections.singleton("foo_ds")));
-        
when(resourceMetaData.getStorageUnitMetaData().getDataSources()).thenReturn(Collections.singletonMap("foo_ds",
 dataSource));
+        StorageUnit storageUnit = mock(StorageUnit.class);
+        when(storageUnit.getDataSource()).thenReturn(dataSource);
+        
when(resourceMetaData.getStorageUnitMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnit));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         
when(contextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db")).thenReturn(database);
         assertThrows(StorageUnitInUsedException.class,
@@ -143,7 +148,9 @@ class UnregisterStorageUnitBackendHandlerTest {
         DataNode dataNode = mock(DataNode.class);
         when(dataNode.getDataSourceName()).thenReturn("foo_ds");
         
when(singleRule.getAllDataNodes()).thenReturn(Collections.singletonMap("", 
Collections.singleton(dataNode)));
-        
when(resourceMetaData.getStorageUnitMetaData().getDataSources()).thenReturn(Collections.singletonMap("foo_ds",
 dataSource));
+        StorageUnit storageUnit = mock(StorageUnit.class);
+        when(storageUnit.getDataSource()).thenReturn(dataSource);
+        
when(resourceMetaData.getStorageUnitMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnit));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         
when(contextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db")).thenReturn(database);
         assertThrows(StorageUnitInUsedException.class,
@@ -157,7 +164,9 @@ class UnregisterStorageUnitBackendHandlerTest {
         DataNode dataNode = mock(DataNode.class);
         when(dataNode.getDataSourceName()).thenReturn("foo_ds");
         
when(singleRule.getAllDataNodes()).thenReturn(Collections.singletonMap("", 
Collections.singleton(dataNode)));
-        
when(resourceMetaData.getStorageUnitMetaData().getDataSources()).thenReturn(Collections.singletonMap("foo_ds",
 dataSource));
+        StorageUnit storageUnit = mock(StorageUnit.class);
+        when(storageUnit.getDataSource()).thenReturn(dataSource);
+        
when(resourceMetaData.getStorageUnitMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnit));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         
when(contextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db")).thenReturn(database);
         UnregisterStorageUnitStatement unregisterStorageUnitStatement = new 
UnregisterStorageUnitStatement(Collections.singleton("foo_ds"), true);

Reply via email to