You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ca...@apache.org on 2022/11/09 02:49:43 UTC

[iotdb] branch master updated: [IOTDB-4865] Cluster tool — show cluster details (#7935)

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

caogaofei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new ff2541bf6b [IOTDB-4865] Cluster tool — show cluster details (#7935)
ff2541bf6b is described below

commit ff2541bf6b82c0e15a07015878a0ad30a6351603
Author: Itami Sho <42...@users.noreply.github.com>
AuthorDate: Wed Nov 9 10:49:37 2022 +0800

    [IOTDB-4865] Cluster tool — show cluster details (#7935)
---
 .../org/apache/iotdb/db/qp/sql/IdentifierParser.g4 |  1 +
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |  7 +-
 .../antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4  |  4 ++
 .../Maintenance-Tools/Maintenance-Command.md       | 23 +++++++
 .../Maintenance-Tools/Maintenance-Command.md       | 22 ++++++
 .../db/mpp/common/header/ColumnHeaderConstant.java | 21 +++++-
 .../db/mpp/common/header/DatasetHeaderFactory.java |  4 ++
 .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java  |  6 +-
 .../plan/execution/config/ConfigTaskVisitor.java   |  5 +-
 .../config/executor/ClusterConfigTaskExecutor.java | 10 ++-
 .../config/executor/IConfigTaskExecutor.java       |  3 +-
 .../executor/StandaloneConfigTaskExecutor.java     |  3 +-
 ...lusterTask.java => ShowClusterDetailsTask.java} | 78 +++++++++++++++++-----
 .../execution/config/metadata/ShowClusterTask.java |  8 ++-
 .../iotdb/db/mpp/plan/parser/ASTVisitor.java       |  7 ++
 .../statement/metadata/ShowClusterStatement.java   | 10 +++
 16 files changed, 185 insertions(+), 27 deletions(-)

diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4 b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
index fb108cb96e..3aea385462 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4
@@ -72,6 +72,7 @@ keyWords
     | DESCRIBE
     | DEVICE
     | DEVICES
+    | DETAILS
     | DISABLE
     | DISCARD
     | DROP
diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
index 51cb8f178d..271e66569f 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
@@ -42,7 +42,7 @@ ddlStatement
     | dropFunction | dropTrigger | dropContinuousQuery | dropSchemaTemplate
     | setTTL | unsetTTL | startTrigger | stopTrigger | setSchemaTemplate | unsetSchemaTemplate
     | showStorageGroup | showDevices | showTimeseries | showChildPaths | showChildNodes
-    | showFunctions | showTriggers | showContinuousQueries | showTTL | showAllTTL | showCluster | showRegion | showDataNodes | showConfigNodes
+    | showFunctions | showTriggers | showContinuousQueries | showTTL | showAllTTL | showCluster | showClusterDetails | showRegion | showDataNodes | showConfigNodes
     | showSchemaTemplates | showNodesInSchemaTemplate
     | showPathsUsingSchemaTemplate | showPathsSetSchemaTemplate
     | countStorageGroup | countDevices | countTimeseries | countNodes
@@ -339,6 +339,11 @@ showCluster
     : SHOW CLUSTER
     ;
 
+// Show Cluster Details
+showClusterDetails
+    : SHOW CLUSTER DETAILS
+    ;
+
 // Show Region
 showRegion
     : SHOW (SCHEMA | DATA)? REGIONS (OF STORAGE GROUP prefixPath? (COMMA prefixPath)*)?
diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4 b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
index a6141a614e..be2578da03 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4
@@ -194,6 +194,10 @@ DESCRIBE
     : D E S C R I B E
     ;
 
+DETAILS
+    : D E T A I L S
+    ;
+
 DEVICE
     : D E V I C E
     ;
diff --git a/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md b/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md
index 19a775303e..4f78031b49 100644
--- a/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md
+++ b/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md
@@ -253,6 +253,29 @@ Total line number = 6
 It costs 0.011s
 ```
 
+View the details of all nodes:
+
+```
+SHOW CLUSTER DETAILS
+```
+
+Eg:
+```
+IoTDB> show cluster details
++------+----------+-------+---------------+------------+-------------------+----------+-------+-----------------+-------------------+-------+
+|NodeID|  NodeType| Status|InternalAddress|InternalPort|ConfigConsensusPort|RpcAddress|RpcPort|DataConsensusPort|SchemaConsensusPort|MppPort|
++------+----------+-------+---------------+------------+-------------------+----------+-------+-----------------+-------------------+-------+
+|     0|ConfigNode|Running|      127.0.0.1|       22277|              22278|          |       |                 |                   |       |
+|     1|ConfigNode|Running|      127.0.0.1|       22279|              22280|          |       |                 |                   |       |
+|     2|ConfigNode|Running|      127.0.0.1|       22281|              22282|          |       |                 |                   |       |
+|     3|  DataNode|Running|      127.0.0.1|        9003|                   | 127.0.0.1|   6667|            40010|              50010|   8777|
+|     4|  DataNode|Running|      127.0.0.1|        9004|                   | 127.0.0.1|   6668|            40011|              50011|   8778|
+|     5|  DataNode|Running|      127.0.0.1|        9005|                   | 127.0.0.1|   6669|            40012|              50012|   8779|
++------+----------+-------+---------------+------------+-------------------+----------+-------+-----------------+-------------------+-------+
+Total line number = 6
+It costs 0.340s
+```
+
 After a node is stopped, its status will change, as shown below:
 
 ```
diff --git a/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md b/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md
index f6985d4f19..1b70be4d59 100644
--- a/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md
+++ b/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md
@@ -251,6 +251,28 @@ Total line number = 6
 It costs 0.011s
 ```
 
+查看全部节点的详细配置信息:
+
+```
+SHOW CLUSTER DETAILS
+```
+
+示例:
+```
+IoTDB> show cluster details
++------+----------+-------+---------------+------------+-------------------+----------+-------+-----------------+-------------------+-------+
+|NodeID|  NodeType| Status|InternalAddress|InternalPort|ConfigConsensusPort|RpcAddress|RpcPort|DataConsensusPort|SchemaConsensusPort|MppPort|
++------+----------+-------+---------------+------------+-------------------+----------+-------+-----------------+-------------------+-------+
+|     0|ConfigNode|Running|      127.0.0.1|       22277|              22278|          |       |                 |                   |       |
+|     1|ConfigNode|Running|      127.0.0.1|       22279|              22280|          |       |                 |                   |       |
+|     2|ConfigNode|Running|      127.0.0.1|       22281|              22282|          |       |                 |                   |       |
+|     3|  DataNode|Running|      127.0.0.1|        9003|                   | 127.0.0.1|   6667|            40010|              50010|   8777|
+|     4|  DataNode|Running|      127.0.0.1|        9004|                   | 127.0.0.1|   6668|            40011|              50011|   8778|
+|     5|  DataNode|Running|      127.0.0.1|        9005|                   | 127.0.0.1|   6669|            40012|              50012|   8779|
++------+----------+-------+---------------+------------+-------------------+----------+-------+-----------------+-------------------+-------+
+Total line number = 6
+It costs 0.340s
+```
 ## 集群 Region 分布监控工具
 
 集群中以 Region 作为数据复制和数据管理的单元,Region 的状态和分布对于系统运维和测试有很大帮助,如以下场景:
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java
index 9d842b3838..d78c84ed8d 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/ColumnHeaderConstant.java
@@ -62,14 +62,19 @@ public class ColumnHeaderConstant {
   public static final String COLUMN_COUNT_TIMESERIES = "count(timeseries)";
   public static final String COLUMN_COUNT_STORAGE_GROUP = "count(storage group)";
 
-  // column names for show cluster statement
+  // column names for show cluster and show cluster details statements
   public static final String COLUMN_NODE_ID = "NodeID";
   public static final String COLUMN_NODE_TYPE = "NodeType";
   public static final String COLUMN_STATUS = "Status";
   public static final String COLUMN_HOST = "Host";
   public static final String COLUMN_INTERNAL_ADDRESS = "InternalAddress";
   public static final String COLUMN_INTERNAL_PORT = "InternalPort";
+  public static final String COLUMN_CONFIG_CONSENSUS_PORT = "ConfigConsensusPort";
+  public static final String COLUMN_RPC_ADDRESS = "RpcAddress";
   public static final String COLUMN_RPC_PORT = "RpcPort";
+  public static final String COLUMN_DATA_CONSENSUS_PORT = "DataConsensusPort";
+  public static final String COLUMN_SCHEMA_CONSENSUS_PORT = "SchemaConsensusPort";
+  public static final String COLUMN_MPP_PORT = "MppPort";
 
   // column names for show functions statement
   public static final String COLUMN_FUNCTION_NAME = "function name";
@@ -252,6 +257,20 @@ public class ColumnHeaderConstant {
           new ColumnHeader(COLUMN_INTERNAL_ADDRESS, TSDataType.TEXT),
           new ColumnHeader(COLUMN_INTERNAL_PORT, TSDataType.INT32));
 
+  public static final List<ColumnHeader> showClusterDetailsColumnHeaders =
+      ImmutableList.of(
+          new ColumnHeader(COLUMN_NODE_ID, TSDataType.INT32),
+          new ColumnHeader(COLUMN_NODE_TYPE, TSDataType.TEXT),
+          new ColumnHeader(COLUMN_STATUS, TSDataType.TEXT),
+          new ColumnHeader(COLUMN_INTERNAL_ADDRESS, TSDataType.TEXT),
+          new ColumnHeader(COLUMN_INTERNAL_PORT, TSDataType.INT32),
+          new ColumnHeader(COLUMN_CONFIG_CONSENSUS_PORT, TSDataType.TEXT),
+          new ColumnHeader(COLUMN_RPC_ADDRESS, TSDataType.TEXT),
+          new ColumnHeader(COLUMN_RPC_PORT, TSDataType.TEXT),
+          new ColumnHeader(COLUMN_DATA_CONSENSUS_PORT, TSDataType.TEXT),
+          new ColumnHeader(COLUMN_SCHEMA_CONSENSUS_PORT, TSDataType.TEXT),
+          new ColumnHeader(COLUMN_MPP_PORT, TSDataType.TEXT));
+
   public static final List<ColumnHeader> showFunctionsColumnHeaders =
       ImmutableList.of(
           new ColumnHeader(COLUMN_FUNCTION_NAME, TSDataType.TEXT),
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeaderFactory.java b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeaderFactory.java
index 020f6426e1..00d4f7a4e5 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeaderFactory.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/DatasetHeaderFactory.java
@@ -81,6 +81,10 @@ public class DatasetHeaderFactory {
     return new DatasetHeader(ColumnHeaderConstant.showClusterColumnHeaders, true);
   }
 
+  public static DatasetHeader getShowClusterDetailsHeader() {
+    return new DatasetHeader(ColumnHeaderConstant.showClusterDetailsColumnHeaders, true);
+  }
+
   public static DatasetHeader getShowFunctionsHeader() {
     return new DatasetHeader(ColumnHeaderConstant.showFunctionsColumnHeaders, true);
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
index b6e2c737a9..9a57bb3d08 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
@@ -1958,7 +1958,11 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext>
       ShowClusterStatement showClusterStatement, MPPQueryContext context) {
     Analysis analysis = new Analysis();
     analysis.setStatement(showClusterStatement);
-    analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowClusterHeader());
+    if (showClusterStatement.isDetails()) {
+      analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowClusterDetailsHeader());
+    } else {
+      analysis.setRespDatasetHeader(DatasetHeaderFactory.getShowClusterHeader());
+    }
     return analysis;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java
index 1e6aa6f61e..5fe55dadcc 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ConfigTaskVisitor.java
@@ -33,6 +33,7 @@ import org.apache.iotdb.db.mpp.plan.execution.config.metadata.GetSeriesSlotListT
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.GetTimeSlotListTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.SetStorageGroupTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.SetTTLTask;
+import org.apache.iotdb.db.mpp.plan.execution.config.metadata.ShowClusterDetailsTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.ShowClusterTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.ShowConfigNodesTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.ShowContinuousQueriesTask;
@@ -171,7 +172,9 @@ public class ConfigTaskVisitor
   @Override
   public IConfigTask visitShowCluster(
       ShowClusterStatement showClusterStatement, TaskContext context) {
-    return new ShowClusterTask(showClusterStatement);
+    return showClusterStatement.isDetails()
+        ? new ShowClusterDetailsTask(showClusterStatement)
+        : new ShowClusterTask(showClusterStatement);
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index 10df3d09c3..406202398c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -84,6 +84,7 @@ import org.apache.iotdb.db.mpp.plan.execution.config.metadata.GetRegionIdTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.GetSeriesSlotListTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.GetTimeSlotListTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.SetStorageGroupTask;
+import org.apache.iotdb.db.mpp.plan.execution.config.metadata.ShowClusterDetailsTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.ShowClusterTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.ShowConfigNodesTask;
 import org.apache.iotdb.db.mpp.plan.execution.config.metadata.ShowContinuousQueriesTask;
@@ -109,6 +110,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.GetSeriesSlotListStatemen
 import org.apache.iotdb.db.mpp.plan.statement.metadata.GetTimeSlotListStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.SetStorageGroupStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.SetTTLStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowClusterStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowDataNodesStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowRegionStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowStorageGroupStatement;
@@ -722,7 +724,7 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
   }
 
   @Override
-  public SettableFuture<ConfigTaskResult> showCluster() {
+  public SettableFuture<ConfigTaskResult> showCluster(ShowClusterStatement showClusterStatement) {
     SettableFuture<ConfigTaskResult> future = SettableFuture.create();
     TShowClusterResp showClusterResp = new TShowClusterResp();
     try (ConfigNodeClient client =
@@ -732,7 +734,11 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
       future.setException(e);
     }
     // build TSBlock
-    ShowClusterTask.buildTSBlock(showClusterResp, future);
+    if (showClusterStatement.isDetails()) {
+      ShowClusterDetailsTask.buildTSBlock(showClusterResp, future);
+    } else {
+      ShowClusterTask.buildTSBlock(showClusterResp, future);
+    }
     return future;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java
index dc79335224..1e5ba37b17 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/IConfigTaskExecutor.java
@@ -33,6 +33,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.GetSeriesSlotListStatemen
 import org.apache.iotdb.db.mpp.plan.statement.metadata.GetTimeSlotListStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.SetStorageGroupStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.SetTTLStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowClusterStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowDataNodesStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowRegionStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowStorageGroupStatement;
@@ -94,7 +95,7 @@ public interface IConfigTaskExecutor {
 
   SettableFuture<ConfigTaskResult> setSystemStatus(boolean onCluster, NodeStatus status);
 
-  SettableFuture<ConfigTaskResult> showCluster();
+  SettableFuture<ConfigTaskResult> showCluster(ShowClusterStatement showClusterStatement);
 
   SettableFuture<ConfigTaskResult> showTTL(ShowTTLStatement showTTLStatement);
 
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java
index a0c59d4d8b..bf6109a6de 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/executor/StandaloneConfigTaskExecutor.java
@@ -51,6 +51,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.GetSeriesSlotListStatemen
 import org.apache.iotdb.db.mpp.plan.statement.metadata.GetTimeSlotListStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.SetStorageGroupStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.SetTTLStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowClusterStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowDataNodesStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowRegionStatement;
 import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowStorageGroupStatement;
@@ -368,7 +369,7 @@ public class StandaloneConfigTaskExecutor implements IConfigTaskExecutor {
   }
 
   @Override
-  public SettableFuture<ConfigTaskResult> showCluster() {
+  public SettableFuture<ConfigTaskResult> showCluster(ShowClusterStatement showClusterStatement) {
     SettableFuture<ConfigTaskResult> future = SettableFuture.create();
     future.setException(
         new IoTDBException(
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterTask.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterDetailsTask.java
similarity index 56%
copy from server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterTask.java
copy to server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterDetailsTask.java
index 50b6d3fa85..daff96ca94 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterDetailsTask.java
@@ -42,36 +42,68 @@ import java.util.stream.Collectors;
 import static org.apache.iotdb.commons.conf.IoTDBConstant.NODE_TYPE_CONFIG_NODE;
 import static org.apache.iotdb.commons.conf.IoTDBConstant.NODE_TYPE_DATA_NODE;
 
-public class ShowClusterTask implements IConfigTask {
+public class ShowClusterDetailsTask implements IConfigTask {
 
-  public ShowClusterTask(ShowClusterStatement showClusterStatement) {}
+  private final ShowClusterStatement showClusterStatement;
 
-  @Override
-  public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor configTaskExecutor)
-      throws InterruptedException {
-    return configTaskExecutor.showCluster();
+  public ShowClusterDetailsTask(ShowClusterStatement showClusterStatement) {
+    this.showClusterStatement = showClusterStatement;
   }
 
-  private static void buildTsBlock(
+  private static void buildConfigNodesTsBlock(
       TsBlockBuilder builder,
       int nodeId,
       String nodeType,
       String nodeStatus,
-      String hostAddress,
-      int port) {
+      String internalAddress,
+      int internalPort,
+      int configConsensusPort) {
     builder.getTimeColumnBuilder().writeLong(0L);
     builder.getColumnBuilder(0).writeInt(nodeId);
     builder.getColumnBuilder(1).writeBinary(new Binary(nodeType));
     builder.getColumnBuilder(2).writeBinary(new Binary(nodeStatus));
-    builder.getColumnBuilder(3).writeBinary(new Binary(hostAddress));
-    builder.getColumnBuilder(4).writeInt(port);
+    builder.getColumnBuilder(3).writeBinary(new Binary(internalAddress));
+    builder.getColumnBuilder(4).writeInt(internalPort);
+    builder.getColumnBuilder(5).writeBinary(new Binary(Integer.toString(configConsensusPort)));
+    builder.getColumnBuilder(6).writeBinary(new Binary(""));
+    builder.getColumnBuilder(7).writeBinary(new Binary(""));
+    builder.getColumnBuilder(8).writeBinary(new Binary(""));
+    builder.getColumnBuilder(9).writeBinary(new Binary(""));
+    builder.getColumnBuilder(10).writeBinary(new Binary(""));
+    builder.declarePosition();
+  }
+
+  private static void buildDataNodesTsBlock(
+      TsBlockBuilder builder,
+      int nodeId,
+      String nodeType,
+      String nodeStatus,
+      String internalAddress,
+      int internalPort,
+      String rpcAddress,
+      int rpcPort,
+      int dataConsensusPort,
+      int schemaConsensusPort,
+      int mppPort) {
+    builder.getTimeColumnBuilder().writeLong(0L);
+    builder.getColumnBuilder(0).writeInt(nodeId);
+    builder.getColumnBuilder(1).writeBinary(new Binary(nodeType));
+    builder.getColumnBuilder(2).writeBinary(new Binary(nodeStatus));
+    builder.getColumnBuilder(3).writeBinary(new Binary(internalAddress));
+    builder.getColumnBuilder(4).writeInt(internalPort);
+    builder.getColumnBuilder(5).writeBinary(new Binary(""));
+    builder.getColumnBuilder(6).writeBinary(new Binary(rpcAddress));
+    builder.getColumnBuilder(7).writeBinary(new Binary(Integer.toString(rpcPort)));
+    builder.getColumnBuilder(8).writeBinary(new Binary(Integer.toString(dataConsensusPort)));
+    builder.getColumnBuilder(9).writeBinary(new Binary(Integer.toString(schemaConsensusPort)));
+    builder.getColumnBuilder(10).writeBinary(new Binary(Integer.toString(mppPort)));
     builder.declarePosition();
   }
 
   public static void buildTSBlock(
       TShowClusterResp clusterNodeInfos, SettableFuture<ConfigTaskResult> future) {
     List<TSDataType> outputDataTypes =
-        ColumnHeaderConstant.showClusterColumnHeaders.stream()
+        ColumnHeaderConstant.showClusterDetailsColumnHeaders.stream()
             .map(ColumnHeader::getColumnType)
             .collect(Collectors.toList());
     TsBlockBuilder builder = new TsBlockBuilder(outputDataTypes);
@@ -80,27 +112,39 @@ public class ShowClusterTask implements IConfigTask {
         .getConfigNodeList()
         .forEach(
             e ->
-                buildTsBlock(
+                buildConfigNodesTsBlock(
                     builder,
                     e.getConfigNodeId(),
                     NODE_TYPE_CONFIG_NODE,
                     clusterNodeInfos.getNodeStatus().get(e.getConfigNodeId()),
                     e.getInternalEndPoint().getIp(),
-                    e.getInternalEndPoint().getPort()));
+                    e.getInternalEndPoint().getPort(),
+                    e.getConsensusEndPoint().getPort()));
 
     clusterNodeInfos
         .getDataNodeList()
         .forEach(
             e ->
-                buildTsBlock(
+                buildDataNodesTsBlock(
                     builder,
                     e.getDataNodeId(),
                     NODE_TYPE_DATA_NODE,
                     clusterNodeInfos.getNodeStatus().get(e.getDataNodeId()),
                     e.getInternalEndPoint().getIp(),
-                    e.getInternalEndPoint().getPort()));
+                    e.getInternalEndPoint().getPort(),
+                    e.getClientRpcEndPoint().getIp(),
+                    e.getClientRpcEndPoint().getPort(),
+                    e.getDataRegionConsensusEndPoint().getPort(),
+                    e.getSchemaRegionConsensusEndPoint().getPort(),
+                    e.getMPPDataExchangeEndPoint().getPort()));
 
-    DatasetHeader datasetHeader = DatasetHeaderFactory.getShowClusterHeader();
+    DatasetHeader datasetHeader = DatasetHeaderFactory.getShowClusterDetailsHeader();
     future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS, builder.build(), datasetHeader));
   }
+
+  @Override
+  public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor configTaskExecutor)
+      throws InterruptedException {
+    return configTaskExecutor.showCluster(showClusterStatement);
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterTask.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterTask.java
index 50b6d3fa85..2b5817523e 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterTask.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterTask.java
@@ -44,12 +44,16 @@ import static org.apache.iotdb.commons.conf.IoTDBConstant.NODE_TYPE_DATA_NODE;
 
 public class ShowClusterTask implements IConfigTask {
 
-  public ShowClusterTask(ShowClusterStatement showClusterStatement) {}
+  private final ShowClusterStatement showClusterStatement;
+
+  public ShowClusterTask(ShowClusterStatement showClusterStatement) {
+    this.showClusterStatement = showClusterStatement;
+  }
 
   @Override
   public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor configTaskExecutor)
       throws InterruptedException {
-    return configTaskExecutor.showCluster();
+    return configTaskExecutor.showCluster(showClusterStatement);
   }
 
   private static void buildTsBlock(
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
index a10c09e2c4..033aaf3dd5 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
@@ -2242,6 +2242,13 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
     return new ShowClusterStatement();
   }
 
+  @Override
+  public Statement visitShowClusterDetails(IoTDBSqlParser.ShowClusterDetailsContext ctx) {
+    ShowClusterStatement showClusterStatement = new ShowClusterStatement();
+    showClusterStatement.setDetails(true);
+    return showClusterStatement;
+  }
+
   @Override
   public Statement visitDeleteStorageGroup(IoTDBSqlParser.DeleteStorageGroupContext ctx) {
     DeleteStorageGroupStatement deleteStorageGroupStatement = new DeleteStorageGroupStatement();
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/ShowClusterStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/ShowClusterStatement.java
index 0f356b7f03..be001b932f 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/ShowClusterStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/ShowClusterStatement.java
@@ -24,6 +24,8 @@ import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
 
 public class ShowClusterStatement extends ShowStatement implements IConfigStatement {
 
+  private boolean isDetails = false;
+
   @Override
   public QueryType getQueryType() {
     return QueryType.READ;
@@ -33,4 +35,12 @@ public class ShowClusterStatement extends ShowStatement implements IConfigStatem
   public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
     return visitor.visitShowCluster(this, context);
   }
+
+  public boolean isDetails() {
+    return isDetails;
+  }
+
+  public void setDetails(boolean details) {
+    isDetails = details;
+  }
 }