This is an automated email from the ASF dual-hosted git repository. yongzao pushed a commit to branch DataNode-restart-bug in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 8d2ea4821cc98027123f076170e2fdc3c36b8fd0 Author: YongzaoDan <[email protected]> AuthorDate: Fri Oct 27 11:29:37 2023 +0800 Finish --- .../confignode/it/cluster/IoTDBClusterRestartIT.java | 10 ++++++++-- .../main/java/org/apache/iotdb/db/service/DataNode.java | 17 ++++++++--------- 2 files changed, 16 insertions(+), 11 deletions(-) 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 f8747b28d05..0e6270d51e5 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 @@ -158,15 +158,21 @@ public class IoTDBClusterRestartIT { @Test public void clusterRestartWithoutSeedConfigNode() { - // shutdown all 3 ConfigNodes + // shutdown all ConfigNodes and DataNodes for (int i = testConfigNodeNum - 1; i >= 0; i--) { EnvFactory.getEnv().shutdownConfigNode(i); } - logger.info("Shutdown all ConfigNode"); + for (int i = testDataNodeNum - 1; i >= 0; i--) { + EnvFactory.getEnv().shutdownDataNode(i); + } + logger.info("Shutdown all ConfigNodes and DataNodes"); // restart without seed ConfigNode, the cluster should still work for (int i = 1; i < testConfigNodeNum; i++) { EnvFactory.getEnv().startConfigNode(i); } + for (int i = 0; i < testDataNodeNum; i++) { + EnvFactory.getEnv().startDataNode(i); + } logger.info("Restarted"); ((AbstractEnv) EnvFactory.getEnv()).testWorkingOneUnknownOtherRunning(); logger.info("Working without Seed-ConfigNode"); diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java index 8bba3a10d31..78b7c0d5795 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/DataNode.java @@ -166,9 +166,14 @@ public class DataNode implements DataNodeMBean { // Check if this DataNode is start for the first time and do other pre-checks isFirstStart = prepareDataNode(); - // Set target ConfigNodeList from iotdb-datanode.properties file - ConfigNodeInfo.getInstance() - .updateConfigNodeList(Collections.singletonList(config.getSeedConfigNode())); + if (isFirstStart) { + // Set target ConfigNodeList from iotdb-datanode.properties file + ConfigNodeInfo.getInstance() + .updateConfigNodeList(Collections.singletonList(config.getSeedConfigNode())); + } else { + // Load registered ConfigNodes from system.properties + ConfigNodeInfo.getInstance().loadConfigNodeList(); + } // Pull and check system configurations from ConfigNode-leader pullAndCheckSystemConfigurations(); @@ -251,11 +256,9 @@ public class DataNode implements DataNodeMBean { configurationResp = configNodeClient.getSystemConfiguration(); break; } catch (TException | ClientManagerException e) { - // Read ConfigNodes from system.properties and retry logger.warn( "Cannot pull system configurations from ConfigNode-leader, because: {}", e.getMessage()); - ConfigNodeInfo.getInstance().loadConfigNodeList(); retry--; } @@ -375,9 +378,7 @@ public class DataNode implements DataNodeMBean { dataNodeRegisterResp = configNodeClient.registerDataNode(req); break; } catch (TException | ClientManagerException e) { - // Read ConfigNodes from system.properties and retry logger.warn("Cannot register to the cluster, because: {}", e.getMessage()); - ConfigNodeInfo.getInstance().loadConfigNodeList(); retry--; } @@ -435,10 +436,8 @@ public class DataNode implements DataNodeMBean { dataNodeRestartResp = configNodeClient.restartDataNode(req); break; } catch (TException | ClientManagerException e) { - // Read ConfigNodes from system.properties and retry logger.warn( "Cannot send restart request to the ConfigNode-leader, because: {}", e.getMessage()); - ConfigNodeInfo.getInstance().loadConfigNodeList(); retry--; }
