This is an automated email from the ASF dual-hosted git repository.
jianglongtao 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 7a75f9e4278 Refactor EXPORT STORAGE NODES result structure, add
database name (#24610)
7a75f9e4278 is described below
commit 7a75f9e4278aa23f56fba65754effee741e473e9
Author: ChenJiaHao <[email protected]>
AuthorDate: Wed Mar 15 16:42:02 2023 +0800
Refactor EXPORT STORAGE NODES result structure, add database name (#24610)
* Refactor EXPORT STORAGE NODES result structure, add database name
* Add blank line
---
.../distsql/export/ExportedStorageNodes.java | 3 ++-
.../ral/queryable/ExportStorageNodesExecutor.java | 25 +++++++++++++---------
.../queryable/ExportStorageNodesExecutorTest.java | 2 +-
.../resources/expected/export-storage-nodes.json | 2 +-
4 files changed, 19 insertions(+), 13 deletions(-)
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/distsql/export/ExportedStorageNodes.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/distsql/export/ExportedStorageNodes.java
index c05daead53f..5f1c6647cd9 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/distsql/export/ExportedStorageNodes.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/distsql/export/ExportedStorageNodes.java
@@ -24,6 +24,7 @@ import lombok.NoArgsConstructor;
import lombok.Setter;
import java.util.Collection;
+import java.util.Map;
/**
* Exported storage nodes.
@@ -35,5 +36,5 @@ import java.util.Collection;
public class ExportedStorageNodes {
@JsonProperty("storage_nodes")
- private Collection<ExportedStorageNode> storageNodes;
+ private Map<String, Collection<ExportedStorageNode>> storageNodes;
}
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 34e9b4c15d6..90f2507d762 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
@@ -24,6 +24,7 @@ import
org.apache.shardingsphere.infra.datasource.props.DataSourcePropertiesCrea
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.util.exception.ShardingSpherePreconditions;
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;
@@ -63,23 +64,27 @@ public final class ExportStorageNodesExecutor implements
MetaDataRequiredQueryab
}
private void checkSQLStatement(final ShardingSphereMetaData metaData,
final ExportStorageNodesStatement sqlStatement) {
- if (Objects.nonNull(sqlStatement.getDatabaseName()) && null ==
metaData.getDatabase(sqlStatement.getDatabaseName())) {
- throw new IllegalArgumentException(String.format("database %s is
not existed", sqlStatement.getDatabaseName()));
- }
+
ShardingSpherePreconditions.checkState(Objects.isNull(sqlStatement.getDatabaseName())
|| null != metaData.getDatabase(sqlStatement.getDatabaseName()),
+ () -> new IllegalArgumentException(String.format("database %s
is not existed", sqlStatement.getDatabaseName())));
}
private String generateExportData(final ShardingSphereMetaData metaData,
final ExportStorageNodesStatement sqlStatement) {
return JsonUtils.toJsonString(new
ExportedStorageNodes(Objects.isNull(sqlStatement.getDatabaseName()) ?
getAllStorageNodes(metaData)
- :
generateExportStorageNodeData(metaData.getDatabase(sqlStatement.getDatabaseName())).values()));
+ :
generateDatabaseExportStorageNodesData(metaData.getDatabase(sqlStatement.getDatabaseName()))));
}
- private Collection<ExportedStorageNode> getAllStorageNodes(final
ShardingSphereMetaData metaData) {
- Map<String, ExportedStorageNode> storageNodes = new LinkedHashMap<>();
- metaData.getDatabases().values().forEach(each ->
storageNodes.putAll(generateExportStorageNodeData(each)));
- return storageNodes.values();
+ private Map<String, Collection<ExportedStorageNode>>
getAllStorageNodes(final ShardingSphereMetaData metaData) {
+ Map<String, Collection<ExportedStorageNode>> storageNodes = new
LinkedHashMap<>();
+ metaData.getDatabases().values().forEach(each -> {
+ if
(each.getResourceMetaData().getAllInstanceDataSourceNames().isEmpty()) {
+ return;
+ }
+ storageNodes.putAll(generateDatabaseExportStorageNodesData(each));
+ });
+ return storageNodes;
}
- private Map<String, ExportedStorageNode>
generateExportStorageNodeData(final ShardingSphereDatabase database) {
+ private Map<String, Collection<ExportedStorageNode>>
generateDatabaseExportStorageNodesData(final ShardingSphereDatabase database) {
Map<String, ExportedStorageNode> storageNodes = new LinkedHashMap<>();
database.getResourceMetaData().getDataSources().forEach((key, value)
-> {
DataSourceMetaData dataSourceMetaData =
database.getResourceMetaData().getDataSourceMetaData(key);
@@ -92,7 +97,7 @@ public final class ExportStorageNodesExecutor implements
MetaDataRequiredQueryab
String.valueOf(standardProperties.get("username")),
String.valueOf(standardProperties.get("password")));
storageNodes.put(databaseInstanceIp, exportedStorageNode);
});
- return storageNodes;
+ return Collections.singletonMap(database.getName(),
storageNodes.values());
}
private String getDatabaseInstanceIp(final DataSourceMetaData
dataSourceMetaData) {
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 b51c9abf111..c5531acdaad 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
@@ -100,7 +100,7 @@ public final class ExportStorageNodesExecutorTest {
Collection<LocalDataQueryResultRow> actual = new
ExportStorageNodesExecutor().getRows(contextManager.getMetaDataContexts().getMetaData(),
sqlStatement);
assertThat(actual.size(), is(1));
LocalDataQueryResultRow row = actual.iterator().next();
- assertThat(row.getCell(3), is("{\"storage_nodes\":[]}"));
+ assertThat(row.getCell(3), is("{\"storage_nodes\":{}}"));
}
private ContextManager mockEmptyContextManager() {
diff --git
a/proxy/backend/core/src/test/resources/expected/export-storage-nodes.json
b/proxy/backend/core/src/test/resources/expected/export-storage-nodes.json
index 860094e543c..86d36da5346 100644
--- a/proxy/backend/core/src/test/resources/expected/export-storage-nodes.json
+++ b/proxy/backend/core/src/test/resources/expected/export-storage-nodes.json
@@ -1 +1 @@
-{"storage_nodes":[{"port":"0","password":"root","database":""}]}
\ No newline at end of file
+{"storage_nodes":{"normal_db":[{"port":"0","password":"root","database":""}]}}