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--;
       }
 

Reply via email to