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