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/07/27 11:13:45 UTC
[iotdb] branch master updated: [IOTDB-3865] Add Cluster tool show confignodes (#6781)
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 3bc0bf50c3 [IOTDB-3865] Add Cluster tool show confignodes (#6781)
3bc0bf50c3 is described below
commit 3bc0bf50c3b798542565805673a6c5d5094613af
Author: 任宇华 <79...@users.noreply.github.com>
AuthorDate: Wed Jul 27 19:13:40 2022 +0800
[IOTDB-3865] Add Cluster tool show confignodes (#6781)
---
.../org/apache/iotdb/db/qp/sql/IdentifierParser.g4 | 1 +
.../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 | 9 ++-
.../antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4 | 4 ++
.../iotdb/confignode/manager/ConfigManager.java | 13 ++++
.../apache/iotdb/confignode/manager/IManager.java | 4 ++
.../iotdb/confignode/manager/NodeManager.java | 23 +++++++
.../thrift/ConfigNodeRPCServiceProcessor.java | 6 ++
.../Maintenance-Tools/Maintenance-Command.md | 38 ++++++++++++
.../Maintenance-Tools/Maintenance-Command.md | 38 ++++++++++++
.../apache/iotdb/db/client/ConfigNodeClient.java | 17 ++++++
.../iotdb/db/mpp/common/header/HeaderConstant.java | 14 +++++
.../plan/execution/config/ConfigTaskVisitor.java | 7 +++
.../plan/execution/config/ShowConfigNodesTask.java | 70 ++++++++++++++++++++++
.../config/executor/ClusterConfigTaskExecutor.java | 22 +++++++
.../config/executor/IConfigTaskExecutor.java | 2 +
.../executor/StandaloneConfigTaskExecutor.java | 11 ++++
.../iotdb/db/mpp/plan/parser/ASTVisitor.java | 8 +++
.../db/mpp/plan/statement/StatementVisitor.java | 5 ++
.../metadata/ShowConfigNodesStatement.java | 37 ++++++++++++
.../src/main/thrift/confignode.thrift | 15 +++++
20 files changed, 342 insertions(+), 2 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 6cf23accb6..9485865d75 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
@@ -53,6 +53,7 @@ keyWords
| CLEAR
| CLUSTER
| CONCAT
+ | CONFIGNODES
| CONFIGURATION
| CONTINUOUS
| COUNT
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 fadcb92542..24579af389 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
@@ -43,7 +43,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
+ | showFunctions | showTriggers | showContinuousQueries | showTTL | showAllTTL | showCluster | showRegion | showDataNodes | showConfigNodes
| showSchemaTemplates | showNodesInSchemaTemplate
| showPathsUsingSchemaTemplate | showPathsSetSchemaTemplate
| countStorageGroup | countDevices | countTimeseries | countNodes
@@ -311,7 +311,12 @@ showRegion
// Show Data Nodes
showDataNodes
- : SHOW DATANODES
+ : SHOW DATANODES
+ ;
+
+// Show Config Nodes
+showConfigNodes
+ : SHOW CONFIGNODES
;
// Show Schema Template
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 d6f1d6bd3c..a87ede34df 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
@@ -125,6 +125,10 @@ CONCAT
: C O N C A T
;
+CONFIGNODES
+ : C O N F I G N O D E S
+ ;
+
CONFIGURATION
: C O N F I G U R A T I O N
;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index 9a87fc9ef4..14d727d6a5 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -90,6 +90,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionResp;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionTableResp;
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
+import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TStorageGroupSchema;
import org.apache.iotdb.consensus.common.DataSet;
@@ -923,6 +924,18 @@ public class ConfigManager implements IManager {
}
}
+ @Override
+ public TShowConfigNodesResp showConfigNodes() {
+ TSStatus status = confirmLeader();
+ TShowConfigNodesResp resp = new TShowConfigNodesResp();
+ if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ return resp.setConfigNodesInfoList(nodeManager.getRegisteredConfigNodeInfoList())
+ .setStatus(StatusUtils.OK);
+ } else {
+ return resp.setStatus(status);
+ }
+ }
+
@Override
public ProcedureManager getProcedureManager() {
return procedureManager;
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
index 156d2066bb..9c7c0975f2 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java
@@ -49,6 +49,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TRegionRouteMapResp;
import org.apache.iotdb.confignode.rpc.thrift.TSchemaNodeManagementResp;
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
+import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
import org.apache.iotdb.consensus.common.DataSet;
import org.apache.iotdb.db.mpp.common.schematree.PathPatternTree;
@@ -284,6 +285,9 @@ public interface IManager {
/** Show DataNodes */
TShowDataNodesResp showDataNodes();
+ /** Show ConfigNodes */
+ TShowConfigNodesResp showConfigNodes();
+
/**
* create schema template
*
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java
index 1b18fb6815..983ea2f558 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java
@@ -39,6 +39,7 @@ import org.apache.iotdb.confignode.consensus.response.DataNodeToStatusResp;
import org.apache.iotdb.confignode.manager.load.LoadManager;
import org.apache.iotdb.confignode.persistence.NodeInfo;
import org.apache.iotdb.confignode.procedure.env.DataNodeRemoveHandler;
+import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeInfo;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterReq;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterResp;
import org.apache.iotdb.confignode.rpc.thrift.TDataNodeInfo;
@@ -53,6 +54,7 @@ import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -236,6 +238,27 @@ public class NodeManager {
}
return dataNodeInfoList;
}
+
+ public List<TConfigNodeInfo> getRegisteredConfigNodeInfoList() {
+ List<TConfigNodeInfo> configNodeInfoList = new ArrayList<>();
+ List<TConfigNodeLocation> registeredConfigNodes = this.getRegisteredConfigNodes();
+ if (registeredConfigNodes != null) {
+ registeredConfigNodes.forEach(
+ (configNodeLocation) -> {
+ TConfigNodeInfo info = new TConfigNodeInfo();
+ int configNodeId = configNodeLocation.getConfigNodeId();
+ info.setConfigNodeId(configNodeId);
+ info.setStatus(
+ getLoadManager().getNodeCacheMap().get(configNodeId).getNodeStatus().getStatus());
+ info.setInternalAddress(configNodeLocation.getInternalEndPoint().getIp());
+ info.setInternalPort(configNodeLocation.getInternalEndPoint().getPort());
+ configNodeInfoList.add(info);
+ });
+ }
+ configNodeInfoList.sort(Comparator.comparingInt(TConfigNodeInfo::getConfigNodeId));
+ return configNodeInfoList;
+ }
+
/**
* Provides ConfigNodeGroup information for the newly registered ConfigNode
*
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
index 10773be9c3..03a5a02c21 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java
@@ -94,6 +94,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetStorageGroupReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetTimePartitionIntervalReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
+import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowRegionReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowRegionResp;
@@ -551,6 +552,11 @@ public class ConfigNodeRPCServiceProcessor implements IConfigNodeRPCService.Ifac
return configManager.showDataNodes();
}
+ @Override
+ public TShowConfigNodesResp showConfigNodes() throws TException {
+ return configManager.showConfigNodes();
+ }
+
public void handleClientExit() {}
// TODO: Interfaces for data operations
diff --git a/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md b/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md
index 7af95a5a2e..01c8e9b607 100644
--- a/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md
+++ b/docs/UserGuide/Maintenance-Tools/Maintenance-Command.md
@@ -313,6 +313,44 @@ Total line number = 3
It costs 0.009s
```
+### Show all ConfigNode information
+
+Currently, IoTDB supports ConfigNode query using the following SQL:
+
+```
+SHOW CONFIGNODES
+```
+
+Eg :
+
+```
+IoTDB> show confignodes
++------+-------+-------+-----+
+|NodeID| Status| Host| Port|
++------+-------+-------+-----+
+| 0|Running|0.0.0.0|22277|
+| 1|Running|0.0.0.0|22279|
+| 2|Running|0.0.0.0|22281|
++------+-------+-------+-----+
+Total line number = 3
+It costs 0.030s
+```
+
+After a ConfigNode is stopped, its status will change, as shown below:
+
+```
+IoTDB> show confignodes
++------+-------+-------+-----+
+|NodeID| Status| Host| Port|
++------+-------+-------+-----+
+| 0|Running|0.0.0.0|22277|
+| 1|Running|0.0.0.0|22279|
+| 2|Unknown|0.0.0.0|22281|
++------+-------+-------+-----+
+Total line number = 3
+It costs 0.009s
+```
+
### Show all Node information
Currently, iotdb supports the following SQL to view the information of all nodes :
diff --git a/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md b/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md
index b55277426b..9747693eab 100644
--- a/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md
+++ b/docs/zh/UserGuide/Maintenance-Tools/Maintenance-Command.md
@@ -310,6 +310,44 @@ Total line number = 3
It costs 0.009s
```
+### 查看ConfigNode节点信息
+
+当前 IoTDB 支持使用如下 SQL 查看 ConfigNode的信息:
+
+```
+SHOW CONFIGNODES
+```
+
+示例:
+
+```
+IoTDB> show confignodes
++------+-------+-------+-----+
+|NodeID| Status| Host| Port|
++------+-------+-------+-----+
+| 0|Running|0.0.0.0|22277|
+| 1|Running|0.0.0.0|22279|
+| 2|Running|0.0.0.0|22281|
++------+-------+-------+-----+
+Total line number = 3
+It costs 0.030s
+```
+
+停止一个节点之后,节点的状态会发生改变,状态显示如下:
+
+```
+IoTDB> show confignodes
++------+-------+-------+-----+
+|NodeID| Status| Host| Port|
++------+-------+-------+-----+
+| 0|Running|0.0.0.0|22277|
+| 1|Running|0.0.0.0|22279|
+| 2|Unknown|0.0.0.0|22281|
++------+-------+-------+-----+
+Total line number = 3
+It costs 0.009s
+```
+
### 查看全部节点信息
当前 IoTDB 支持使用如下 SQL 查看全部节点的信息:
diff --git a/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java b/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
index 6b773896d8..c44217e7ab 100644
--- a/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
+++ b/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
@@ -69,6 +69,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetStorageGroupReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetTimePartitionIntervalReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
+import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowRegionReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowRegionResp;
@@ -795,6 +796,22 @@ public class ConfigNodeClient
throw new TException(MSG_RECONNECTION_FAIL);
}
+ @Override
+ public TShowConfigNodesResp showConfigNodes() throws TException {
+ for (int i = 0; i < RETRY_NUM; i++) {
+ try {
+ TShowConfigNodesResp showConfigNodesResp = client.showConfigNodes();
+ if (!updateConfigNodeLeader(showConfigNodesResp.getStatus())) {
+ return showConfigNodesResp;
+ }
+ } catch (TException e) {
+ configLeader = null;
+ }
+ reconnect();
+ }
+ throw new TException(MSG_RECONNECTION_FAIL);
+ }
+
@Override
public TRegionRouteMapResp getLatestRegionRouteMap() throws TException {
for (int i = 0; i < RETRY_NUM; i++) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/HeaderConstant.java b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/HeaderConstant.java
index 0167d84702..b47321aab2 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/common/header/HeaderConstant.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/common/header/HeaderConstant.java
@@ -130,6 +130,9 @@ public class HeaderConstant {
// dataset header for show paths using template
public static final DatasetHeader showPathsUsingTemplate;
+ // dataset header for show confignodes
+ public static final DatasetHeader showConfigNodesHeader;
+
static {
countStorageGroupHeader =
new DatasetHeader(
@@ -272,6 +275,17 @@ public class HeaderConstant {
true);
}
+ static {
+ showConfigNodesHeader =
+ new DatasetHeader(
+ Arrays.asList(
+ new ColumnHeader(COLUMN_NODE_ID, TSDataType.INT32),
+ new ColumnHeader(COLUMN_STATUS, TSDataType.TEXT),
+ new ColumnHeader(COLUMN_HOST, TSDataType.TEXT),
+ new ColumnHeader(COLUMN_PORT, TSDataType.INT32)),
+ true);
+ }
+
static {
showSchemaTemplate =
new DatasetHeader(
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 920a721352..ea88f0856c 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
@@ -29,6 +29,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.DropFunctionStatement;
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.ShowConfigNodesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowDataNodesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowFunctionsStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowRegionStatement;
@@ -171,5 +172,11 @@ public class ConfigTaskVisitor
return new ShowDataNodesTask(showDataNodesStatement);
}
+ @Override
+ public IConfigTask visitShowConfigNodes(
+ ShowConfigNodesStatement showConfigNodesStatement, TaskContext context) {
+ return new ShowConfigNodesTask(showConfigNodesStatement);
+ }
+
public static class TaskContext {}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ShowConfigNodesTask.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ShowConfigNodesTask.java
new file mode 100644
index 0000000000..341cebe9a7
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ShowConfigNodesTask.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.mpp.plan.execution.config;
+
+import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeInfo;
+import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
+import org.apache.iotdb.db.mpp.common.header.DatasetHeader;
+import org.apache.iotdb.db.mpp.common.header.HeaderConstant;
+import org.apache.iotdb.db.mpp.plan.execution.config.executor.IConfigTaskExecutor;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowConfigNodesStatement;
+import org.apache.iotdb.rpc.TSStatusCode;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.utils.Binary;
+
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.SettableFuture;
+
+public class ShowConfigNodesTask implements IConfigTask {
+
+ private ShowConfigNodesStatement showConfigNodesStatement;
+
+ public ShowConfigNodesTask() {}
+
+ public ShowConfigNodesTask(ShowConfigNodesStatement showConfigNodesStatement) {
+ this.showConfigNodesStatement = showConfigNodesStatement;
+ }
+
+ @Override
+ public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor configTaskExecutor)
+ throws InterruptedException {
+ return configTaskExecutor.showConfigNodes();
+ }
+
+ public static void buildTSBlock(
+ TShowConfigNodesResp showConfigNodesResp, SettableFuture<ConfigTaskResult> future) {
+ TsBlockBuilder builder =
+ new TsBlockBuilder(HeaderConstant.showConfigNodesHeader.getRespDataTypes());
+ if (showConfigNodesResp.getConfigNodesInfoList() != null) {
+ for (TConfigNodeInfo configNodeInfo : showConfigNodesResp.getConfigNodesInfoList()) {
+ builder.getTimeColumnBuilder().writeLong(0L);
+ builder.getColumnBuilder(0).writeInt(configNodeInfo.getConfigNodeId());
+ builder.getColumnBuilder(1).writeBinary(Binary.valueOf(configNodeInfo.getStatus()));
+ builder
+ .getColumnBuilder(2)
+ .writeBinary(Binary.valueOf(configNodeInfo.getInternalAddress()));
+ builder.getColumnBuilder(3).writeInt(configNodeInfo.getInternalPort());
+ builder.declarePosition();
+ }
+ }
+ DatasetHeader datasetHeader = HeaderConstant.showConfigNodesHeader;
+ future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS, builder.build(), datasetHeader));
+ }
+}
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 063289954b..bced879b4c 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
@@ -33,6 +33,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TDropFunctionReq;
import org.apache.iotdb.confignode.rpc.thrift.TGetTemplateResp;
import org.apache.iotdb.confignode.rpc.thrift.TSetStorageGroupReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
+import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowRegionReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowRegionResp;
@@ -47,6 +48,7 @@ import org.apache.iotdb.db.mpp.plan.execution.config.ConfigTaskResult;
import org.apache.iotdb.db.mpp.plan.execution.config.CountStorageGroupTask;
import org.apache.iotdb.db.mpp.plan.execution.config.SetStorageGroupTask;
import org.apache.iotdb.db.mpp.plan.execution.config.ShowClusterTask;
+import org.apache.iotdb.db.mpp.plan.execution.config.ShowConfigNodesTask;
import org.apache.iotdb.db.mpp.plan.execution.config.ShowDataNodesTask;
import org.apache.iotdb.db.mpp.plan.execution.config.ShowNodesInSchemaTemplateTask;
import org.apache.iotdb.db.mpp.plan.execution.config.ShowPathSetTemplateTask;
@@ -385,6 +387,26 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
return future;
}
+ @Override
+ public SettableFuture<ConfigTaskResult> showConfigNodes() {
+ SettableFuture<ConfigTaskResult> future = SettableFuture.create();
+ TShowConfigNodesResp showConfigNodesResp = new TShowConfigNodesResp();
+ try (ConfigNodeClient client =
+ CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.partitionRegionId)) {
+ showConfigNodesResp = client.showConfigNodes();
+ if (showConfigNodesResp.getStatus().getCode()
+ != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ future.setException(new StatementExecutionException(showConfigNodesResp.getStatus()));
+ return future;
+ }
+ } catch (TException | IOException e) {
+ future.setException(e);
+ }
+ // build TSBlock
+ ShowConfigNodesTask.buildTSBlock(showConfigNodesResp, future);
+ return future;
+ }
+
@Override
public SettableFuture<ConfigTaskResult> createSchemaTemplate(
CreateSchemaTemplateStatement createSchemaTemplateStatement) {
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 d4ab1b0b56..b037cd4cee 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
@@ -70,6 +70,8 @@ public interface IConfigTaskExecutor {
SettableFuture<ConfigTaskResult> showDataNodes(ShowDataNodesStatement showDataNodesStatement);
+ SettableFuture<ConfigTaskResult> showConfigNodes();
+
SettableFuture<ConfigTaskResult> createSchemaTemplate(
CreateSchemaTemplateStatement createSchemaTemplateStatement);
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 22fb605292..3ac9fce614 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
@@ -300,6 +300,17 @@ public class StandaloneConfigTaskExecutor implements IConfigTaskExecutor {
return future;
}
+ @Override
+ public SettableFuture<ConfigTaskResult> showConfigNodes() {
+ SettableFuture<ConfigTaskResult> future = SettableFuture.create();
+ future.setException(
+ new StatementExecutionException(
+ RpcUtils.getStatus(
+ TSStatusCode.EXECUTE_STATEMENT_ERROR,
+ "Executing show confignodes in standalone mode is not supported")));
+ return future;
+ }
+
@Override
public SettableFuture<ConfigTaskResult> createSchemaTemplate(
CreateSchemaTemplateStatement createSchemaTemplateStatement) {
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 bc94f050a8..4eb62b83b0 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
@@ -98,6 +98,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.SetTTLStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowChildNodesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowChildPathsStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowClusterStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowConfigNodesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowDataNodesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowDevicesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowFunctionsStatement;
@@ -2362,6 +2363,13 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
return new ShowDataNodesStatement();
}
+ // show confignodes
+
+ @Override
+ public Statement visitShowConfigNodes(IoTDBSqlParser.ShowConfigNodesContext ctx) {
+ return new ShowConfigNodesStatement();
+ }
+
// schema template
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
index 8287c66257..785d56831c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/StatementVisitor.java
@@ -48,6 +48,7 @@ import org.apache.iotdb.db.mpp.plan.statement.metadata.SetTTLStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowChildNodesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowChildPathsStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowClusterStatement;
+import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowConfigNodesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowDataNodesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowDevicesStatement;
import org.apache.iotdb.db.mpp.plan.statement.metadata.ShowFunctionsStatement;
@@ -269,6 +270,10 @@ public abstract class StatementVisitor<R, C> {
return visitStatement(showDataNodesStatement, context);
}
+ public R visitShowConfigNodes(ShowConfigNodesStatement showConfigNodesStatement, C context) {
+ return visitStatement(showConfigNodesStatement, context);
+ }
+
public R visitShowVersion(ShowVersionStatement showVersionStatement, C context) {
return visitStatement(showVersionStatement, context);
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/ShowConfigNodesStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/ShowConfigNodesStatement.java
new file mode 100644
index 0000000000..a41b6a2c71
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/metadata/ShowConfigNodesStatement.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.iotdb.db.mpp.plan.statement.metadata;
+
+import org.apache.iotdb.db.mpp.plan.analyze.QueryType;
+import org.apache.iotdb.db.mpp.plan.statement.IConfigStatement;
+import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
+
+public class ShowConfigNodesStatement extends ShowStatement implements IConfigStatement {
+
+ @Override
+ public QueryType getQueryType() {
+ return QueryType.READ;
+ }
+
+ @Override
+ public <R, C> R accept(StatementVisitor<R, C> visitor, C context) {
+ return visitor.visitShowConfigNodes(this, context);
+ }
+}
diff --git a/thrift-confignode/src/main/thrift/confignode.thrift b/thrift-confignode/src/main/thrift/confignode.thrift
index 6f94f381c3..efe52e5c2c 100644
--- a/thrift-confignode/src/main/thrift/confignode.thrift
+++ b/thrift-confignode/src/main/thrift/confignode.thrift
@@ -267,6 +267,19 @@ struct TShowDataNodesResp {
2: optional list<TDataNodeInfo> dataNodesInfoList
}
+// Show confignodes
+struct TConfigNodeInfo {
+ 1: required i32 configNodeId
+ 2: required string status
+ 3: required string internalAddress
+ 4: required i32 internalPort
+}
+
+struct TShowConfigNodesResp {
+ 1: required common.TSStatus status
+ 2: optional list<TConfigNodeInfo> configNodesInfoList
+}
+
// Show regions
struct TShowRegionReq {
1: optional common.TConsensusGroupType consensusGroupType;
@@ -424,6 +437,8 @@ service IConfigNodeRPCService {
TShowDataNodesResp showDataNodes()
+ TShowConfigNodesResp showConfigNodes()
+
TShowRegionResp showRegion(TShowRegionReq req)
/* Routing */