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/12/29 10:52:03 UTC
[iotdb] branch rel/1.0 updated: [To rel/1.0][IOTDB-5282] Add SQL: show cluster parameter (#8657)
This is an automated email from the ASF dual-hosted git repository.
caogaofei pushed a commit to branch rel/1.0
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.0 by this push:
new ce8de09999 [To rel/1.0][IOTDB-5282] Add SQL: show cluster parameter (#8657)
ce8de09999 is described below
commit ce8de0999932abfc76314d80543d784c4225766c
Author: YongzaoDan <33...@users.noreply.github.com>
AuthorDate: Thu Dec 29 18:51:57 2022 +0800
[To rel/1.0][IOTDB-5282] Add SQL: show cluster parameter (#8657)
---
.../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 | 112 ++++++++++++-----
.../apache/iotdb/confignode/manager/IManager.java | 13 ++
.../iotdb/confignode/service/ConfigNode.java | 17 +--
.../thrift/ConfigNodeRPCServiceProcessor.java | 6 +
docs/UserGuide/Cluster/Cluster-Maintenance.md | 35 ++++++
docs/zh/UserGuide/Cluster/Cluster-Concept.md | 24 ++--
docs/zh/UserGuide/Cluster/Cluster-Maintenance.md | 35 ++++++
.../org/apache/iotdb/itbase/env/BaseConfig.java | 30 ++++-
.../confignode/it/IoTDBConfigNodeSnapshotIT.java | 2 +-
.../it/cluster/IoTDBClusterNodeErrorStartUpIT.java | 3 +-
.../it/cluster/IoTDBClusterNodeGetterIT.java | 73 +++++++----
.../it/cluster/IoTDBClusterRestartIT.java | 2 +-
.../it/load/IoTDBConfigNodeSwitchLeaderIT.java | 2 +-
.../it/partition/IoTDBPartitionDurableIT.java | 2 +-
.../it/partition/IoTDBPartitionGetterIT.java | 2 +-
.../confignode/it/utils/ConfigNodeTestUtils.java | 46 ++++---
.../apache/iotdb/commons/conf/IoTDBConstant.java | 20 ++-
.../apache/iotdb/db/client/ConfigNodeClient.java | 22 ++++
.../db/mpp/common/header/ColumnHeaderConstant.java | 6 +
.../db/mpp/common/header/DatasetHeaderFactory.java | 4 +
.../plan/execution/config/ConfigTaskVisitor.java | 11 +-
.../config/executor/ClusterConfigTaskExecutor.java | 19 +++
.../config/executor/IConfigTaskExecutor.java | 2 +
.../executor/StandaloneConfigTaskExecutor.java | 10 ++
.../config/metadata/ShowClusterParametersTask.java | 136 +++++++++++++++++++++
.../iotdb/db/mpp/plan/parser/ASTVisitor.java | 11 +-
.../statement/metadata/ShowClusterStatement.java | 9 ++
.../src/main/thrift/confignode.thrift | 42 +++++--
31 files changed, 581 insertions(+), 129 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 3aea385462..db906047c5 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
@@ -194,4 +194,5 @@ keyWords
| WITHOUT
| WRITABLE
| PRIVILEGE_VALUE
+ | PARAMETERS
;
\ No newline at end of file
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 c33bd9c3f9..6c0f6959b8 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 | showClusterDetails | showRegion | showDataNodes | showConfigNodes
+ | showFunctions | showTriggers | showContinuousQueries | showTTL | showAllTTL | showCluster | showRegion | showDataNodes | showConfigNodes
| showSchemaTemplates | showNodesInSchemaTemplate
| showPathsUsingSchemaTemplate | showPathsSetSchemaTemplate
| countStorageGroup | countDevices | countTimeseries | countNodes
@@ -336,12 +336,7 @@ showAllTTL
// Show Cluster
showCluster
- : SHOW CLUSTER
- ;
-
-// Show Cluster Details
-showClusterDetails
- : SHOW CLUSTER DETAILS
+ : SHOW CLUSTER (DETAILS | PARAMETERS)?
;
// Show Region
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 f531c27425..629f7e0c39 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
@@ -121,6 +121,10 @@ CLUSTER
: C L U S T E R
;
+PARAMETERS
+ : P A R A M E T E R S
+ ;
+
CONCAT
: C O N C A T
;
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 4d8d0990c0..b765b81675 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
@@ -30,6 +30,7 @@ import org.apache.iotdb.common.rpc.thrift.TSeriesPartitionSlot;
import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
import org.apache.iotdb.commons.cluster.NodeStatus;
import org.apache.iotdb.commons.cluster.NodeType;
+import org.apache.iotdb.commons.conf.CommonConfig;
import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.commons.exception.IllegalPathException;
@@ -95,6 +96,7 @@ import org.apache.iotdb.confignode.persistence.node.NodeInfo;
import org.apache.iotdb.confignode.persistence.partition.PartitionInfo;
import org.apache.iotdb.confignode.persistence.schema.ClusterSchemaInfo;
import org.apache.iotdb.confignode.persistence.sync.ClusterSyncInfo;
+import org.apache.iotdb.confignode.rpc.thrift.TClusterParameters;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterReq;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterResp;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRestartReq;
@@ -133,6 +135,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionTableResp;
import org.apache.iotdb.confignode.rpc.thrift.TSetDataNodeStatusReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowCQResp;
+import org.apache.iotdb.confignode.rpc.thrift.TShowClusterParametersResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
@@ -173,6 +176,9 @@ public class ConfigManager implements IManager {
private static final Logger LOGGER = LoggerFactory.getLogger(ConfigManager.class);
+ private static final ConfigNodeConfig CONF = ConfigNodeDescriptor.getInstance().getConf();
+ private static final CommonConfig COMMON_CONF = CommonDescriptor.getInstance().getConfig();
+
/** Manage PartitionTable read/write requests through the ConsensusLayer */
private volatile ConsensusManager consensusManager;
@@ -394,6 +400,40 @@ public class ConfigManager implements IManager {
}
}
+ @Override
+ public TShowClusterParametersResp showClusterParameters() {
+ TSStatus status = confirmLeader();
+ TShowClusterParametersResp resp = new TShowClusterParametersResp();
+ resp.setStatus(status);
+ if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ resp.setClusterParameters(getClusterParameters());
+ }
+ return resp;
+ }
+
+ public TClusterParameters getClusterParameters() {
+ TClusterParameters clusterParameters = new TClusterParameters();
+ clusterParameters.setClusterName(CONF.getClusterName());
+ clusterParameters.setConfigNodeConsensusProtocolClass(
+ CONF.getConfigNodeConsensusProtocolClass());
+ clusterParameters.setDataRegionConsensusProtocolClass(
+ CONF.getDataRegionConsensusProtocolClass());
+ clusterParameters.setSchemaRegionConsensusProtocolClass(
+ CONF.getSchemaRegionConsensusProtocolClass());
+ clusterParameters.setSeriesPartitionSlotNum(CONF.getSeriesSlotNum());
+ clusterParameters.setSeriesPartitionExecutorClass(CONF.getSeriesPartitionExecutorClass());
+ clusterParameters.setDefaultTTL(COMMON_CONF.getDefaultTTLInMs());
+ clusterParameters.setTimePartitionInterval(CONF.getTimePartitionInterval());
+ clusterParameters.setDataReplicationFactor(CONF.getDataReplicationFactor());
+ clusterParameters.setSchemaReplicationFactor(CONF.getSchemaReplicationFactor());
+ clusterParameters.setDataRegionPerProcessor(CONF.getDataRegionPerProcessor());
+ clusterParameters.setSchemaRegionPerDataNode(CONF.getSchemaRegionPerDataNode());
+ clusterParameters.setDiskSpaceWarningThreshold(COMMON_CONF.getDiskSpaceWarningThreshold());
+ clusterParameters.setReadConsistencyLevel(CONF.getReadConsistencyLevel());
+ clusterParameters.setLeastDataRegionGroupNum(CONF.getLeastDataRegionGroupNum());
+ return clusterParameters;
+ }
+
@Override
public TSStatus setTTL(SetTTLPlan setTTLPlan) {
TSStatus status = confirmLeader();
@@ -822,50 +862,76 @@ public class ConfigManager implements IManager {
public TSStatus checkConfigNodeGlobalConfig(TConfigNodeRegisterReq req) {
final String errorPrefix = "Reject register, please ensure that the parameter ";
final String errorSuffix = " is consistent with the Seed-ConfigNode.";
-
- ConfigNodeConfig conf = ConfigNodeDescriptor.getInstance().getConf();
TSStatus errorStatus = new TSStatus(TSStatusCode.CONFIGURATION_ERROR.getStatusCode());
- if (!req.getDataRegionConsensusProtocolClass()
- .equals(conf.getDataRegionConsensusProtocolClass())) {
+ TClusterParameters clusterParameters = req.getClusterParameters();
+
+ if (!clusterParameters.getClusterName().equals(CONF.getClusterName())) {
+ return errorStatus.setMessage(errorPrefix + "cluster_name" + errorSuffix);
+ }
+
+ if (!clusterParameters
+ .getConfigNodeConsensusProtocolClass()
+ .equals(CONF.getConfigNodeConsensusProtocolClass())) {
+ return errorStatus.setMessage(
+ errorPrefix + "config_node_consensus_protocol_class" + errorSuffix);
+ }
+ if (!clusterParameters
+ .getDataRegionConsensusProtocolClass()
+ .equals(CONF.getDataRegionConsensusProtocolClass())) {
return errorStatus.setMessage(
errorPrefix + "data_region_consensus_protocol_class" + errorSuffix);
}
- if (!req.getSchemaRegionConsensusProtocolClass()
- .equals(conf.getSchemaRegionConsensusProtocolClass())) {
+ if (!clusterParameters
+ .getSchemaRegionConsensusProtocolClass()
+ .equals(CONF.getSchemaRegionConsensusProtocolClass())) {
return errorStatus.setMessage(
errorPrefix + "schema_region_consensus_protocol_class" + errorSuffix);
}
- if (req.getSeriesPartitionSlotNum() != conf.getSeriesSlotNum()) {
+
+ if (clusterParameters.getSeriesPartitionSlotNum() != CONF.getSeriesSlotNum()) {
return errorStatus.setMessage(errorPrefix + "series_partition_slot_num" + errorSuffix);
}
- if (!req.getSeriesPartitionExecutorClass().equals(conf.getSeriesPartitionExecutorClass())) {
+ if (!clusterParameters
+ .getSeriesPartitionExecutorClass()
+ .equals(CONF.getSeriesPartitionExecutorClass())) {
return errorStatus.setMessage(errorPrefix + "series_partition_executor_class" + errorSuffix);
}
- if (req.getDefaultTTL() != CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()) {
+
+ if (clusterParameters.getDefaultTTL()
+ != CommonDescriptor.getInstance().getConfig().getDefaultTTLInMs()) {
return errorStatus.setMessage(errorPrefix + "default_ttl" + errorSuffix);
}
- if (req.getTimePartitionInterval() != conf.getTimePartitionInterval()) {
+ if (clusterParameters.getTimePartitionInterval() != CONF.getTimePartitionInterval()) {
return errorStatus.setMessage(errorPrefix + "time_partition_interval" + errorSuffix);
}
- if (req.getSchemaReplicationFactor() != conf.getSchemaReplicationFactor()) {
+
+ if (clusterParameters.getSchemaReplicationFactor() != CONF.getSchemaReplicationFactor()) {
return errorStatus.setMessage(errorPrefix + "schema_replication_factor" + errorSuffix);
}
- if (req.getSchemaRegionPerDataNode() != conf.getSchemaRegionPerDataNode()) {
- return errorStatus.setMessage(errorPrefix + "schema_region_per_data_node" + errorSuffix);
- }
- if (req.getDataReplicationFactor() != conf.getDataReplicationFactor()) {
+ if (clusterParameters.getDataReplicationFactor() != CONF.getDataReplicationFactor()) {
return errorStatus.setMessage(errorPrefix + "data_replication_factor" + errorSuffix);
}
- if (req.getDataRegionPerProcessor() != conf.getDataRegionPerProcessor()) {
+
+ if (clusterParameters.getSchemaRegionPerDataNode() != CONF.getSchemaRegionPerDataNode()) {
+ return errorStatus.setMessage(errorPrefix + "schema_region_per_data_node" + errorSuffix);
+ }
+ if (clusterParameters.getDataRegionPerProcessor() != CONF.getDataRegionPerProcessor()) {
return errorStatus.setMessage(errorPrefix + "data_region_per_processor" + errorSuffix);
}
- if (!req.getReadConsistencyLevel().equals(conf.getReadConsistencyLevel())) {
+
+ if (!clusterParameters.getReadConsistencyLevel().equals(CONF.getReadConsistencyLevel())) {
return errorStatus.setMessage(errorPrefix + "read_consistency_level" + errorSuffix);
}
- if (req.getDiskSpaceWarningThreshold()
+
+ if (clusterParameters.getDiskSpaceWarningThreshold()
!= CommonDescriptor.getInstance().getConfig().getDiskSpaceWarningThreshold()) {
return errorStatus.setMessage(errorPrefix + "disk_space_warning_threshold" + errorSuffix);
}
+
+ if (clusterParameters.getLeastDataRegionGroupNum() != CONF.getLeastDataRegionGroupNum()) {
+ return errorStatus.setMessage(errorPrefix + "least_data_region_group_num" + errorSuffix);
+ }
+
return null;
}
@@ -1492,16 +1558,6 @@ public class ConfigManager implements IManager {
return filteredRegionReplicaSets;
}
- public TConfigNodeLocation getConfigNodeLocation(int nodeId) {
- List<TConfigNodeLocation> configNodeLocations = this.nodeManager.getRegisteredConfigNodes();
- for (TConfigNodeLocation configNodeLocation : configNodeLocations) {
- if (configNodeLocation.getConfigNodeId() == nodeId) {
- return configNodeLocation;
- }
- }
- return null;
- }
-
public TSStatus transfer(List<TDataNodeLocation> newUnknownDataList) {
Map<Integer, TDataNodeLocation> runningDataNodeLocationMap = new HashMap<>();
nodeManager
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 4a1534b88b..490b512091 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
@@ -87,6 +87,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TSchemaPartitionTableResp;
import org.apache.iotdb.confignode.rpc.thrift.TSetDataNodeStatusReq;
import org.apache.iotdb.confignode.rpc.thrift.TSetSchemaTemplateReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowCQResp;
+import org.apache.iotdb.confignode.rpc.thrift.TShowClusterParametersResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
@@ -227,8 +228,20 @@ public interface IManager {
*/
DataSet getDataNodeConfiguration(GetDataNodeConfigurationPlan getDataNodeConfigurationPlan);
+ /**
+ * Get Cluster Nodes' information
+ *
+ * @return TShowClusterResp
+ */
TShowClusterResp showCluster();
+ /**
+ * Get Cluster parameters
+ *
+ * @return TShowClusterParametersResp
+ */
+ TShowClusterParametersResp showClusterParameters();
+
TSStatus setTTL(SetTTLPlan configRequest);
TSStatus setSchemaReplicationFactor(SetSchemaReplicationFactorPlan configPhysicalPlan);
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
index 156ae2fb5c..397ede2a01 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java
@@ -21,8 +21,6 @@ package org.apache.iotdb.confignode.service;
import org.apache.iotdb.common.rpc.thrift.TConfigNodeLocation;
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.conf.CommonConfig;
-import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.commons.exception.StartupException;
import org.apache.iotdb.commons.service.JMXService;
import org.apache.iotdb.commons.service.RegisterManager;
@@ -58,7 +56,6 @@ public class ConfigNode implements ConfigNodeMBean {
private static final Logger LOGGER = LoggerFactory.getLogger(ConfigNode.class);
private static final ConfigNodeConfig CONF = ConfigNodeDescriptor.getInstance().getConf();
- private static final CommonConfig COMMON_CONF = CommonDescriptor.getInstance().getConfig();
private static final int STARTUP_RETRY_NUM = 10;
private static final int SCHEDULE_WAITING_RETRY_NUM = 20;
@@ -238,19 +235,7 @@ public class ConfigNode implements ConfigNodeMBean {
INIT_NON_SEED_CONFIG_NODE_ID,
new TEndPoint(CONF.getInternalAddress(), CONF.getInternalPort()),
new TEndPoint(CONF.getInternalAddress(), CONF.getConsensusPort())),
- CONF.getDataRegionConsensusProtocolClass(),
- CONF.getSchemaRegionConsensusProtocolClass(),
- CONF.getSeriesSlotNum(),
- CONF.getSeriesPartitionExecutorClass(),
- COMMON_CONF.getDefaultTTLInMs(),
- CONF.getTimePartitionInterval(),
- CONF.getSchemaReplicationFactor(),
- CONF.getSchemaRegionPerDataNode(),
- CONF.getDataReplicationFactor(),
- CONF.getDataRegionPerProcessor(),
- CONF.getReadConsistencyLevel(),
- COMMON_CONF.getDiskSpaceWarningThreshold(),
- CONF.getLeastDataRegionGroupNum());
+ configManager.getClusterParameters());
TEndPoint targetConfigNode = CONF.getTargetConfigNode();
if (targetConfigNode == null) {
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 c31911089b..7daf3d6eda 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
@@ -132,6 +132,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.TShowCQResp;
+import org.apache.iotdb.confignode.rpc.thrift.TShowClusterParametersResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
@@ -260,6 +261,11 @@ public class ConfigNodeRPCServiceProcessor implements IConfigNodeRPCService.Ifac
return configManager.showCluster();
}
+ @Override
+ public TShowClusterParametersResp showClusterParameters() throws TException {
+ return configManager.showClusterParameters();
+ }
+
@Override
public TSStatus setStorageGroup(TSetStorageGroupReq req) throws TException {
TStorageGroupSchema storageGroupSchema = req.getStorageGroup();
diff --git a/docs/UserGuide/Cluster/Cluster-Maintenance.md b/docs/UserGuide/Cluster/Cluster-Maintenance.md
index a0b77068f6..8573db4119 100644
--- a/docs/UserGuide/Cluster/Cluster-Maintenance.md
+++ b/docs/UserGuide/Cluster/Cluster-Maintenance.md
@@ -21,6 +21,41 @@
# Cluster Information Query Command
+## Show Cluster Parameters
+
+Currently, IoTDB supports showing key parameters of the cluster:
+```
+SHOW CLUSTER PARAMETERS
+```
+
+Eg:
+```
+IoTDB> show cluster parameters
++----------------------------------+-----------------------------------------------------------------+
+| ClusterParameters| Value|
++----------------------------------+-----------------------------------------------------------------+
+| ClusterName| defaultCluster|
+| DataReplicationFactor| 1|
+| SchemaReplicationFactor| 1|
+| DataRegionConsensusProtocolClass| org.apache.iotdb.consensus.iot.IoTConsensus|
+|SchemaRegionConsensusProtocolClass| org.apache.iotdb.consensus.ratis.RatisConsensus|
+| ConfigNodeConsensusProtocolClass| org.apache.iotdb.consensus.ratis.RatisConsensus|
+| TimePartitionInterval| 604800000|
+| DefaultTTL(ms)| 9223372036854775807|
+| ReadConsistencyLevel| strong|
+| SchemaRegionPerDataNode| 1.0|
+| DataRegionPerProcessor| 1.0|
+| LeastDataRegionGroupNum| 5|
+| SeriesSlotNum| 10000|
+| SeriesSlotExecutorClass|org.apache.iotdb.commons.partition.executor.hash.BKDRHashExecutor|
+| DiskSpaceWarningThreshold| 0.05|
++----------------------------------+-----------------------------------------------------------------+
+Total line number = 15
+It costs 0.242s
+```
+
+**Notice:** Ensure that all key parameters displayed in this SQL are consist on each node in the same cluster
+
## Show ConfigNode information
Currently, IoTDB supports showing ConfigNode information by the following SQL:
diff --git a/docs/zh/UserGuide/Cluster/Cluster-Concept.md b/docs/zh/UserGuide/Cluster/Cluster-Concept.md
index 06bb272ee7..5e16fc2ea6 100644
--- a/docs/zh/UserGuide/Cluster/Cluster-Concept.md
+++ b/docs/zh/UserGuide/Cluster/Cluster-Concept.md
@@ -39,18 +39,18 @@ Client 只能通过 DataNode 进行数据读写。
### 名词解释
-| 名词 | 类型 | 解释 |
-|:------------------|:--------------|:-------------------------------------|
-| ConfigNode | 节点角色 | 配置节点,管理集群节点信息、分区信息,监控集群状态、控制负载均衡 |
-| DataNode | 节点角色 | 数据节点,管理数据、元数据 |
-| Database | 元数据 | 数据库,不同数据库的数据物理隔离 |
-| DeviceId | 设备名 | 元数据树中从 root 到倒数第二级的全路径表示一个设备名 |
-| SeriesSlot | 元数据分区 | 每个 Database 包含多个元数据分区,根据设备名进行分区 |
-| SchemaRegion | 一组元数据分区 | 多个 SeriesSlot 的集合 |
-| SchemaRegionGroup | 逻辑概念 | 包含元数据副本数个 SchemaRegion,管理相同的元数据,互为备份 |
-| SeriesTimeSlot | 数据分区 | 一个元数据分区的一段时间的数据对应一个数据分区,每个元数据分区对应多个数据分区,根据时间范围进行分区 |
-| DataRegion | 一组数据分区 | 多个 SeriesTimeSlot 的集合 |
-| DataRegionGroup | 逻辑概念 | 包含数据副本数个 DataRegion,管理相同的数据,互为备份 |
+| 名词 | 类型 | 解释 |
+|:------------------|:--------|:---------------------------------------------------|
+| ConfigNode | 节点角色 | 配置节点,管理集群节点信息、分区信息,监控集群状态、控制负载均衡 |
+| DataNode | 节点角色 | 数据节点,管理数据、元数据 |
+| Database | 元数据 | 数据库,不同数据库的数据物理隔离 |
+| DeviceId | 设备名 | 元数据树中从 root 到倒数第二级的全路径表示一个设备名 |
+| SeriesSlot | 元数据分区 | 每个 Database 包含多个元数据分区,根据设备名进行分区 |
+| SchemaRegion | 一组元数据分区 | 多个 SeriesSlot 的集合 |
+| SchemaRegionGroup | 逻辑概念 | 包含元数据副本数个 SchemaRegion,管理相同的元数据,互为备份 |
+| SeriesTimeSlot | 数据分区 | 一个元数据分区的一段时间的数据对应一个数据分区,每个元数据分区对应多个数据分区,根据时间范围进行分区 |
+| DataRegion | 一组数据分区 | 多个 SeriesTimeSlot 的集合 |
+| DataRegionGroup | 逻辑概念 | 包含数据副本数个 DataRegion,管理相同的数据,互为备份 |
## 集群特点
diff --git a/docs/zh/UserGuide/Cluster/Cluster-Maintenance.md b/docs/zh/UserGuide/Cluster/Cluster-Maintenance.md
index 62a6cce35c..9f38f681fc 100644
--- a/docs/zh/UserGuide/Cluster/Cluster-Maintenance.md
+++ b/docs/zh/UserGuide/Cluster/Cluster-Maintenance.md
@@ -21,6 +21,41 @@
# 集群运维命令
+## 展示集群配置
+
+当前 IoTDB 支持使用如下 SQL 展示集群的关键参数:
+```
+SHOW CLUSTER PARAMETERS
+```
+
+示例:
+```
+IoTDB> show cluster parameters
++----------------------------------+-----------------------------------------------------------------+
+| ClusterParameters| Value|
++----------------------------------+-----------------------------------------------------------------+
+| ClusterName| defaultCluster|
+| DataReplicationFactor| 1|
+| SchemaReplicationFactor| 1|
+| DataRegionConsensusProtocolClass| org.apache.iotdb.consensus.iot.IoTConsensus|
+|SchemaRegionConsensusProtocolClass| org.apache.iotdb.consensus.ratis.RatisConsensus|
+| ConfigNodeConsensusProtocolClass| org.apache.iotdb.consensus.ratis.RatisConsensus|
+| TimePartitionInterval| 604800000|
+| DefaultTTL(ms)| 9223372036854775807|
+| ReadConsistencyLevel| strong|
+| SchemaRegionPerDataNode| 1.0|
+| DataRegionPerProcessor| 1.0|
+| LeastDataRegionGroupNum| 5|
+| SeriesSlotNum| 10000|
+| SeriesSlotExecutorClass|org.apache.iotdb.commons.partition.executor.hash.BKDRHashExecutor|
+| DiskSpaceWarningThreshold| 0.05|
++----------------------------------+-----------------------------------------------------------------+
+Total line number = 15
+It costs 0.242s
+```
+
+**注意:** 必须保证该 SQL 展示的所有配置参数在同一集群各个节点完全一致
+
## 展示 ConfigNode 信息
当前 IoTDB 支持使用如下 SQL 展示 ConfigNode 的信息:
diff --git a/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseConfig.java b/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseConfig.java
index cfe1e2d554..f5acbeebc0 100644
--- a/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseConfig.java
+++ b/integration-test/src/main/java/org/apache/iotdb/itbase/env/BaseConfig.java
@@ -202,7 +202,11 @@ public interface BaseConfig {
return this;
}
- default String getConfigNodeConsesusProtocolClass() {
+ default String getClusterName() {
+ return "defaultCluster";
+ }
+
+ default String getConfigNodeConsensusProtocolClass() {
return "org.apache.iotdb.consensus.simple.SimpleConsensus";
}
@@ -271,6 +275,22 @@ public interface BaseConfig {
return 1;
}
+ default double getDataRegionPerProcessor() {
+ return 1.0;
+ }
+
+ default double getSchemaRegionPerDataNode() {
+ return 1.0;
+ }
+
+ default double getDiskSpaceWarningThreshold() {
+ return 0.05;
+ }
+
+ default String getReadConsistencyLevel() {
+ return "strong";
+ }
+
default BaseConfig setDataReplicationFactor(int dataReplicationFactor) {
return this;
}
@@ -287,6 +307,14 @@ public interface BaseConfig {
return 10000;
}
+ default String getSeriesPartitionExecutorClass() {
+ return "org.apache.iotdb.commons.partition.executor.hash.BKDRHashExecutor";
+ }
+
+ default long getDefaultTTL() {
+ return Long.MAX_VALUE;
+ }
+
default BaseConfig setTimePartitionInterval(long timePartitionInterval) {
return this;
}
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/IoTDBConfigNodeSnapshotIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/IoTDBConfigNodeSnapshotIT.java
index ca6493423f..1348db3d0d 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/IoTDBConfigNodeSnapshotIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/IoTDBConfigNodeSnapshotIT.java
@@ -91,7 +91,7 @@ public class IoTDBConfigNodeSnapshotIT {
@Before
public void setUp() throws Exception {
originalConfigNodeConsensusProtocolClass =
- ConfigFactory.getConfig().getConfigNodeConsesusProtocolClass();
+ ConfigFactory.getConfig().getConfigNodeConsensusProtocolClass();
ConfigFactory.getConfig().setConfigNodeConsesusProtocolClass(ConsensusFactory.RATIS_CONSENSUS);
originalRatisSnapshotTriggerThreshold =
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterNodeErrorStartUpIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterNodeErrorStartUpIT.java
index b1ccbd6a32..d331af6226 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterNodeErrorStartUpIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterNodeErrorStartUpIT.java
@@ -79,7 +79,7 @@ public class IoTDBClusterNodeErrorStartUpIT {
@Before
public void setUp() throws Exception {
- originalConfigNodeConsensusProtocolClass = CONF.getConfigNodeConsesusProtocolClass();
+ originalConfigNodeConsensusProtocolClass = CONF.getConfigNodeConsensusProtocolClass();
CONF.setConfigNodeConsesusProtocolClass(testConsensusProtocolClass);
// Init 3C1D environment
@@ -109,6 +109,7 @@ public class IoTDBClusterNodeErrorStartUpIT {
(SyncConfigNodeIServiceClient) EnvFactory.getEnv().getLeaderConfigNodeConnection()) {
TConfigNodeRegisterReq req =
ConfigNodeTestUtils.generateTConfigNodeRegisterReq(conflictConfigNodeWrapper);
+ req.getClusterParameters().setConfigNodeConsensusProtocolClass(testConsensusProtocolClass);
TConfigNodeRegisterResp resp = client.registerConfigNode(req);
Assert.assertEquals(
TSStatusCode.REJECT_NODE_START.getStatusCode(), resp.getStatus().getCode());
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterNodeGetterIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterNodeGetterIT.java
index 79bbd29c38..1462f579cd 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterNodeGetterIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterNodeGetterIT.java
@@ -24,12 +24,13 @@ import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.client.sync.SyncConfigNodeIServiceClient;
+import org.apache.iotdb.confignode.rpc.thrift.TClusterParameters;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeInfo;
import org.apache.iotdb.confignode.rpc.thrift.TDataNodeConfigurationResp;
import org.apache.iotdb.confignode.rpc.thrift.TDataNodeInfo;
-import org.apache.iotdb.confignode.rpc.thrift.TDataNodeRegisterReq;
import org.apache.iotdb.confignode.rpc.thrift.TDataNodeRemoveReq;
import org.apache.iotdb.confignode.rpc.thrift.TDataNodeRemoveResp;
+import org.apache.iotdb.confignode.rpc.thrift.TShowClusterParametersResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
@@ -40,6 +41,7 @@ import org.apache.iotdb.it.env.DataNodeWrapper;
import org.apache.iotdb.it.env.EnvFactory;
import org.apache.iotdb.it.framework.IoTDBTestRunner;
import org.apache.iotdb.itbase.category.ClusterIT;
+import org.apache.iotdb.itbase.env.BaseConfig;
import org.apache.iotdb.rpc.TSStatusCode;
import org.junit.After;
@@ -62,6 +64,8 @@ import static org.junit.Assert.fail;
@Category({ClusterIT.class})
public class IoTDBClusterNodeGetterIT {
+ private static final BaseConfig CONF = ConfigFactory.getConfig();
+
private static final int testConfigNodeNum = 2;
private static final int testDataNodeNum = 2;
@@ -72,15 +76,12 @@ public class IoTDBClusterNodeGetterIT {
@Before
public void setUp() throws Exception {
- originalConfigNodeConsensusProtocolClass =
- ConfigFactory.getConfig().getConfigNodeConsesusProtocolClass();
- ConfigFactory.getConfig().setConfigNodeConsesusProtocolClass(testConsensusProtocolClass);
- originalSchemaRegionConsensusProtocolClass =
- ConfigFactory.getConfig().getSchemaRegionConsensusProtocolClass();
- ConfigFactory.getConfig().setSchemaRegionConsensusProtocolClass(testConsensusProtocolClass);
- originalDataRegionConsensusProtocolClass =
- ConfigFactory.getConfig().getDataRegionConsensusProtocolClass();
- ConfigFactory.getConfig().setDataRegionConsensusProtocolClass(testConsensusProtocolClass);
+ originalConfigNodeConsensusProtocolClass = CONF.getConfigNodeConsensusProtocolClass();
+ CONF.setConfigNodeConsesusProtocolClass(testConsensusProtocolClass);
+ originalSchemaRegionConsensusProtocolClass = CONF.getSchemaRegionConsensusProtocolClass();
+ CONF.setSchemaRegionConsensusProtocolClass(testConsensusProtocolClass);
+ originalDataRegionConsensusProtocolClass = CONF.getDataRegionConsensusProtocolClass();
+ CONF.setDataRegionConsensusProtocolClass(testConsensusProtocolClass);
// Init 2C2D environment
EnvFactory.getEnv().initClusterEnvironment(testConfigNodeNum, testDataNodeNum);
@@ -89,12 +90,9 @@ public class IoTDBClusterNodeGetterIT {
@After
public void tearDown() {
EnvFactory.getEnv().cleanAfterClass();
- ConfigFactory.getConfig()
- .setConfigNodeConsesusProtocolClass(originalConfigNodeConsensusProtocolClass);
- ConfigFactory.getConfig()
- .setSchemaRegionConsensusProtocolClass(originalSchemaRegionConsensusProtocolClass);
- ConfigFactory.getConfig()
- .setDataRegionConsensusProtocolClass(originalDataRegionConsensusProtocolClass);
+ CONF.setConfigNodeConsesusProtocolClass(originalConfigNodeConsensusProtocolClass);
+ CONF.setSchemaRegionConsensusProtocolClass(originalSchemaRegionConsensusProtocolClass);
+ CONF.setDataRegionConsensusProtocolClass(originalDataRegionConsensusProtocolClass);
}
@Test
@@ -144,6 +142,43 @@ public class IoTDBClusterNodeGetterIT {
assertTrue(found);
}
+ /* Tests showClusterParameters */
+ TShowClusterParametersResp showClusterParametersResp = client.showClusterParameters();
+ Assert.assertEquals(
+ TSStatusCode.SUCCESS_STATUS.getStatusCode(),
+ showClusterParametersResp.getStatus().getCode());
+ TClusterParameters clusterParameters = showClusterParametersResp.getClusterParameters();
+ Assert.assertEquals(
+ testConsensusProtocolClass, clusterParameters.getConfigNodeConsensusProtocolClass());
+ Assert.assertEquals(
+ testConsensusProtocolClass, clusterParameters.getDataRegionConsensusProtocolClass());
+ Assert.assertEquals(
+ testConsensusProtocolClass, clusterParameters.getSchemaRegionConsensusProtocolClass());
+ Assert.assertEquals(
+ CONF.getSeriesPartitionSlotNum(), clusterParameters.getSeriesPartitionSlotNum());
+ Assert.assertEquals(
+ CONF.getSeriesPartitionExecutorClass(),
+ clusterParameters.getSeriesPartitionExecutorClass());
+ Assert.assertEquals(CONF.getDefaultTTL(), clusterParameters.getDefaultTTL());
+ Assert.assertEquals(
+ CONF.getTimePartitionInterval(), clusterParameters.getTimePartitionInterval());
+ Assert.assertEquals(
+ CONF.getDataReplicationFactor(), clusterParameters.getDataReplicationFactor());
+ Assert.assertEquals(
+ CONF.getSchemaReplicationFactor(), clusterParameters.getSchemaReplicationFactor());
+ Assert.assertEquals(
+ CONF.getDataRegionPerProcessor(), clusterParameters.getDataRegionPerProcessor(), 0.01);
+ Assert.assertEquals(
+ CONF.getSchemaRegionPerDataNode(), clusterParameters.getSchemaRegionPerDataNode(), 0.01);
+ Assert.assertEquals(
+ CONF.getDiskSpaceWarningThreshold(),
+ clusterParameters.getDiskSpaceWarningThreshold(),
+ 0.01);
+ Assert.assertEquals(
+ CONF.getReadConsistencyLevel(), clusterParameters.getReadConsistencyLevel());
+ Assert.assertEquals(
+ CONF.getLeastDataRegionGroupNum(), clusterParameters.getLeastDataRegionGroupNum());
+
/* Test showConfigNodes */
TShowConfigNodesResp showConfigNodesResp = client.showConfigNodes();
// Check ConfigNodeInfo
@@ -220,12 +255,8 @@ public class IoTDBClusterNodeGetterIT {
try (SyncConfigNodeIServiceClient client =
(SyncConfigNodeIServiceClient) EnvFactory.getEnv().getLeaderConfigNodeConnection()) {
- /* Test success re-register */
- TDataNodeRegisterReq dataNodeRegisterReq = new TDataNodeRegisterReq();
- TDataNodeConfiguration dataNodeConfiguration = new TDataNodeConfiguration();
- TDataNodeLocation dataNodeLocation = new TDataNodeLocation();
-
// Pick a registered DataNode
+ TDataNodeLocation dataNodeLocation = new TDataNodeLocation();
TShowDataNodesResp showDataNodesResp = client.showDataNodes();
TDataNodeInfo dataNodeInfo = showDataNodesResp.getDataNodesInfoList().get(0);
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterRestartIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterRestartIT.java
index 28f2df6bb6..0191ed3323 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterRestartIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/cluster/IoTDBClusterRestartIT.java
@@ -83,7 +83,7 @@ public class IoTDBClusterRestartIT {
@Before
public void setUp() throws Exception {
originalConfigNodeConsensusProtocolClass =
- ConfigFactory.getConfig().getConfigNodeConsesusProtocolClass();
+ ConfigFactory.getConfig().getConfigNodeConsensusProtocolClass();
originalSchemaRegionConsensusProtocolClass =
ConfigFactory.getConfig().getSchemaRegionConsensusProtocolClass();
originalDataRegionConsensusProtocolClass =
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/load/IoTDBConfigNodeSwitchLeaderIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/load/IoTDBConfigNodeSwitchLeaderIT.java
index 81abd2087c..e1b990e9f8 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/load/IoTDBConfigNodeSwitchLeaderIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/load/IoTDBConfigNodeSwitchLeaderIT.java
@@ -71,7 +71,7 @@ public class IoTDBConfigNodeSwitchLeaderIT {
@Before
public void setUp() throws Exception {
originalConfigNodeConsensusProtocolClass =
- ConfigFactory.getConfig().getConfigNodeConsesusProtocolClass();
+ ConfigFactory.getConfig().getConfigNodeConsensusProtocolClass();
originalSchemaRegionConsensusProtocolClass =
ConfigFactory.getConfig().getSchemaRegionConsensusProtocolClass();
originalDataRegionConsensusProtocolClass =
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionDurableIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionDurableIT.java
index 665155e8ae..a5da4cf85e 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionDurableIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionDurableIT.java
@@ -103,7 +103,7 @@ public class IoTDBPartitionDurableIT {
@Before
public void setUp() throws Exception {
originalConfigNodeConsensusProtocolClass =
- ConfigFactory.getConfig().getConfigNodeConsesusProtocolClass();
+ ConfigFactory.getConfig().getConfigNodeConsensusProtocolClass();
originalSchemaRegionConsensusProtocolClass =
ConfigFactory.getConfig().getSchemaRegionConsensusProtocolClass();
originalDataRegionConsensusProtocolClass =
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
index f50fb390d4..da6e76e3e4 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java
@@ -106,7 +106,7 @@ public class IoTDBPartitionGetterIT {
@BeforeClass
public static void setUp() throws Exception {
originalConfigNodeConsensusProtocolClass =
- ConfigFactory.getConfig().getConfigNodeConsesusProtocolClass();
+ ConfigFactory.getConfig().getConfigNodeConsensusProtocolClass();
originalSchemaRegionConsensusProtocolClass =
ConfigFactory.getConfig().getSchemaRegionConsensusProtocolClass();
originalDataRegionConsensusProtocolClass =
diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/utils/ConfigNodeTestUtils.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/utils/ConfigNodeTestUtils.java
index 6914fe5f1f..66376ae959 100644
--- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/utils/ConfigNodeTestUtils.java
+++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/utils/ConfigNodeTestUtils.java
@@ -30,6 +30,7 @@ import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.commons.path.PathPatternTree;
import org.apache.iotdb.confignode.rpc.thrift.IConfigNodeRPCService;
+import org.apache.iotdb.confignode.rpc.thrift.TClusterParameters;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterReq;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRestartReq;
import org.apache.iotdb.confignode.rpc.thrift.TDataNodeRegisterReq;
@@ -205,24 +206,41 @@ public class ConfigNodeTestUtils {
new TEndPoint(configNodeWrapper.getIp(), configNodeWrapper.getConsensusPort()));
}
+ /**
+ * Generate a ConfigNode register request with the given ConfigNodeLocation and default
+ * configurations
+ *
+ * @param configNodeWrapper The given ConfigNode
+ * @return TConfigNodeRegisterReq for the given ConfigNode
+ */
public static TConfigNodeRegisterReq generateTConfigNodeRegisterReq(
ConfigNodeWrapper configNodeWrapper) {
return new TConfigNodeRegisterReq()
.setConfigNodeLocation(generateTConfigNodeLocation(-1, configNodeWrapper))
- .setDataRegionConsensusProtocolClass(CONF.getDataRegionConsensusProtocolClass())
- .setSchemaRegionConsensusProtocolClass(CONF.getSchemaRegionConsensusProtocolClass())
- .setSeriesPartitionSlotNum(CONF.getSeriesPartitionSlotNum())
- .setSeriesPartitionExecutorClass(
- "org.apache.iotdb.commons.partition.executor.hash.BKDRHashExecutor")
- .setDefaultTTL(Long.MAX_VALUE)
- .setTimePartitionInterval(CONF.getTimePartitionInterval())
- .setSchemaReplicationFactor(CONF.getSchemaReplicationFactor())
- .setDataReplicationFactor(CONF.getDataReplicationFactor())
- .setSchemaRegionPerDataNode(1.0)
- .setDataRegionPerProcessor(1.0)
- .setReadConsistencyLevel("strong")
- .setDiskSpaceWarningThreshold(0.05)
- .setLeastDataRegionGroupNum(CONF.getLeastDataRegionGroupNum());
+ .setClusterParameters(generateClusterParameters());
+ }
+
+ private static TClusterParameters generateClusterParameters() {
+ TClusterParameters clusterParameters = new TClusterParameters();
+ clusterParameters.setClusterName(CONF.getClusterName());
+ clusterParameters.setConfigNodeConsensusProtocolClass(
+ CONF.getConfigNodeConsensusProtocolClass());
+ clusterParameters.setDataRegionConsensusProtocolClass(
+ CONF.getDataRegionConsensusProtocolClass());
+ clusterParameters.setSchemaRegionConsensusProtocolClass(
+ CONF.getSchemaRegionConsensusProtocolClass());
+ clusterParameters.setSeriesPartitionSlotNum(CONF.getSeriesPartitionSlotNum());
+ clusterParameters.setSeriesPartitionExecutorClass(CONF.getSeriesPartitionExecutorClass());
+ clusterParameters.setDefaultTTL(CONF.getDefaultTTL());
+ clusterParameters.setTimePartitionInterval(CONF.getTimePartitionInterval());
+ clusterParameters.setDataReplicationFactor(CONF.getDataReplicationFactor());
+ clusterParameters.setSchemaReplicationFactor(CONF.getSchemaReplicationFactor());
+ clusterParameters.setDataRegionPerProcessor(CONF.getDataRegionPerProcessor());
+ clusterParameters.setSchemaRegionPerDataNode(CONF.getSchemaRegionPerDataNode());
+ clusterParameters.setDiskSpaceWarningThreshold(CONF.getDiskSpaceWarningThreshold());
+ clusterParameters.setReadConsistencyLevel(CONF.getReadConsistencyLevel());
+ clusterParameters.setLeastDataRegionGroupNum(CONF.getLeastDataRegionGroupNum());
+ return clusterParameters;
}
public static TConfigNodeRestartReq generateTConfigNodeRestartReq(
diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java b/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
index 2070527674..b380716089 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/conf/IoTDBConstant.java
@@ -268,8 +268,24 @@ public class IoTDBConstant {
// show cluster status
public static final String NODE_TYPE_CONFIG_NODE = "ConfigNode";
public static final String NODE_TYPE_DATA_NODE = "DataNode";
- public static final String NODE_STATUS_RUNNING = "Running";
- public static final String NODE_STATUS_Down = "Down";
+ public static final String CLUSTER_NAME = "ClusterName";
+ public static final String CONFIG_NODE_CONSENSUS_PROTOCOL_CLASS =
+ "ConfigNodeConsensusProtocolClass";
+ public static final String DATA_REGION_CONSENSUS_PROTOCOL_CLASS =
+ "DataRegionConsensusProtocolClass";
+ public static final String SCHEMA_REGION_CONSENSUS_PROTOCOL_CLASS =
+ "SchemaRegionConsensusProtocolClass";
+ public static final String SERIES_SLOT_NUM = "SeriesSlotNum";
+ public static final String SERIES_SLOT_EXECUTOR_CLASS = "SeriesSlotExecutorClass";
+ public static final String DEFAULT_TTL = "DefaultTTL(ms)";
+ public static final String TIME_PARTITION_INTERVAL = "TimePartitionInterval";
+ public static final String DATA_REPLICATION_FACTOR = "DataReplicationFactor";
+ public static final String SCHEMA_REPLICATION_FACTOR = "SchemaReplicationFactor";
+ public static final String SCHEMA_REGION_PER_DATA_NODE = "SchemaRegionPerDataNode";
+ public static final String DATA_REGION_PER_PROCESSOR = "DataRegionPerProcessor";
+ public static final String READ_CONSISTENCY_LEVEL = "ReadConsistencyLevel";
+ public static final String DISK_SPACE_WARNING_THRESHOLD = "DiskSpaceWarningThreshold";
+ public static final String LEAST_DATA_REGION_GROUP_NUM = "LeastDataRegionGroupNum";
public static final String IOTDB_FOREGROUND = "iotdb-foreground";
public static final String IOTDB_PIDFILE = "iotdb-pidfile";
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 2a4b3b942a..ac2e8b3d82 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
@@ -98,6 +98,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.TShowCQResp;
+import org.apache.iotdb.confignode.rpc.thrift.TShowClusterParametersResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
@@ -478,6 +479,27 @@ public class ConfigNodeClient
throw new TException(MSG_RECONNECTION_FAIL);
}
+ @Override
+ public TShowClusterParametersResp showClusterParameters() throws TException {
+ for (int i = 0; i < RETRY_NUM; i++) {
+ try {
+ TShowClusterParametersResp resp = client.showClusterParameters();
+ if (!updateConfigNodeLeader(resp.status)) {
+ return resp;
+ }
+ } catch (TException e) {
+ logger.warn(
+ "Failed to connect to ConfigNode {} from DataNode {} when executing {}",
+ configNode,
+ config.getAddressAndPort(),
+ Thread.currentThread().getStackTrace()[1].getMethodName());
+ configLeader = null;
+ }
+ waitAndReconnect();
+ }
+ throw new TException(MSG_RECONNECTION_FAIL);
+ }
+
@Override
public TSStatus setStorageGroup(TSetStorageGroupReq req) throws TException {
for (int i = 0; i < RETRY_NUM; i++) {
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 3c788b8eaf..151668e148 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
@@ -58,6 +58,7 @@ public class ColumnHeaderConstant {
public static final String VERSION = "Version";
public static final String BUILD_INFO = "BuildInfo";
public static final String PATHS = "Paths";
+ public static final String CLUSTER_PARAMETERS = "ClusterParameters";
// column names for count statement
public static final String COLUMN = "Column";
@@ -264,6 +265,11 @@ public class ColumnHeaderConstant {
new ColumnHeader(SCHEMA_CONSENSUS_PORT, TSDataType.TEXT),
new ColumnHeader(MPP_PORT, TSDataType.TEXT));
+ public static final List<ColumnHeader> showClusterParametersColumnHeaders =
+ ImmutableList.of(
+ new ColumnHeader(CLUSTER_PARAMETERS, TSDataType.TEXT),
+ new ColumnHeader(VALUE, TSDataType.TEXT));
+
public static final List<ColumnHeader> showFunctionsColumnHeaders =
ImmutableList.of(
new ColumnHeader(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 00d4f7a4e5..76a0038e85 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 getShowClusterParametersHeader() {
+ return new DatasetHeader(ColumnHeaderConstant.showClusterParametersColumnHeaders, true);
+ }
+
public static DatasetHeader getShowClusterDetailsHeader() {
return new DatasetHeader(ColumnHeaderConstant.showClusterDetailsColumnHeaders, true);
}
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 5fe55dadcc..6f678e8ba0 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
@@ -34,6 +34,7 @@ import org.apache.iotdb.db.mpp.plan.execution.config.metadata.GetTimeSlotListTas
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.ShowClusterParametersTask;
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;
@@ -172,9 +173,13 @@ public class ConfigTaskVisitor
@Override
public IConfigTask visitShowCluster(
ShowClusterStatement showClusterStatement, TaskContext context) {
- return showClusterStatement.isDetails()
- ? new ShowClusterDetailsTask(showClusterStatement)
- : new ShowClusterTask(showClusterStatement);
+ if (showClusterStatement.isDetails()) {
+ return new ShowClusterDetailsTask(showClusterStatement);
+ } else if (showClusterStatement.isParameters()) {
+ return new ShowClusterParametersTask();
+ } else {
+ return 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 a20a5cf3b6..5518645d35 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
@@ -60,6 +60,7 @@ import org.apache.iotdb.confignode.rpc.thrift.TGetUDFTableResp;
import org.apache.iotdb.confignode.rpc.thrift.TPipeSinkInfo;
import org.apache.iotdb.confignode.rpc.thrift.TSetStorageGroupReq;
import org.apache.iotdb.confignode.rpc.thrift.TShowCQResp;
+import org.apache.iotdb.confignode.rpc.thrift.TShowClusterParametersResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowClusterResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowConfigNodesResp;
import org.apache.iotdb.confignode.rpc.thrift.TShowDataNodesResp;
@@ -86,6 +87,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.ShowClusterDetailsTask;
+import org.apache.iotdb.db.mpp.plan.execution.config.metadata.ShowClusterParametersTask;
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;
@@ -788,6 +790,23 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor {
return future;
}
+ @Override
+ public SettableFuture<ConfigTaskResult> showClusterParameters() {
+ SettableFuture<ConfigTaskResult> future = SettableFuture.create();
+ TShowClusterParametersResp showClusterParametersResp = new TShowClusterParametersResp();
+ try (ConfigNodeClient client =
+ CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.configNodeRegionId)) {
+ showClusterParametersResp = client.showClusterParameters();
+ } catch (ClientManagerException | TException e) {
+ future.setException(e);
+ }
+
+ // build TSBlock
+ ShowClusterParametersTask.buildTSBlock(showClusterParametersResp, future);
+
+ return future;
+ }
+
@Override
public SettableFuture<ConfigTaskResult> showTTL(ShowTTLStatement showTTLStatement) {
SettableFuture<ConfigTaskResult> future = SettableFuture.create();
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 1e5ba37b17..292164396a 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
@@ -97,6 +97,8 @@ public interface IConfigTaskExecutor {
SettableFuture<ConfigTaskResult> showCluster(ShowClusterStatement showClusterStatement);
+ SettableFuture<ConfigTaskResult> showClusterParameters();
+
SettableFuture<ConfigTaskResult> showTTL(ShowTTLStatement showTTLStatement);
SettableFuture<ConfigTaskResult> showRegion(ShowRegionStatement showRegionStatement);
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 15be2fa2cd..66df0af9d6 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
@@ -378,6 +378,16 @@ public class StandaloneConfigTaskExecutor implements IConfigTaskExecutor {
return future;
}
+ @Override
+ public SettableFuture<ConfigTaskResult> showClusterParameters() {
+ SettableFuture<ConfigTaskResult> future = SettableFuture.create();
+ future.setException(
+ new IoTDBException(
+ "Executing show cluster parameters in standalone mode is not supported",
+ TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode()));
+ return future;
+ }
+
@Override
public SettableFuture<ConfigTaskResult> showTTL(ShowTTLStatement showTTLStatement) {
SettableFuture<ConfigTaskResult> future = SettableFuture.create();
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterParametersTask.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterParametersTask.java
new file mode 100644
index 0000000000..fab89048a1
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/metadata/ShowClusterParametersTask.java
@@ -0,0 +1,136 @@
+/*
+ * 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.metadata;
+
+import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.confignode.rpc.thrift.TClusterParameters;
+import org.apache.iotdb.confignode.rpc.thrift.TShowClusterParametersResp;
+import org.apache.iotdb.db.mpp.common.header.ColumnHeader;
+import org.apache.iotdb.db.mpp.common.header.ColumnHeaderConstant;
+import org.apache.iotdb.db.mpp.common.header.DatasetHeader;
+import org.apache.iotdb.db.mpp.common.header.DatasetHeaderFactory;
+import org.apache.iotdb.db.mpp.plan.execution.config.ConfigTaskResult;
+import org.apache.iotdb.db.mpp.plan.execution.config.IConfigTask;
+import org.apache.iotdb.db.mpp.plan.execution.config.executor.IConfigTaskExecutor;
+import org.apache.iotdb.rpc.TSStatusCode;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+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;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+public class ShowClusterParametersTask implements IConfigTask {
+
+ public ShowClusterParametersTask() {
+ // Empty constructor
+ }
+
+ private static void buildTSBlock(TsBlockBuilder builder, Binary parameter, Binary value) {
+ builder.getTimeColumnBuilder().writeLong(0L);
+ builder.getColumnBuilder(0).writeBinary(parameter);
+ builder.getColumnBuilder(1).writeBinary(value);
+ builder.declarePosition();
+ }
+
+ public static void buildTSBlock(
+ TShowClusterParametersResp showClusterParametersResp,
+ SettableFuture<ConfigTaskResult> future) {
+ List<TSDataType> outputDataTypes =
+ ColumnHeaderConstant.showClusterParametersColumnHeaders.stream()
+ .map(ColumnHeader::getColumnType)
+ .collect(Collectors.toList());
+ TsBlockBuilder builder = new TsBlockBuilder(outputDataTypes);
+
+ TClusterParameters clusterParameters = showClusterParametersResp.getClusterParameters();
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.CLUSTER_NAME),
+ new Binary(clusterParameters.getClusterName()));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.DATA_REPLICATION_FACTOR),
+ new Binary(String.valueOf(clusterParameters.getDataReplicationFactor())));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.SCHEMA_REPLICATION_FACTOR),
+ new Binary(String.valueOf(clusterParameters.getSchemaReplicationFactor())));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.DATA_REGION_CONSENSUS_PROTOCOL_CLASS),
+ new Binary(clusterParameters.getDataRegionConsensusProtocolClass()));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.SCHEMA_REGION_CONSENSUS_PROTOCOL_CLASS),
+ new Binary(clusterParameters.getSchemaRegionConsensusProtocolClass()));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.CONFIG_NODE_CONSENSUS_PROTOCOL_CLASS),
+ new Binary(clusterParameters.getConfigNodeConsensusProtocolClass()));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.TIME_PARTITION_INTERVAL),
+ new Binary(String.valueOf(clusterParameters.getTimePartitionInterval())));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.DEFAULT_TTL),
+ new Binary(String.valueOf(clusterParameters.getDefaultTTL())));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.READ_CONSISTENCY_LEVEL),
+ new Binary(String.valueOf(clusterParameters.getReadConsistencyLevel())));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.SCHEMA_REGION_PER_DATA_NODE),
+ new Binary(String.valueOf(clusterParameters.getSchemaRegionPerDataNode())));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.DATA_REGION_PER_PROCESSOR),
+ new Binary(String.valueOf(clusterParameters.getDataRegionPerProcessor())));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.LEAST_DATA_REGION_GROUP_NUM),
+ new Binary(String.valueOf(clusterParameters.getLeastDataRegionGroupNum())));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.SERIES_SLOT_NUM),
+ new Binary(String.valueOf(clusterParameters.getSeriesPartitionSlotNum())));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.SERIES_SLOT_EXECUTOR_CLASS),
+ new Binary(clusterParameters.getSeriesPartitionExecutorClass()));
+ buildTSBlock(
+ builder,
+ new Binary(IoTDBConstant.DISK_SPACE_WARNING_THRESHOLD),
+ new Binary(String.valueOf(clusterParameters.getDiskSpaceWarningThreshold())));
+
+ DatasetHeader datasetHeader = DatasetHeaderFactory.getShowClusterParametersHeader();
+ future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS, builder.build(), datasetHeader));
+ }
+
+ @Override
+ public ListenableFuture<ConfigTaskResult> execute(IConfigTaskExecutor configTaskExecutor)
+ throws InterruptedException {
+ return configTaskExecutor.showClusterParameters();
+ }
+}
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 c4c3cf2fa2..d06d7c3c9d 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
@@ -2001,13 +2001,12 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
@Override
public Statement visitShowCluster(IoTDBSqlParser.ShowClusterContext ctx) {
- return new ShowClusterStatement();
- }
-
- @Override
- public Statement visitShowClusterDetails(IoTDBSqlParser.ShowClusterDetailsContext ctx) {
ShowClusterStatement showClusterStatement = new ShowClusterStatement();
- showClusterStatement.setDetails(true);
+ if (ctx.DETAILS() != null) {
+ showClusterStatement.setDetails(true);
+ } else if (ctx.PARAMETERS() != null) {
+ showClusterStatement.setParameters(true);
+ }
return showClusterStatement;
}
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 be001b932f..db716b0f0c 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
@@ -25,6 +25,7 @@ import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
public class ShowClusterStatement extends ShowStatement implements IConfigStatement {
private boolean isDetails = false;
+ private boolean isParameters = false;
@Override
public QueryType getQueryType() {
@@ -43,4 +44,12 @@ public class ShowClusterStatement extends ShowStatement implements IConfigStatem
public void setDetails(boolean details) {
isDetails = details;
}
+
+ public boolean isParameters() {
+ return isParameters;
+ }
+
+ public void setParameters(boolean parameters) {
+ isParameters = parameters;
+ }
}
diff --git a/thrift-confignode/src/main/thrift/confignode.thrift b/thrift-confignode/src/main/thrift/confignode.thrift
index c2d4cc09c3..ae6766b947 100644
--- a/thrift-confignode/src/main/thrift/confignode.thrift
+++ b/thrift-confignode/src/main/thrift/confignode.thrift
@@ -317,23 +317,31 @@ struct TCheckUserPrivilegesReq {
}
// ConfigNode
+
+/* These parameters should be consist within the cluster */
+struct TClusterParameters {
+ 1: required string clusterName
+ 2: required i32 dataReplicationFactor
+ 3: required i32 schemaReplicationFactor
+ 4: required string dataRegionConsensusProtocolClass
+ 5: required string schemaRegionConsensusProtocolClass
+ 6: required string configNodeConsensusProtocolClass
+ 7: required i64 timePartitionInterval
+ 8: required i64 defaultTTL
+ 9: required string readConsistencyLevel
+ 10: required double schemaRegionPerDataNode
+ 11: required double dataRegionPerProcessor
+ 12: required i32 leastDataRegionGroupNum
+ 13: required i32 seriesPartitionSlotNum
+ 14: required string seriesPartitionExecutorClass
+ 15: required double diskSpaceWarningThreshold
+}
+
struct TConfigNodeRegisterReq {
1: required common.TConfigNodeLocation configNodeLocation
// The Non-Seed-ConfigNode must ensure that the following
// fields are consistent with the Seed-ConfigNode
- 2: required string dataRegionConsensusProtocolClass
- 3: required string schemaRegionConsensusProtocolClass
- 4: required i32 seriesPartitionSlotNum
- 5: required string seriesPartitionExecutorClass
- 6: required i64 defaultTTL
- 7: required i64 timePartitionInterval
- 8: required i32 schemaReplicationFactor
- 9: required double schemaRegionPerDataNode
- 10: required i32 dataReplicationFactor
- 11: required double dataRegionPerProcessor
- 12: required string readConsistencyLevel
- 13: required double diskSpaceWarningThreshold
- 14: required i32 leastDataRegionGroupNum
+ 2: required TClusterParameters clusterParameters
}
struct TConfigNodeRegisterResp {
@@ -430,6 +438,11 @@ struct TShowClusterResp {
4: required map<i32, string> nodeStatus
}
+struct TShowClusterParametersResp {
+ 1: required common.TSStatus status
+ 2: optional TClusterParameters clusterParameters
+}
+
// Show datanodes
struct TDataNodeInfo {
1: required i32 dataNodeId
@@ -987,6 +1000,9 @@ service IConfigNodeRPCService {
/** Show cluster ConfigNodes' and DataNodes' information */
TShowClusterResp showCluster()
+ /** Show cluster parameters who should be consist in the same cluster */
+ TShowClusterParametersResp showClusterParameters()
+
/** Show cluster DataNodes' information */
TShowDataNodesResp showDataNodes()