From 78b2d672c43cef0273673b3c90622b089d4577cc Mon Sep 17 00:00:00 2001 From: libo Date: Fri, 17 Apr 2026 11:40:44 +0800 Subject: [PATCH 1/4] tmp commit. --- .../config/TreeConfigTaskVisitor.java | 8 +++++++ .../executor/ClusterConfigTaskExecutor.java | 21 +++++++++++++++++++ .../config/executor/IConfigTaskExecutor.java | 2 ++ .../plan/relational/sql/ast/AstVisitor.java | 4 ++++ .../relational/sql/parser/AstBuilder.java | 10 +++++++++ .../plan/statement/StatementType.java | 1 + .../plan/statement/StatementVisitor.java | 5 +++++ .../relational/grammar/sql/RelationalSql.g4 | 5 +++++ 8 files changed, 56 insertions(+) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java index 362982f645ccf..c8851e5934600 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java @@ -109,6 +109,7 @@ import org.apache.iotdb.db.queryengine.plan.execution.config.sys.SetConfigurationTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.SetSystemStatusTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.ShowConfigurationTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.sys.RepairDataPartitionTableTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.StartRepairDataTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.StopRepairDataTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.TestConnectionTask; @@ -220,6 +221,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowConfigurationStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowCurrentSqlDialectStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowCurrentUserStatement; +import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTableStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StartRepairDataStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StopRepairDataStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.TestConnectionStatement; @@ -389,6 +391,12 @@ public IConfigTask visitStartRepairData( return new StartRepairDataTask(startRepairDataStatement); } + @Override + public IConfigTask visitRepairDataPartitionTable( + RepairDataPartitionTableStatement repairDataPartitionTableStatement, MPPQueryContext context) { + return new RepairDataPartitionTableTask(repairDataPartitionTableStatement); + } + @Override public IConfigTask visitStopRepairData( StopRepairDataStatement stopRepairDataStatement, MPPQueryContext context) { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java index 5325560301c64..4b2d7f857074e 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java @@ -1457,6 +1457,27 @@ public SettableFuture stopRepairData(boolean onCluster) { return future; } + @Override + public SettableFuture repairDataPartitionTable() { + SettableFuture future = SettableFuture.create(); + TSStatus tsStatus = new TSStatus(); + + try (ConfigNodeClient client = + CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.CONFIG_REGION_ID)) { + // Send request to ConfigNode to trigger DataPartitionTableIntegrityCheckProcedure + tsStatus = client.dataPartitionTableIntegrityCheck(); + } catch (ClientManagerException | TException e) { + future.setException(e); + } + + if (tsStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { + future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS)); + } else { + future.setException(new IoTDBException(tsStatus)); + } + return future; + } + @Override public SettableFuture loadConfiguration(boolean onCluster) { SettableFuture future = SettableFuture.create(); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java index 9e02ba6cff7f4..4434cbb38a9f3 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/IConfigTaskExecutor.java @@ -155,6 +155,8 @@ SettableFuture showPipePlugins( SettableFuture stopRepairData(boolean onCluster); + SettableFuture repairDataPartitionTable(); + SettableFuture flush(TFlushReq tFlushReq, boolean onCluster); SettableFuture clearCache(boolean onCluster, Set options); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java index 93cc5cf95a4d6..438665a6a8883 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java @@ -517,6 +517,10 @@ protected R visitStartRepairData(StartRepairData node, C context) { return visitStatement(node, context); } + protected R visitRepairDataPartitionTable(RepairDataPartitionTable node, C context) { + return visitStatement(node, context); + } + protected R visitStopRepairData(StopRepairData node, C context) { return visitStatement(node, context); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java index 8770f6416c528..f492a0a5474ef 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java @@ -216,6 +216,7 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SortItem; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StartPipe; +import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RepairDataPartitionTable; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StartRepairData; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StopPipe; @@ -261,6 +262,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.sys.SetConfigurationStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetSystemStatusStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowConfigurationStatement; +import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTableStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StartRepairDataStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StopRepairDataStatement; import org.apache.iotdb.db.relational.grammar.sql.RelationalSqlBaseVisitor; @@ -1787,6 +1789,14 @@ public Node visitStopRepairDataStatement(RelationalSqlParser.StopRepairDataState return new StopRepairData(stopRepairDataStatement, null); } + @Override + public Node visitRepairDataPartitionTableStatement( + RelationalSqlParser.RepairDataPartitionTableStatementContext ctx) { + RepairDataPartitionTableStatement repairDataPartitionTableStatement = + new RepairDataPartitionTableStatement(); + return new RepairDataPartitionTable(repairDataPartitionTableStatement, null); + } + @Override public Node visitLocalOrClusterMode(RelationalSqlParser.LocalOrClusterModeContext ctx) { return super.visitLocalOrClusterMode(ctx); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementType.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementType.java index 19e597ef03197..b40c6444816fc 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementType.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementType.java @@ -181,6 +181,7 @@ public enum StatementType { PIPE_ENRICHED, START_REPAIR_DATA, STOP_REPAIR_DATA, + REPAIR_DATA_PARTITION_TABLE, CREATE_TOPIC, DROP_TOPIC, diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java index 3617c4bae8d56..a0ce4e42ef57f 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java @@ -147,6 +147,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowDiskUsageStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowQueriesStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowVersionStatement; +import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTableStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StartRepairDataStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StopRepairDataStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.TestConnectionStatement; @@ -520,6 +521,10 @@ public R visitStopRepairData(StopRepairDataStatement stopRepairDataStatement, C return visitStatement(stopRepairDataStatement, context); } + public R visitRepairDataPartitionTable(RepairDataPartitionTableStatement repairDataPartitionTableStatement, C context) { + return visitStatement(repairDataPartitionTableStatement, context); + } + public R visitLoadConfiguration( LoadConfigurationStatement loadConfigurationStatement, C context) { return visitStatement(loadConfigurationStatement, context); diff --git a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 index ca76646468677..93755f4622a47 100644 --- a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 +++ b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 @@ -142,6 +142,7 @@ statement | clearCacheStatement | startRepairDataStatement | stopRepairDataStatement + | repairDataPartitionTableStatement | setSystemStatusStatement | showVersionStatement | showQueriesStatement @@ -667,6 +668,10 @@ stopRepairDataStatement : STOP REPAIR DATA localOrClusterMode? ; +repairDataPartitionTableStatement + : REPAIR DATA PARTITION TABLE + ; + setSystemStatusStatement : SET SYSTEM TO (READONLY | RUNNING) localOrClusterMode? ; From 804b7803046b7cef084e7dd1e07504f744c35adf Mon Sep 17 00:00:00 2001 From: libo Date: Fri, 17 Apr 2026 11:43:08 +0800 Subject: [PATCH 2/4] tmp commit. --- .../sys/RepairDataPartitionTableTask.java | 42 +++++++++++++++ .../sql/ast/RepairDataPartitionTable.java | 34 ++++++++++++ .../RepairDataPartitionTableStatement.java | 52 +++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/RepairDataPartitionTableTask.java create mode 100644 iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RepairDataPartitionTable.java create mode 100644 iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/RepairDataPartitionTableStatement.java diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/RepairDataPartitionTableTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/RepairDataPartitionTableTask.java new file mode 100644 index 0000000000000..bae1bd099160e --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/RepairDataPartitionTableTask.java @@ -0,0 +1,42 @@ +/* + * 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.queryengine.plan.execution.config.sys; + +import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult; +import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor; +import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTableStatement; + +import com.google.common.util.concurrent.ListenableFuture; + +public class RepairDataPartitionTableTask implements IConfigTask { + + private final RepairDataPartitionTableStatement repairDataPartitionTableStatement; + + public RepairDataPartitionTableTask(RepairDataPartitionTableStatement repairDataPartitionTableStatement) { + this.repairDataPartitionTableStatement = repairDataPartitionTableStatement; + } + + @Override + public ListenableFuture execute(IConfigTaskExecutor configTaskExecutor) + throws InterruptedException { + return configTaskExecutor.repairDataPartitionTable(); + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RepairDataPartitionTable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RepairDataPartitionTable.java new file mode 100644 index 0000000000000..0037bc79e728c --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RepairDataPartitionTable.java @@ -0,0 +1,34 @@ +/* + * 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.queryengine.plan.relational.sql.ast; + +import org.apache.iotdb.db.queryengine.common.MPPQueryContext; +import org.apache.iotdb.db.queryengine.plan.statement.Statement; + +public class RepairDataPartitionTable extends WrappedStatement { + public RepairDataPartitionTable(Statement innerTreeStatement, MPPQueryContext context) { + super(innerTreeStatement, context); + } + + @Override + public R accept(AstVisitor visitor, C context) { + return visitor.visitRepairDataPartitionTable(this, context); + } +} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/RepairDataPartitionTableStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/RepairDataPartitionTableStatement.java new file mode 100644 index 0000000000000..0587d2cd5e7d5 --- /dev/null +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/RepairDataPartitionTableStatement.java @@ -0,0 +1,52 @@ +/* + * 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.queryengine.plan.statement.sys; + +import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.queryengine.plan.analyze.QueryType; +import org.apache.iotdb.db.queryengine.plan.statement.IConfigStatement; +import org.apache.iotdb.db.queryengine.plan.statement.Statement; +import org.apache.iotdb.db.queryengine.plan.statement.StatementType; +import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor; + +import java.util.Collections; +import java.util.List; + +public class RepairDataPartitionTableStatement extends Statement implements IConfigStatement { + + public RepairDataPartitionTableStatement() { + this.statementType = StatementType.REPAIR_DATA_PARTITION_TABLE; + } + + @Override + public List getPaths() { + return Collections.emptyList(); + } + + @Override + public QueryType getQueryType() { + return QueryType.OTHER; + } + + @Override + public R accept(StatementVisitor visitor, C context) { + return visitor.visitRepairDataPartitionTable(this, context); + } +} From 5172848984bd015ea6c43554edca5a61f7b25a9c Mon Sep 17 00:00:00 2001 From: libo Date: Tue, 21 Apr 2026 17:39:35 +0800 Subject: [PATCH 3/4] Use an ANSI SQL to trigger the DataPartitionTableIntegrityCheckProcedure start up --- .../apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 | 6 +++ .../confignode/manager/ConfigManager.java | 10 ++++ .../iotdb/confignode/manager/IManager.java | 2 + .../confignode/manager/ProcedureManager.java | 11 ----- .../manager/partition/PartitionManager.java | 11 +++++ .../iotdb/confignode/service/ConfigNode.java | 47 +------------------ .../thrift/ConfigNodeRPCServiceProcessor.java | 5 ++ .../db/protocol/client/ConfigNodeClient.java | 6 +++ .../config/TreeConfigTaskVisitor.java | 8 ++-- .../executor/ClusterConfigTaskExecutor.java | 4 +- .../sys/RepairDataPartitionTableTask.java | 8 ++-- .../queryengine/plan/parser/ASTVisitor.java | 9 ++++ .../security/TreeAccessCheckVisitor.java | 8 ++++ .../plan/relational/sql/ast/AstVisitor.java | 4 -- .../sql/ast/RepairDataPartitionTable.java | 34 -------------- .../relational/sql/parser/AstBuilder.java | 10 ---- .../plan/statement/StatementVisitor.java | 7 +-- ...ent.java => RepairDataPartitionTable.java} | 4 +- .../relational/grammar/sql/RelationalSql.g4 | 5 -- .../src/main/thrift/confignode.thrift | 2 + 20 files changed, 76 insertions(+), 125 deletions(-) delete mode 100644 iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RepairDataPartitionTable.java rename iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/{RepairDataPartitionTableStatement.java => RepairDataPartitionTable.java} (92%) diff --git a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 index 31d1007867a50..c6271c134cb00 100644 --- a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 +++ b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 @@ -94,6 +94,7 @@ utilityStatement | showQueries | showDiskUsage | showCurrentTimestamp | killQuery | grantWatermarkEmbedding | revokeWatermarkEmbedding | loadConfiguration | loadTimeseries | loadFile | removeFile | unloadFile | setSqlDialect | showCurrentSqlDialect | showCurrentUser + | repairDataPartitionTable ; /** @@ -1238,6 +1239,11 @@ stopRepairData : STOP REPAIR DATA (ON (LOCAL | CLUSTER))? ; +// Repair Data Partition Table +repairDataPartitionTable + : REPAIR DATA PARTITION TABLE + ; + // Explain explain : EXPLAIN (ANALYZE VERBOSE?)? selectStatement? diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java index 182dc2f9fb249..41c5066734014 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java @@ -1155,6 +1155,16 @@ public TDataPartitionTableResp getOrCreateDataPartition( return resp; } + @Override + public TSStatus dataPartitionTableIntegrityCheck() { + TSStatus status = confirmLeader(); + if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) { + return status; + } + + return partitionManager.dataPartitionTableIntegrityCheck(); + } + private void printNewCreatedDataPartition( GetOrCreateDataPartitionPlan getOrCreateDataPartitionPlan, TDataPartitionTableResp resp) { final String lineSeparator = System.lineSeparator(); diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java index 02c82164595df..2fbf7271d08d0 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/IManager.java @@ -475,6 +475,8 @@ TSchemaNodeManagementResp getNodePathsPartition( TDataPartitionTableResp getOrCreateDataPartition( GetOrCreateDataPartitionPlan getOrCreateDataPartitionPlan); + TSStatus dataPartitionTableIntegrityCheck(); + /** * Get AuditLogger. * diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java index 2c5a77303d9b9..49dc40002ff76 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java @@ -68,7 +68,6 @@ import org.apache.iotdb.confignode.procedure.impl.node.RemoveAINodeProcedure; import org.apache.iotdb.confignode.procedure.impl.node.RemoveConfigNodeProcedure; import org.apache.iotdb.confignode.procedure.impl.node.RemoveDataNodesProcedure; -import org.apache.iotdb.confignode.procedure.impl.partition.DataPartitionTableIntegrityCheckProcedure; import org.apache.iotdb.confignode.procedure.impl.pipe.plugin.CreatePipePluginProcedure; import org.apache.iotdb.confignode.procedure.impl.pipe.plugin.DropPipePluginProcedure; import org.apache.iotdb.confignode.procedure.impl.pipe.runtime.PipeHandleLeaderChangeProcedure; @@ -1376,16 +1375,6 @@ public TSStatus createRegionGroups( } } - /** Used to repair the lost data partition table */ - public TSStatus dataPartitionTableIntegrityCheck() { - DataPartitionTableIntegrityCheckProcedure procedure; - synchronized (this) { - procedure = new DataPartitionTableIntegrityCheckProcedure(); - executor.submitProcedure(procedure); - } - return waitingProcedureFinished(procedure, 86400000); - } - /** * Generate {@link CreateTriggerProcedure} and wait until it finished. * diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java index 576d805c78624..ed879e4ce8635 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java @@ -81,6 +81,7 @@ import org.apache.iotdb.confignode.persistence.partition.maintainer.RegionDeleteTask; import org.apache.iotdb.confignode.persistence.partition.maintainer.RegionMaintainTask; import org.apache.iotdb.confignode.persistence.partition.maintainer.RegionMaintainType; +import org.apache.iotdb.confignode.procedure.impl.partition.DataPartitionTableIntegrityCheckProcedure; import org.apache.iotdb.confignode.rpc.thrift.TCountTimeSlotListReq; import org.apache.iotdb.confignode.rpc.thrift.TGetRegionIdReq; import org.apache.iotdb.confignode.rpc.thrift.TGetSeriesSlotListReq; @@ -511,6 +512,16 @@ public DataPartitionResp getOrCreateDataPartition(final GetOrCreateDataPartition return resp; } + /** Used to repair the lost data partition table */ + public TSStatus dataPartitionTableIntegrityCheck() { + synchronized (this) { + DataPartitionTableIntegrityCheckProcedure procedure = + new DataPartitionTableIntegrityCheckProcedure(); + getProcedureManager().getExecutor().submitProcedure(procedure); + } + return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode()); + } + private TSStatus consensusWritePartitionResult(ConfigPhysicalPlan plan) { TSStatus status = getConsensusManager().confirmLeader(); if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) { diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java index 5caac7127f751..1632820887a89 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/ConfigNode.java @@ -24,7 +24,6 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.commons.ServerCommandLine; import org.apache.iotdb.commons.client.ClientManagerMetrics; -import org.apache.iotdb.commons.cluster.NodeStatus; import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory; import org.apache.iotdb.commons.concurrent.ThreadModule; import org.apache.iotdb.commons.concurrent.ThreadName; @@ -55,7 +54,6 @@ import org.apache.iotdb.confignode.manager.consensus.ConsensusManager; import org.apache.iotdb.confignode.manager.pipe.agent.PipeConfigNodeAgent; import org.apache.iotdb.confignode.manager.pipe.metric.PipeConfigNodeMetrics; -import org.apache.iotdb.confignode.procedure.impl.partition.DataPartitionTableIntegrityCheckProcedure; import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterReq; import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterResp; import org.apache.iotdb.confignode.rpc.thrift.TNodeVersionInfo; @@ -195,10 +193,7 @@ public void active() { int configNodeId = CONF.getConfigNodeId(); configManager.initConsensusManager(); upgrade(); - TConfigNodeLocation leaderNodeLocation = waitForLeaderElected(); - if (leaderNodeLocation == null) { - leaderNodeLocation = configManager.getConsensusManager().getNotNullLeaderLocation(); - } + waitForLeaderElected(); setUpMetricService(); // Notice: We always set up Seed-ConfigNode's RPC service lastly to ensure // that the external service is not provided until ConfigNode is fully available @@ -226,46 +221,6 @@ public void active() { } loadSecretKey(); loadHardwareCode(); - - /* After the ConfigNode leader election, a leader switch may occur, which could cause the procedure not to be created. This can happen if the original leader has not yet executed the procedure creation, while the other followers have already finished starting up. Therefore, having the original leader (before the leader switch) initiate the process ensures that only one procedure will be created. */ - if (leaderNodeLocation.getConfigNodeId() == configNodeId) { - if (!configManager - .getProcedureManager() - .isExistUnfinishedProcedure(DataPartitionTableIntegrityCheckProcedure.class)) { - dataPartitionTableCheckFuture = - dataPartitionTableCheckExecutor.submit( - () -> { - LOGGER.info( - "[DataPartitionIntegrity] Prepare to start dataPartitionTableIntegrityCheck after all datanodes started up"); - Thread.sleep(CONF.getPartitionTableRecoverWaitAllDnUpTimeoutInMs()); - - while (true) { - List dnList = - configManager - .getLoadManager() - .filterDataNodeThroughStatus(NodeStatus.Running); - if (dnList != null && !dnList.isEmpty()) { - LOGGER.info("Starting dataPartitionTableIntegrityCheck..."); - TSStatus status = - configManager - .getProcedureManager() - .dataPartitionTableIntegrityCheck(); - if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) { - LOGGER.error( - "Data partition table integrity check failed! Current status code is {}, status message is {}", - status.getCode(), - status.getMessage()); - } - break; - } else { - LOGGER.info("No running datanodes found, waiting..."); - Thread.sleep(5000); - } - } - return null; - }); - } - } return; } else { saveSecretKey(); diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java index 4d01f3770c218..dd18802cf8525 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/service/thrift/ConfigNodeRPCServiceProcessor.java @@ -624,6 +624,11 @@ public TDataPartitionTableResp getOrCreateDataPartitionTable(TDataPartitionReq r return configManager.getOrCreateDataPartition(getOrCreateDataPartitionReq); } + @Override + public TSStatus dataPartitionTableIntegrityCheck() { + return configManager.dataPartitionTableIntegrityCheck(); + } + @Override public TSStatus operatePermission(final TAuthorizerReq req) { ConfigPhysicalPlanType configPhysicalPlanType = diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/ConfigNodeClient.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/ConfigNodeClient.java index e2c04caedfb20..06f60b0442538 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/ConfigNodeClient.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/client/ConfigNodeClient.java @@ -700,6 +700,12 @@ public TDataPartitionTableResp getOrCreateDataPartitionTable(TDataPartitionReq r resp -> !updateConfigNodeLeader(resp.status)); } + @Override + public TSStatus dataPartitionTableIntegrityCheck() throws TException { + return executeRemoteCallWithRetry( + () -> client.dataPartitionTableIntegrityCheck(), status -> !updateConfigNodeLeader(status)); + } + @Override public TSStatus operatePermission(TAuthorizerReq req) throws TException { return executeRemoteCallWithRetry( diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java index c8851e5934600..a46c1bca7aa64 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/TreeConfigTaskVisitor.java @@ -106,10 +106,10 @@ import org.apache.iotdb.db.queryengine.plan.execution.config.sys.KillQueryTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.LoadConfigurationTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.MergeTask; +import org.apache.iotdb.db.queryengine.plan.execution.config.sys.RepairDataPartitionTableTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.SetConfigurationTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.SetSystemStatusTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.ShowConfigurationTask; -import org.apache.iotdb.db.queryengine.plan.execution.config.sys.RepairDataPartitionTableTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.StartRepairDataTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.StopRepairDataTask; import org.apache.iotdb.db.queryengine.plan.execution.config.sys.TestConnectionTask; @@ -215,13 +215,13 @@ import org.apache.iotdb.db.queryengine.plan.statement.sys.KillQueryStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.LoadConfigurationStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.MergeStatement; +import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTable; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetConfigurationStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetSqlDialectStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetSystemStatusStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowConfigurationStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowCurrentSqlDialectStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowCurrentUserStatement; -import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTableStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StartRepairDataStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StopRepairDataStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.TestConnectionStatement; @@ -393,8 +393,8 @@ public IConfigTask visitStartRepairData( @Override public IConfigTask visitRepairDataPartitionTable( - RepairDataPartitionTableStatement repairDataPartitionTableStatement, MPPQueryContext context) { - return new RepairDataPartitionTableTask(repairDataPartitionTableStatement); + RepairDataPartitionTable repairDataPartitionTable, MPPQueryContext context) { + return new RepairDataPartitionTableTask(repairDataPartitionTable); } @Override diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java index 4b2d7f857074e..c1894f97a873d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java @@ -1461,7 +1461,7 @@ public SettableFuture stopRepairData(boolean onCluster) { public SettableFuture repairDataPartitionTable() { SettableFuture future = SettableFuture.create(); TSStatus tsStatus = new TSStatus(); - + try (ConfigNodeClient client = CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.CONFIG_REGION_ID)) { // Send request to ConfigNode to trigger DataPartitionTableIntegrityCheckProcedure @@ -1469,7 +1469,7 @@ public SettableFuture repairDataPartitionTable() { } catch (ClientManagerException | TException e) { future.setException(e); } - + if (tsStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) { future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS)); } else { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/RepairDataPartitionTableTask.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/RepairDataPartitionTableTask.java index bae1bd099160e..69f9315a1f482 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/RepairDataPartitionTableTask.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/sys/RepairDataPartitionTableTask.java @@ -22,16 +22,16 @@ import org.apache.iotdb.db.queryengine.plan.execution.config.ConfigTaskResult; import org.apache.iotdb.db.queryengine.plan.execution.config.IConfigTask; import org.apache.iotdb.db.queryengine.plan.execution.config.executor.IConfigTaskExecutor; -import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTableStatement; +import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTable; import com.google.common.util.concurrent.ListenableFuture; public class RepairDataPartitionTableTask implements IConfigTask { - private final RepairDataPartitionTableStatement repairDataPartitionTableStatement; + private final RepairDataPartitionTable repairDataPartitionTable; - public RepairDataPartitionTableTask(RepairDataPartitionTableStatement repairDataPartitionTableStatement) { - this.repairDataPartitionTableStatement = repairDataPartitionTableStatement; + public RepairDataPartitionTableTask(RepairDataPartitionTable repairDataPartitionTable) { + this.repairDataPartitionTable = repairDataPartitionTable; } @Override diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java index c7a4acfcd59c8..cb29b4d5f7339 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java @@ -238,6 +238,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.sys.FlushStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.KillQueryStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.LoadConfigurationStatement; +import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTable; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetConfigurationStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetSqlDialectStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetSystemStatusStatement; @@ -3749,6 +3750,14 @@ public Statement visitStartRepairData(IoTDBSqlParser.StartRepairDataContext ctx) return startRepairDataStatement; } + // Repair Data Partition Table + + @Override + public Statement visitRepairDataPartitionTable( + IoTDBSqlParser.RepairDataPartitionTableContext ctx) { + return new RepairDataPartitionTable(); + } + // Stop Repair Data @Override diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java index 95bb70872ff02..1810f5fe1a1e7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/security/TreeAccessCheckVisitor.java @@ -147,6 +147,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.sys.FlushStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.KillQueryStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.LoadConfigurationStatement; +import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTable; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetConfigurationStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetSqlDialectStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetSystemStatusStatement; @@ -1681,6 +1682,13 @@ public TSStatus visitStartRepairData( context.setAuditLogOperation(AuditLogOperation.CONTROL), PrivilegeType.SYSTEM, () -> ""); } + @Override + public TSStatus visitRepairDataPartitionTable( + RepairDataPartitionTable repairDataPartitionTable, TreeAccessCheckContext context) { + return checkGlobalAuth( + context.setAuditLogOperation(AuditLogOperation.CONTROL), PrivilegeType.SYSTEM, () -> ""); + } + @Override public TSStatus visitStopRepairData( StopRepairDataStatement stopRepairDataStatement, TreeAccessCheckContext context) { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java index 438665a6a8883..93cc5cf95a4d6 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/AstVisitor.java @@ -517,10 +517,6 @@ protected R visitStartRepairData(StartRepairData node, C context) { return visitStatement(node, context); } - protected R visitRepairDataPartitionTable(RepairDataPartitionTable node, C context) { - return visitStatement(node, context); - } - protected R visitStopRepairData(StopRepairData node, C context) { return visitStatement(node, context); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RepairDataPartitionTable.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RepairDataPartitionTable.java deleted file mode 100644 index 0037bc79e728c..0000000000000 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/RepairDataPartitionTable.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * 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.queryengine.plan.relational.sql.ast; - -import org.apache.iotdb.db.queryengine.common.MPPQueryContext; -import org.apache.iotdb.db.queryengine.plan.statement.Statement; - -public class RepairDataPartitionTable extends WrappedStatement { - public RepairDataPartitionTable(Statement innerTreeStatement, MPPQueryContext context) { - super(innerTreeStatement, context); - } - - @Override - public R accept(AstVisitor visitor, C context) { - return visitor.visitRepairDataPartitionTable(this, context); - } -} diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java index f492a0a5474ef..8770f6416c528 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/parser/AstBuilder.java @@ -216,7 +216,6 @@ import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SkipTo; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.SortItem; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StartPipe; -import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.RepairDataPartitionTable; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StartRepairData; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Statement; import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.StopPipe; @@ -262,7 +261,6 @@ import org.apache.iotdb.db.queryengine.plan.statement.sys.SetConfigurationStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetSystemStatusStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowConfigurationStatement; -import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTableStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StartRepairDataStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StopRepairDataStatement; import org.apache.iotdb.db.relational.grammar.sql.RelationalSqlBaseVisitor; @@ -1789,14 +1787,6 @@ public Node visitStopRepairDataStatement(RelationalSqlParser.StopRepairDataState return new StopRepairData(stopRepairDataStatement, null); } - @Override - public Node visitRepairDataPartitionTableStatement( - RelationalSqlParser.RepairDataPartitionTableStatementContext ctx) { - RepairDataPartitionTableStatement repairDataPartitionTableStatement = - new RepairDataPartitionTableStatement(); - return new RepairDataPartitionTable(repairDataPartitionTableStatement, null); - } - @Override public Node visitLocalOrClusterMode(RelationalSqlParser.LocalOrClusterModeContext ctx) { return super.visitLocalOrClusterMode(ctx); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java index a0ce4e42ef57f..847e850c52172 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/StatementVisitor.java @@ -138,6 +138,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.sys.KillQueryStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.LoadConfigurationStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.MergeStatement; +import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTable; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetConfigurationStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetSqlDialectStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.SetSystemStatusStatement; @@ -147,7 +148,6 @@ import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowDiskUsageStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowQueriesStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.ShowVersionStatement; -import org.apache.iotdb.db.queryengine.plan.statement.sys.RepairDataPartitionTableStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StartRepairDataStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.StopRepairDataStatement; import org.apache.iotdb.db.queryengine.plan.statement.sys.TestConnectionStatement; @@ -521,8 +521,9 @@ public R visitStopRepairData(StopRepairDataStatement stopRepairDataStatement, C return visitStatement(stopRepairDataStatement, context); } - public R visitRepairDataPartitionTable(RepairDataPartitionTableStatement repairDataPartitionTableStatement, C context) { - return visitStatement(repairDataPartitionTableStatement, context); + public R visitRepairDataPartitionTable( + RepairDataPartitionTable repairDataPartitionTable, C context) { + return visitStatement(repairDataPartitionTable, context); } public R visitLoadConfiguration( diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/RepairDataPartitionTableStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/RepairDataPartitionTable.java similarity index 92% rename from iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/RepairDataPartitionTableStatement.java rename to iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/RepairDataPartitionTable.java index 0587d2cd5e7d5..b377952ac5b05 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/RepairDataPartitionTableStatement.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/sys/RepairDataPartitionTable.java @@ -29,9 +29,9 @@ import java.util.Collections; import java.util.List; -public class RepairDataPartitionTableStatement extends Statement implements IConfigStatement { +public class RepairDataPartitionTable extends Statement implements IConfigStatement { - public RepairDataPartitionTableStatement() { + public RepairDataPartitionTable() { this.statementType = StatementType.REPAIR_DATA_PARTITION_TABLE; } diff --git a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 index 93755f4622a47..ca76646468677 100644 --- a/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 +++ b/iotdb-core/relational-grammar/src/main/antlr4/org/apache/iotdb/db/relational/grammar/sql/RelationalSql.g4 @@ -142,7 +142,6 @@ statement | clearCacheStatement | startRepairDataStatement | stopRepairDataStatement - | repairDataPartitionTableStatement | setSystemStatusStatement | showVersionStatement | showQueriesStatement @@ -668,10 +667,6 @@ stopRepairDataStatement : STOP REPAIR DATA localOrClusterMode? ; -repairDataPartitionTableStatement - : REPAIR DATA PARTITION TABLE - ; - setSystemStatusStatement : SET SYSTEM TO (READONLY | RUNNING) localOrClusterMode? ; diff --git a/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift b/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift index 92312ee81a307..a4a80c5395385 100644 --- a/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift +++ b/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift @@ -1487,6 +1487,8 @@ service IConfigNodeRPCService { */ TDataPartitionTableResp getOrCreateDataPartitionTable(TDataPartitionReq req) + common.TSStatus dataPartitionTableIntegrityCheck() + // ====================================================== // Authorize // ====================================================== From d536c937f30f82db77c8250d9eeb42aafaffc5b8 Mon Sep 17 00:00:00 2001 From: libo Date: Tue, 21 Apr 2026 17:56:34 +0800 Subject: [PATCH 4/4] Remove a unuseful config parameter --- .../iotdb/confignode/conf/ConfigNodeConfig.java | 11 ----------- .../confignode/conf/ConfigNodeDescriptor.java | 17 ----------------- .../conf/iotdb-system.properties.template | 6 ------ 3 files changed, 34 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java index 59b318a4b11e9..3abb322d08472 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeConfig.java @@ -319,8 +319,6 @@ public class ConfigNodeConfig { private long forceWalPeriodForConfigNodeSimpleInMs = 100; - private long partitionTableRecoverWaitAllDnUpTimeoutInMs = 60000; - public ConfigNodeConfig() { // empty constructor } @@ -1288,13 +1286,4 @@ public long getFailureDetectorPhiAcceptablePauseInMs() { public void setFailureDetectorPhiAcceptablePauseInMs(long failureDetectorPhiAcceptablePauseInMs) { this.failureDetectorPhiAcceptablePauseInMs = failureDetectorPhiAcceptablePauseInMs; } - - public long getPartitionTableRecoverWaitAllDnUpTimeoutInMs() { - return partitionTableRecoverWaitAllDnUpTimeoutInMs; - } - - public void setPartitionTableRecoverWaitAllDnUpTimeoutInMs( - long partitionTableRecoverWaitAllDnUpTimeoutInMs) { - this.partitionTableRecoverWaitAllDnUpTimeoutInMs = partitionTableRecoverWaitAllDnUpTimeoutInMs; - } } diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java index dd32415ebe08d..77790dae1a903 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java @@ -322,23 +322,6 @@ private void loadProperties(TrimProperties properties) throws BadNodeUrlExceptio "failure_detector_phi_acceptable_pause_in_ms", String.valueOf(conf.getFailureDetectorPhiAcceptablePauseInMs())))); - long partitionTableRecoverWaitAllDnUpTimeoutInMs = - Long.parseLong( - properties.getProperty( - "partition_table_recover_wait_all_dn_up_timeout_ms", - String.valueOf(conf.getPartitionTableRecoverWaitAllDnUpTimeoutInMs()))); - if (partitionTableRecoverWaitAllDnUpTimeoutInMs <= 0) { - LOGGER.warn( - "partition_table_recover_wait_all_dn_up_timeout_ms should be greater than 0, " - + "but current value is {}, ignore that and use the default value {}", - partitionTableRecoverWaitAllDnUpTimeoutInMs, - conf.getPartitionTableRecoverWaitAllDnUpTimeoutInMs()); - partitionTableRecoverWaitAllDnUpTimeoutInMs = - conf.getPartitionTableRecoverWaitAllDnUpTimeoutInMs(); - } - conf.setPartitionTableRecoverWaitAllDnUpTimeoutInMs( - partitionTableRecoverWaitAllDnUpTimeoutInMs); - String leaderDistributionPolicy = properties.getProperty("leader_distribution_policy", conf.getLeaderDistributionPolicy()); if (AbstractLeaderBalancer.GREEDY_POLICY.equals(leaderDistributionPolicy) diff --git a/iotdb-core/node-commons/src/assembly/resources/conf/iotdb-system.properties.template b/iotdb-core/node-commons/src/assembly/resources/conf/iotdb-system.properties.template index 378a6226cbffd..87be30f4520e0 100644 --- a/iotdb-core/node-commons/src/assembly/resources/conf/iotdb-system.properties.template +++ b/iotdb-core/node-commons/src/assembly/resources/conf/iotdb-system.properties.template @@ -739,12 +739,6 @@ partition_table_recover_worker_num=10 # Datatype: Integer partition_table_recover_max_read_megabytes_per_second=10 -# Purpose: for data partition repair -# Set a timeout to wait for all datanodes complete startup, the unit is ms -# effectiveMode: restart -# Datatype: Integer -partition_table_recover_wait_all_dn_up_timeout_ms=60000 - #################### ### Memory Control Configuration ####################