This is an automated email from the ASF dual-hosted git repository. tanxinyu pushed a commit to branch fix_removed_confignode_rejoin_without_delete_data in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 3da31e070a85b27dfb0615a29b3049b94dd4e58e Author: OneSizeFitQuorum <[email protected]> AuthorDate: Tue Mar 18 12:33:57 2025 +0800 finish Signed-off-by: OneSizeFitQuorum <[email protected]> --- .../iotdb/confignode/client/CnToCnNodeRequestType.java | 2 +- .../confignode/client/sync/SyncConfigNodeClientPool.java | 4 ++-- .../confignode/procedure/env/ConfigNodeProcedureEnv.java | 5 +++-- .../procedure/impl/node/RemoveConfigNodeProcedure.java | 4 ++-- .../service/thrift/ConfigNodeRPCServiceProcessor.java | 10 ++++++---- .../apache/iotdb/db/protocol/client/ConfigNodeClient.java | 4 ++-- .../thrift/impl/DataNodeInternalRPCServiceImpl.java | 15 ++++++++------- .../config/executor/ClusterConfigTaskExecutor.java | 4 +--- .../thrift-confignode/src/main/thrift/confignode.thrift | 4 ++-- 9 files changed, 27 insertions(+), 25 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/CnToCnNodeRequestType.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/CnToCnNodeRequestType.java index 3864f26cbc8..e422e45dff0 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/CnToCnNodeRequestType.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/CnToCnNodeRequestType.java @@ -27,7 +27,7 @@ public enum CnToCnNodeRequestType { REMOVE_CONFIG_NODE, DELETE_CONFIG_NODE_PEER, REPORT_CONFIG_NODE_SHUTDOWN, - STOP_CONFIG_NODE, + STOP_AND_CLEAR_CONFIG_NODE, SET_CONFIGURATION, SHOW_CONFIGURATION, SUBMIT_TEST_CONNECTION_TASK, diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/sync/SyncConfigNodeClientPool.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/sync/SyncConfigNodeClientPool.java index cc26be000a8..494ec51dc12 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/sync/SyncConfigNodeClientPool.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/client/sync/SyncConfigNodeClientPool.java @@ -87,9 +87,9 @@ public class SyncConfigNodeClientPool { return client.deleteConfigNodePeer((TConfigNodeLocation) req); case REPORT_CONFIG_NODE_SHUTDOWN: return client.reportConfigNodeShutdown((TConfigNodeLocation) req); - case STOP_CONFIG_NODE: + case STOP_AND_CLEAR_CONFIG_NODE: // Only use stopConfigNode when the ConfigNode is removed. - return client.stopConfigNode((TConfigNodeLocation) req); + return client.stopAndClearConfigNode((TConfigNodeLocation) req); case SET_CONFIGURATION: return client.setConfiguration((TSetConfigurationReq) req); case SHOW_CONFIGURATION: diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/ConfigNodeProcedureEnv.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/ConfigNodeProcedureEnv.java index e721e3dd014..fefa3a876a7 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/ConfigNodeProcedureEnv.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/ConfigNodeProcedureEnv.java @@ -318,14 +318,15 @@ public class ConfigNodeProcedureEnv { * @param tConfigNodeLocation config node location * @throws ProcedureException if failed status */ - public void stopConfigNode(TConfigNodeLocation tConfigNodeLocation) throws ProcedureException { + public void stopAndClearConfigNode(TConfigNodeLocation tConfigNodeLocation) + throws ProcedureException { TSStatus tsStatus = (TSStatus) SyncConfigNodeClientPool.getInstance() .sendSyncRequestToConfigNodeWithRetry( tConfigNodeLocation.getInternalEndPoint(), tConfigNodeLocation, - CnToCnNodeRequestType.STOP_CONFIG_NODE); + CnToCnNodeRequestType.STOP_AND_CLEAR_CONFIG_NODE); if (tsStatus.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) { throw new ProcedureException(tsStatus.getMessage()); diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveConfigNodeProcedure.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveConfigNodeProcedure.java index 0910f06605d..bd19e5a45cf 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveConfigNodeProcedure.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/node/RemoveConfigNodeProcedure.java @@ -69,8 +69,8 @@ public class RemoveConfigNodeProcedure extends AbstractNodeProcedure<RemoveConfi LOG.info("Delete peer for ConfigNode: {}", removedConfigNode); break; case STOP_CONFIG_NODE: - env.stopConfigNode(removedConfigNode); - LOG.info("Stop ConfigNode: {}", removedConfigNode); + env.stopAndClearConfigNode(removedConfigNode); + LOG.info("Stop and clear ConfigNode: {}", removedConfigNode); return Flow.NO_MORE_STATE; } } catch (Exception e) { 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 98655954585..73f331a0e3f 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 @@ -47,6 +47,7 @@ import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.confignode.conf.ConfigNodeConfig; import org.apache.iotdb.confignode.conf.ConfigNodeConstant; import org.apache.iotdb.confignode.conf.ConfigNodeDescriptor; +import org.apache.iotdb.confignode.conf.ConfigNodeSystemPropertiesHandler; import org.apache.iotdb.confignode.conf.SystemPropertiesUtils; import org.apache.iotdb.confignode.consensus.request.ConfigPhysicalPlanType; import org.apache.iotdb.confignode.consensus.request.read.ainode.GetAINodeConfigurationPlan; @@ -889,7 +890,7 @@ public class ConfigNodeRPCServiceProcessor implements IConfigNodeRPCService.Ifac /** Stop ConfigNode */ @Override - public TSStatus stopConfigNode(TConfigNodeLocation configNodeLocation) { + public TSStatus stopAndClearConfigNode(TConfigNodeLocation configNodeLocation) { new Thread( // TODO: Perhaps we should find some other way of shutting down the config node, adding // a hard dependency @@ -898,18 +899,19 @@ public class ConfigNodeRPCServiceProcessor implements IConfigNodeRPCService.Ifac // instance is created feels cleaner. () -> { try { - // Sleep 1s before stop itself - TimeUnit.SECONDS.sleep(1); + // Sleep 20s before stop itself + TimeUnit.SECONDS.sleep(20); } catch (InterruptedException e) { Thread.currentThread().interrupt(); LOGGER.warn(e.getMessage()); } finally { + ConfigNodeSystemPropertiesHandler.getInstance().delete(); configNode.stop(); } }) .start(); return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode()) - .setMessage("Stop ConfigNode success."); + .setMessage("Stop And Clear ConfigNode Success."); } @Override 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 46905541352..c12a63c4122 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 @@ -746,8 +746,8 @@ public class ConfigNodeClient implements IConfigNodeRPCService.Iface, ThriftClie } @Override - public TSStatus stopConfigNode(TConfigNodeLocation configNodeLocation) throws TException { - throw new TException("DataNode to ConfigNode client doesn't support stopConfigNode."); + public TSStatus stopAndClearConfigNode(TConfigNodeLocation configNodeLocation) throws TException { + throw new TException("DataNode to ConfigNode client doesn't support stopAndClearConfigNode."); } @Override diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java index 7a7eb6389f9..b7d35a40731 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java @@ -2680,18 +2680,19 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface @Override public TSStatus stopAndClearDataNode() { TSStatus status = new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode()); - LOGGER.info("Execute stopDataNode RPC method"); + LOGGER.info("Execute stopAndClearDataNode RPC method"); - // kill the datanode process 20 seconds later + // kill the datanode process 60 seconds later // because datanode process cannot exit normally for the reason of InterruptedException new Thread( () -> { try { - TimeUnit.SECONDS.sleep(20); + TimeUnit.SECONDS.sleep(60); } catch (InterruptedException e) { - LOGGER.warn("Meets InterruptedException in stopDataNode RPC method"); + LOGGER.warn("Meets InterruptedException in stopAndClearDataNode RPC method"); } finally { - LOGGER.info("Executing system.exit(0) in stopDataNode RPC method after 20 seconds"); + LOGGER.info( + "Executing system.exit(0) in stopAndClearDataNode RPC method after 60 seconds"); System.exit(0); } }) @@ -2699,10 +2700,10 @@ public class DataNodeInternalRPCServiceImpl implements IDataNodeRPCService.Iface try { DataNode.getInstance().stop(); - status.setMessage("stop datanode succeed"); + status.setMessage("Stop And Clear Data Node succeed"); DataNode.getInstance().deleteDataNodeSystemProperties(); } catch (Exception e) { - LOGGER.warn("Stop Data Node error", e); + LOGGER.warn("Stop And Clear Data Node error", e); status.setCode(TSStatusCode.DATANODE_STOP_ERROR.getStatusCode()); status.setMessage(e.getMessage()); } 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 8628d31ef5f..353f528f9d1 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 @@ -2938,9 +2938,7 @@ public class ClusterConfigTaskExecutor implements IConfigTaskExecutor { future.setException(new IOException("Remove ConfigNode failed: " + status.getMessage())); return future; } else { - LOGGER.info( - "ConfigNode: {} is removed. If the confignode data directory is no longer needed, you can delete it manually.", - removeConfigNodeId); + LOGGER.info("ConfigNode: {} is removed.", removeConfigNodeId); future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS)); } diff --git a/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift b/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift index 1d03a9c9453..42cee9388e5 100644 --- a/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift +++ b/iotdb-protocol/thrift-confignode/src/main/thrift/confignode.thrift @@ -1481,8 +1481,8 @@ service IConfigNodeRPCService { */ common.TSStatus reportConfigNodeShutdown(common.TConfigNodeLocation configNodeLocation) - /** Stop the specific ConfigNode */ - common.TSStatus stopConfigNode(common.TConfigNodeLocation configNodeLocation) + /** Stop the specific ConfigNode and clear data */ + common.TSStatus stopAndClearConfigNode(common.TConfigNodeLocation configNodeLocation) /** The ConfigNode-leader will ping other ConfigNodes periodically */ TConfigNodeHeartbeatResp getConfigNodeHeartBeat(TConfigNodeHeartbeatReq req)
