This is an automated email from the ASF dual-hosted git repository.
sunnianjun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 4c6dfcf6af8 Refactor usage of StorageUnitMetaData.getStorageTypes()
(#28171)
4c6dfcf6af8 is described below
commit 4c6dfcf6af87169dacd5124f5389b1f3ea50d216
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Aug 18 23:55:26 2023 +0800
Refactor usage of StorageUnitMetaData.getStorageTypes() (#28171)
* Refactor ShardingSphereTableDataCollectorUtils
* Refactor ShowStorageUnitExecutor
* Refactor ShardingSphereProxyVersion
* Refactor FrontDatabaseProtocolTypeFactory
* Refactor TransactionRule
---
.../ShardingSphereTableDataCollectorUtils.java | 54 +++++++++++-----------
.../collector/tables/PgClassTableCollector.java | 2 +-
.../tables/PgNamespaceTableCollector.java | 2 +-
.../transaction/rule/TransactionRule.java | 2 +-
.../rql/storage/unit/ShowStorageUnitExecutor.java | 6 +--
.../proxy/version/ShardingSphereProxyVersion.java | 3 +-
.../protocol/FrontDatabaseProtocolTypeFactory.java | 2 +-
7 files changed, 36 insertions(+), 35 deletions(-)
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 96849f50ac9..05b1ead4dbd 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
@@ -44,54 +44,64 @@ public final class ShardingSphereTableDataCollectorUtils {
/**
* Collect row data.
*
- * @param shardingSphereDatabase ShardingSphere database
- * @param sql sql
+ * @param database ShardingSphere database
* @param table table
* @param selectedColumnNames selected column names
+ * @param sql SQL
* @return ShardingSphere row data
* @throws SQLException sql exception
*/
- public static Collection<ShardingSphereRowData> collectRowData(final
ShardingSphereDatabase shardingSphereDatabase, final String sql, final
ShardingSphereTable table,
- final
Collection<String> selectedColumnNames) throws SQLException {
- if (isProtocolTypeAndStorageTypeDifferent(shardingSphereDatabase)) {
+ public static Collection<ShardingSphereRowData> collectRowData(final
ShardingSphereDatabase database, final ShardingSphereTable table,
+ final
Collection<String> selectedColumnNames, final String sql) throws SQLException {
+ if (isDifferentProtocolAndStorageType(database)) {
return Collections.emptyList();
}
Collection<ShardingSphereRowData> result = new LinkedList<>();
- for (StorageUnit each :
shardingSphereDatabase.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().values())
{
+ for (StorageUnit each :
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().values())
{
try (
Connection connection =
each.getDataSource().getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql)) {
- result.addAll(getRows(resultSet, table, selectedColumnNames));
+ result.addAll(getRows(table, selectedColumnNames, resultSet));
}
}
return result;
}
- private static boolean isProtocolTypeAndStorageTypeDifferent(final
ShardingSphereDatabase shardingSphereDatabase) {
- return
!shardingSphereDatabase.getResourceMetaData().getStorageTypes().values().stream().allMatch(each
-> each.getType().equals(shardingSphereDatabase.getProtocolType().getType()));
+ private static boolean isDifferentProtocolAndStorageType(final
ShardingSphereDatabase database) {
+ return
!database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().values().stream().allMatch(each
-> each.getStorageType().equals(database.getProtocolType()));
}
- private static Collection<ShardingSphereRowData> getRows(final ResultSet
resultSet, final ShardingSphereTable table, final Collection<String>
selectedColumnNames) throws SQLException {
+ private static Collection<ShardingSphereRowData> getRows(final
ShardingSphereTable table, final Collection<String> selectedColumnNames, final
ResultSet resultSet) throws SQLException {
Collection<ShardingSphereRowData> result = new LinkedList<>();
while (resultSet.next()) {
- result.add(new ShardingSphereRowData(getRow(table, resultSet,
selectedColumnNames)));
+ result.add(new ShardingSphereRowData(getRow(table,
selectedColumnNames, resultSet)));
}
return result;
}
- private static List<Object> getRow(final ShardingSphereTable table, final
ResultSet resultSet, final Collection<String> selectedColumnNames) throws
SQLException {
+ private static List<Object> getRow(final ShardingSphereTable table, final
Collection<String> selectedColumnNames, final ResultSet resultSet) throws
SQLException {
List<Object> result = new LinkedList<>();
for (ShardingSphereColumn each : table.getColumnValues()) {
- if (selectedColumnNames.contains(each.getName())) {
-
result.add(convertIfNecessary(resultSet.getObject(each.getName()),
each.getDataType()));
- } else {
- result.add(mockValue(each.getDataType()));
- }
+ result.add(selectedColumnNames.contains(each.getName()) ?
convertValueIfNecessary(resultSet.getObject(each.getName()),
each.getDataType()) : mockValue(each.getDataType()));
}
return result;
}
+ private static Object convertValueIfNecessary(final Object data, final int
dataType) {
+ if (null == data) {
+ return null;
+ }
+ switch (dataType) {
+ case Types.ARRAY:
+ return data.toString();
+ case Types.BIGINT:
+ return Long.valueOf(data.toString());
+ default:
+ return data;
+ }
+ }
+
private static Object mockValue(final int dataType) {
switch (dataType) {
case Types.BIGINT:
@@ -112,14 +122,4 @@ public final class ShardingSphereTableDataCollectorUtils {
return null;
}
}
-
- private static Object convertIfNecessary(final Object data, final int
dataType) {
- if (Types.ARRAY == dataType) {
- return null == data ? null : data.toString();
- }
- if (Types.BIGINT == dataType) {
- return null == data ? null : Long.valueOf(data.toString());
- }
- return data;
- }
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
index 22f7b2fc416..b72ff4290b5 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgClassTableCollector.java
@@ -52,7 +52,7 @@ public final class PgClassTableCollector implements
ShardingSphereStatisticsColl
public Optional<ShardingSphereTableData> collect(final String
databaseName, final ShardingSphereTable table,
final Map<String,
ShardingSphereDatabase> shardingSphereDatabases) throws SQLException {
Collection<ShardingSphereRowData> rows =
ShardingSphereTableDataCollectorUtils.collectRowData(shardingSphereDatabases.get(databaseName),
- SELECT_SQL, table,
Arrays.stream(COLUMN_NAMES.split(",")).map(String::trim).collect(Collectors.toList()));
+ table,
Arrays.stream(COLUMN_NAMES.split(",")).map(String::trim).collect(Collectors.toList()),
SELECT_SQL);
Collection<ShardingSphereRowData> rowData = decorateTableName(rows,
table, shardingSphereDatabases.get(databaseName).getRuleMetaData().getRules());
ShardingSphereTableData result = new ShardingSphereTableData(PG_CLASS);
result.getRows().addAll(rowData);
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
index b6d16c2803c..bdea1de566b 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/tables/PgNamespaceTableCollector.java
@@ -46,7 +46,7 @@ public final class PgNamespaceTableCollector implements
ShardingSphereStatistics
public Optional<ShardingSphereTableData> collect(final String
databaseName, final ShardingSphereTable table,
final Map<String,
ShardingSphereDatabase> shardingSphereDatabases) throws SQLException {
Collection<ShardingSphereRowData> rows =
ShardingSphereTableDataCollectorUtils.collectRowData(shardingSphereDatabases.get(databaseName),
- SELECT_SQL, table,
Arrays.stream(COLUMN_NAMES.split(",")).map(String::trim).collect(Collectors.toList()));
+ table,
Arrays.stream(COLUMN_NAMES.split(",")).map(String::trim).collect(Collectors.toList()),
SELECT_SQL);
ShardingSphereTableData result = new
ShardingSphereTableData(PG_NAMESPACE);
result.getRows().addAll(rows);
return Optional.of(result);
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 90529dbe0bd..ce567379c56 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
@@ -72,7 +72,7 @@ public final class TransactionRule implements GlobalRule,
ResourceHeldRule<Shard
for (Entry<String, ShardingSphereDatabase> entry :
databases.entrySet()) {
ShardingSphereDatabase database = entry.getValue();
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));
+
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().forEach((key,
value) -> databaseTypes.put(database.getName() + "." + key,
value.getStorageType()));
}
if (dataSourceMap.isEmpty()) {
return new ShardingSphereTransactionManagerEngine(defaultType);
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 a28ba7aeb3f..256febd2fc2 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
@@ -96,7 +96,7 @@ public final class ShowStorageUnitExecutor implements
RQLExecutor<ShowStorageUni
Map<String, DataSourcePoolProperties> result = new
LinkedHashMap<>(database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().size(),
1F);
Map<String, DataSourcePoolProperties> propsMap =
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits().entrySet().stream()
.collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) ->
currentValue, LinkedHashMap::new));
- Map<String, DatabaseType> storageTypes =
database.getResourceMetaData().getStorageTypes();
+ Map<String, StorageUnit> storageUnits =
database.getResourceMetaData().getStorageUnitMetaData().getStorageUnits();
Optional<Integer> usageCount = sqlStatement.getUsageCount();
if (usageCount.isPresent()) {
Map<String, Collection<String>> inUsedStorageUnits =
StorageUnitUtils.getInUsedStorageUnits(
@@ -104,12 +104,12 @@ public final class ShowStorageUnitExecutor implements
RQLExecutor<ShowStorageUni
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().getDataSource()));
+ result.put(entry.getKey(),
getDataSourcePoolProperties(propsMap, entry.getKey(),
storageUnits.get(entry.getKey()).getStorageType(),
entry.getValue().getDataSource()));
}
}
} else {
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()));
+ result.put(entry.getKey(),
getDataSourcePoolProperties(propsMap, entry.getKey(),
storageUnits.get(entry.getKey()).getStorageType(),
entry.getValue().getDataSource()));
}
}
return result;
diff --git
a/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
b/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
index 77cca55965c..4781eb78d33 100644
---
a/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
+++
b/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
@@ -73,7 +73,8 @@ public final class ShardingSphereProxyVersion {
}
private static Optional<DataSource> findDataSourceByProtocolType(final
String databaseName, final ResourceMetaData resourceMetaData, final
DatabaseType protocolType) {
- Optional<String> dataSourceName =
resourceMetaData.getStorageTypes().entrySet().stream().filter(entry ->
entry.getValue().equals(protocolType)).map(Entry::getKey).findFirst();
+ Optional<String> dataSourceName =
resourceMetaData.getStorageUnitMetaData().getStorageUnits().entrySet()
+ .stream().filter(entry ->
entry.getValue().getStorageType().equals(protocolType)).map(Entry::getKey).findFirst();
return dataSourceName.flatMap(optional -> Optional.ofNullable(
DataSourceStateManager.getInstance().getEnabledDataSources(databaseName,
resourceMetaData.getStorageUnitMetaData().getDataSources()).get(optional)));
}
diff --git
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
index 3becba054cc..b6c1589fe84 100644
---
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
+++
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
@@ -51,7 +51,7 @@ public final class FrontDatabaseProtocolTypeFactory {
return TypedSPILoader.getService(DatabaseType.class,
DEFAULT_FRONTEND_DATABASE_PROTOCOL_TYPE);
}
Optional<ShardingSphereDatabase> database =
metaDataContexts.getMetaData().getDatabases().values().stream().filter(ShardingSphereDatabase::containsDataSource).findFirst();
- return database.isPresent() ?
database.get().getResourceMetaData().getStorageTypes().values().iterator().next()
+ return database.isPresent() ?
database.get().getResourceMetaData().getStorageUnitMetaData().getStorageUnits().values().iterator().next().getStorageType()
: TypedSPILoader.getService(DatabaseType.class,
DEFAULT_FRONTEND_DATABASE_PROTOCOL_TYPE);
}