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":""}]}}

Reply via email to