This is an automated email from the ASF dual-hosted git repository.
wangchao316 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new e0271e50cb9 [IOTDB-6211] Restore cluste registered ConfigNodes from
system.properties file when restart DataNode (#11402)
e0271e50cb9 is described below
commit e0271e50cb94a33fde3096d435d88e4ea71ec713
Author: Yongzao <[email protected]>
AuthorDate: Fri Oct 27 14:37:37 2023 +0800
[IOTDB-6211] Restore cluste registered ConfigNodes from system.properties
file when restart DataNode (#11402)
---
.../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--;
}