This is an automated email from the ASF dual-hosted git repository.
qiaojialin 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 2469c0b1cf [IOTDB-3108] Optimize register process of datanode (#5818)
2469c0b1cf is described below
commit 2469c0b1cfaeba0bbe9f150af42d0820bb8df0e4
Author: Mrquan <[email protected]>
AuthorDate: Sun May 8 22:36:34 2022 +0800
[IOTDB-3108] Optimize register process of datanode (#5818)
---
.../org/apache/iotdb/cluster/ClusterIoTDB.java | 4 +-
.../iotdb/confignode/manager/ConfigManager.java | 3 +-
.../iotdb/confignode/manager/NodeManager.java | 2 +-
.../iotdb/db/integration/IoTDBCheckConfigIT.java | 8 ++--
.../org/apache/iotdb/db/auth/AuthorityChecker.java | 5 +-
.../apache/iotdb/db/client/ConfigNodeClient.java | 19 +++++---
.../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 26 +++++-----
.../org/apache/iotdb/db/conf/IoTDBDescriptor.java | 56 ++++++----------------
...{IoTDBConfigCheck.java => IoTDBStartCheck.java} | 54 ++++++++++++++++++---
.../mpp/plan/analyze/ClusterPartitionFetcher.java | 3 +-
.../execution/config/AuthorizerConfigTask.java | 5 +-
.../execution/config/CountStorageGroupTask.java | 3 +-
.../plan/execution/config/SetStorageGroupTask.java | 3 +-
.../db/mpp/plan/execution/config/SetTTLTask.java | 3 +-
.../execution/config/ShowStorageGroupTask.java | 3 +-
.../db/mpp/plan/execution/config/ShowTTLTask.java | 3 +-
.../java/org/apache/iotdb/db/service/DataNode.java | 33 ++++++++-----
.../java/org/apache/iotdb/db/service/IoTDB.java | 4 +-
18 files changed, 130 insertions(+), 107 deletions(-)
diff --git a/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java
b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java
index 9138a98ca2..2910a3fd47 100644
--- a/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java
+++ b/cluster/src/main/java/org/apache/iotdb/cluster/ClusterIoTDB.java
@@ -65,8 +65,8 @@ import org.apache.iotdb.commons.service.RegisterManager;
import org.apache.iotdb.commons.service.ThriftServiceThread;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.conf.IoTDBConfig;
-import org.apache.iotdb.db.conf.IoTDBConfigCheck;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.IoTDBStartCheck;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.service.IoTDB;
import org.apache.iotdb.db.service.basic.ServiceProvider;
@@ -225,7 +225,7 @@ public class ClusterIoTDB implements ClusterIoTDBMBean {
}
protected boolean serverCheckAndInit() throws ConfigurationException,
IOException {
- IoTDBConfigCheck.getInstance().checkConfig();
+ IoTDBStartCheck.getInstance().checkConfig();
IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
// init server's configuration first, because the cluster configuration
may read settings from
// the server's configuration.
diff --git
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index 824800e937..9d992c5cf2 100644
---
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -46,6 +46,7 @@ import
org.apache.iotdb.confignode.consensus.response.DataPartitionResp;
import org.apache.iotdb.confignode.consensus.response.PermissionInfoResp;
import org.apache.iotdb.confignode.consensus.response.SchemaPartitionResp;
import org.apache.iotdb.confignode.consensus.response.StorageGroupSchemaResp;
+import org.apache.iotdb.confignode.persistence.NodeInfo;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterReq;
import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterResp;
import org.apache.iotdb.consensus.common.DataSet;
@@ -103,7 +104,7 @@ public class ConfigManager implements Manager {
} else {
DataNodeConfigurationResp dataSet = new DataNodeConfigurationResp();
dataSet.setStatus(status);
-
dataSet.setConfigNodeList(ConfigNodeDescriptor.getInstance().getConf().getConfigNodeList());
+ dataSet.setConfigNodeList(NodeInfo.getInstance().getOnlineConfigNodes());
return dataSet;
}
}
diff --git
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java
index 059450f691..47d3aa7d77 100644
---
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java
+++
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/NodeManager.java
@@ -97,7 +97,7 @@ public class NodeManager {
}
dataSet.setDataNodeId(req.getLocation().getDataNodeId());
-
dataSet.setConfigNodeList(ConfigNodeDescriptor.getInstance().getConf().getConfigNodeList());
+ dataSet.setConfigNodeList(nodeInfo.getOnlineConfigNodes());
setGlobalConfig(dataSet);
return dataSet;
}
diff --git
a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCheckConfigIT.java
b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCheckConfigIT.java
index 43572d1aa6..488522cf59 100644
---
a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCheckConfigIT.java
+++
b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBCheckConfigIT.java
@@ -20,8 +20,8 @@ package org.apache.iotdb.db.integration;
import org.apache.iotdb.commons.exception.ConfigurationException;
import org.apache.iotdb.commons.file.SystemFileFactory;
-import org.apache.iotdb.db.conf.IoTDBConfigCheck;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.IoTDBStartCheck;
import org.apache.iotdb.db.service.IoTDB;
import org.apache.iotdb.db.utils.EnvironmentUtils;
import org.apache.iotdb.itbase.category.LocalStandaloneTest;
@@ -90,7 +90,7 @@ public class IoTDBCheckConfigIT {
@Test
public void testSaveTimeEncoderToSystemProperties() throws Exception {
- IoTDBConfigCheck.getInstance().checkConfig();
+ IoTDBStartCheck.getInstance().checkConfig();
// read properties from system.properties
try (FileInputStream inputStream = new FileInputStream(propertiesFile);
InputStreamReader inputStreamReader =
@@ -110,7 +110,7 @@ public class IoTDBCheckConfigIT {
writeSystemFile();
EnvironmentUtils.reactiveDaemon();
try {
- IoTDBConfigCheck.getInstance().checkConfig();
+ IoTDBStartCheck.getInstance().checkConfig();
} catch (ConfigurationException t) {
assertEquals("time_encoder", t.getParameter());
assertEquals("REGULAR", t.getCorrectValue());
@@ -128,7 +128,7 @@ public class IoTDBCheckConfigIT {
writeSystemFile();
EnvironmentUtils.reactiveDaemon();
try {
- IoTDBConfigCheck.getInstance().checkConfig();
+ IoTDBStartCheck.getInstance().checkConfig();
} catch (Throwable t) {
fail(t.getMessage());
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
b/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
index 990ec5bb9b..6a42fd8f54 100644
--- a/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
+++ b/server/src/main/java/org/apache/iotdb/db/auth/AuthorityChecker.java
@@ -24,7 +24,6 @@ import
org.apache.iotdb.commons.auth.authorizer.AuthorizerManager;
import org.apache.iotdb.commons.auth.entity.PrivilegeType;
import org.apache.iotdb.commons.conf.CommonConfig;
import org.apache.iotdb.commons.conf.IoTDBConstant;
-import org.apache.iotdb.commons.exception.BadNodeUrlException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.confignode.rpc.thrift.TCheckUserPrivilegesReq;
import org.apache.iotdb.confignode.rpc.thrift.TLoginReq;
@@ -163,7 +162,7 @@ public class AuthorityChecker {
configNodeClient = new ConfigNodeClient();
// Send request to some API server
status = configNodeClient.login(req);
- } catch (IoTDBConnectionException | BadNodeUrlException e) {
+ } catch (IoTDBConnectionException e) {
throw new ConfigNodeConnectionException("Couldn't connect config node");
} finally {
if (configNodeClient != null) {
@@ -216,7 +215,7 @@ public class AuthorityChecker {
configNodeClient = new ConfigNodeClient();
// Send request to some API server
status = configNodeClient.checkUserPrivileges(req);
- } catch (IoTDBConnectionException | BadNodeUrlException e) {
+ } catch (IoTDBConnectionException e) {
throw new ConfigNodeConnectionException("Couldn't connect config node");
} finally {
if (configNodeClient != null) {
diff --git
a/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
b/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
index 455a5df3e1..d04767a98f 100644
--- a/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
+++ b/server/src/main/java/org/apache/iotdb/db/client/ConfigNodeClient.java
@@ -21,12 +21,11 @@ package org.apache.iotdb.db.client;
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.exception.BadNodeUrlException;
-import org.apache.iotdb.commons.utils.NodeUrlUtils;
import org.apache.iotdb.confignode.rpc.thrift.ConfigIService;
import org.apache.iotdb.confignode.rpc.thrift.TAuthorizerReq;
import org.apache.iotdb.confignode.rpc.thrift.TAuthorizerResp;
import org.apache.iotdb.confignode.rpc.thrift.TCheckUserPrivilegesReq;
+import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeLocation;
import org.apache.iotdb.confignode.rpc.thrift.TCountStorageGroupResp;
import org.apache.iotdb.confignode.rpc.thrift.TDataNodeLocationResp;
import org.apache.iotdb.confignode.rpc.thrift.TDataNodeRegisterReq;
@@ -53,6 +52,7 @@ import org.apache.thrift.transport.TTransportException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.ArrayList;
import java.util.List;
public class ConfigNodeClient {
@@ -75,11 +75,9 @@ public class ConfigNodeClient {
private int cursor = 0;
- public ConfigNodeClient() throws BadNodeUrlException,
IoTDBConnectionException {
+ public ConfigNodeClient() throws IoTDBConnectionException {
// Read config nodes from configuration
- configNodes =
- NodeUrlUtils.parseTEndPointUrls(
- IoTDBDescriptor.getInstance().getConfig().getConfigNodeUrls());
+ configNodes =
IoTDBDescriptor.getInstance().getConfig().getConfigNodeList();
init();
}
@@ -169,10 +167,17 @@ public class ConfigNodeClient {
for (int i = 0; i < RETRY_NUM; i++) {
try {
TDataNodeRegisterResp resp = client.registerDataNode(req);
+
if (!updateConfigNodeLeader(resp.status)) {
return resp;
}
- logger.info("Register current node using request {} with response {}",
req, resp);
+
+ // set latest config node list
+ List<TEndPoint> newConfigNodes = new ArrayList<>();
+ for (TConfigNodeLocation configNodeLocation :
resp.getConfigNodeList()) {
+ newConfigNodes.add(configNodeLocation.getInternalEndPoint());
+ }
+ configNodes = newConfigNodes;
} catch (TException e) {
configLeader = null;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index af37ea72d5..b93929e35f 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -18,6 +18,7 @@
*/
package org.apache.iotdb.db.conf;
+import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.commons.conf.IoTDBConstant;
import org.apache.iotdb.db.conf.directories.DirectoryManager;
import org.apache.iotdb.db.engine.compaction.constant.CompactionPriority;
@@ -813,11 +814,6 @@ public class IoTDBConfig {
/** cache size for pages in one schema file */
private int pageCacheSizeInSchemaFile = 1024;
- /**
- * Ip and port of config nodes. each one is a {internalIp | domain
name}:{meta port} string tuple.
- */
- private List<String> configNodeUrls =
Collections.singletonList("127.0.0.1:22277");
-
/** Internal ip for data node */
private String internalIp = "127.0.0.1";
@@ -827,6 +823,10 @@ public class IoTDBConfig {
/** Internal port for consensus protocol */
private int consensusPort = 40010;
+ /** Ip and port of config nodes. */
+ private List<TEndPoint> configNodeList =
+ Collections.singletonList(new TEndPoint("127.0.0.1", 22277));
+
/** The max time of data node waiting to join into the cluster */
private long joinClusterTimeOutMs = TimeUnit.SECONDS.toMillis(5);
@@ -2618,14 +2618,6 @@ public class IoTDBConfig {
this.pageCacheSizeInSchemaFile = pageCacheSizeInSchemaFile;
}
- public List<String> getConfigNodeUrls() {
- return configNodeUrls;
- }
-
- public void setConfigNodeUrls(List<String> configNodeUrls) {
- this.configNodeUrls = configNodeUrls;
- }
-
public String getInternalIp() {
return internalIp;
}
@@ -2650,6 +2642,14 @@ public class IoTDBConfig {
this.consensusPort = consensusPort;
}
+ public List<TEndPoint> getConfigNodeList() {
+ return configNodeList;
+ }
+
+ public void setConfigNodeList(List<TEndPoint> configNodeList) {
+ this.configNodeList = configNodeList;
+ }
+
public long getJoinClusterTimeOutMs() {
return joinClusterTimeOutMs;
}
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index 866b786e6f..162fdf0af6 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -18,8 +18,11 @@
*/
package org.apache.iotdb.db.conf;
+import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.commons.conf.CommonConfig;
import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.commons.exception.BadNodeUrlException;
+import org.apache.iotdb.commons.utils.NodeUrlUtils;
import org.apache.iotdb.confignode.rpc.thrift.TGlobalConfig;
import org.apache.iotdb.db.conf.directories.DirectoryManager;
import org.apache.iotdb.db.engine.StorageEngine;
@@ -57,9 +60,6 @@ import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
import java.util.Properties;
public class IoTDBDescriptor {
@@ -947,27 +947,19 @@ public class IoTDBDescriptor {
conf.setInternalIp(InetAddress.getByName(conf.getInternalIp()).getHostAddress());
}
- List<String> newConfigNodeUrls = new ArrayList<>();
- for (String nodeUrl : conf.getConfigNodeUrls()) {
- String[] splits = nodeUrl.split(":");
- if (splits.length != 2) {
- throw new BadNodeUrlFormatException(nodeUrl);
- }
- String nodeIP = splits[0];
- boolean isInvalidNodeIp = InetAddresses.isInetAddress(nodeIP);
+ for (TEndPoint configNode : conf.getConfigNodeList()) {
+ boolean isInvalidNodeIp = InetAddresses.isInetAddress(configNode.ip);
if (!isInvalidNodeIp) {
- String newNodeIP = InetAddress.getByName(nodeIP).getHostAddress();
- newConfigNodeUrls.add(newNodeIP + ":" + splits[1]);
- } else {
- newConfigNodeUrls.add(nodeUrl);
+ String newNodeIP =
InetAddress.getByName(configNode.ip).getHostAddress();
+ configNode.setIp(newNodeIP);
}
}
- conf.setConfigNodeUrls(newConfigNodeUrls);
+
logger.debug(
"after replace, the rpcIP={}, internalIP={}, configNodeUrls={}",
conf.getRpcAddress(),
conf.getInternalIp(),
- conf.getConfigNodeUrls());
+ conf.getConfigNodeList());
}
private void loadWALProps(Properties properties) {
@@ -1576,8 +1568,12 @@ public class IoTDBDescriptor {
public void loadClusterProps(Properties properties) {
String configNodeUrls = properties.getProperty("config_nodes");
if (configNodeUrls != null) {
- List<String> urlList = getNodeUrlList(configNodeUrls);
- conf.setConfigNodeUrls(urlList);
+ try {
+
conf.setConfigNodeList(NodeUrlUtils.parseTEndPointUrls(configNodeUrls));
+ } catch (BadNodeUrlException e) {
+ logger.error(
+ "Config nodes are set in wrong format, please set them like
0.0.0.0:22277,0.0.0.0:22281");
+ }
}
conf.setInternalIp(properties.getProperty("internal_ip",
conf.getInternalIp()));
@@ -1636,28 +1632,6 @@ public class IoTDBDescriptor {
}
}
- /**
- * Split the node urls as one list.
- *
- * @param nodeUrls the config node urls.
- * @return the node urls as a list.
- */
- public static List<String> getNodeUrlList(String nodeUrls) {
- if (nodeUrls == null) {
- return Collections.emptyList();
- }
- List<String> urlList = new ArrayList<>();
- String[] split = nodeUrls.split(",");
- for (String nodeUrl : split) {
- nodeUrl = nodeUrl.trim();
- if ("".equals(nodeUrl)) {
- continue;
- }
- urlList.add(nodeUrl);
- }
- return urlList;
- }
-
// These configurations are received from config node when registering
public void loadGlobalConfig(TGlobalConfig globalConfig) {
conf.setSeriesPartitionExecutorClass(globalConfig.getSeriesPartitionExecutorClass());
diff --git
a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java
b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
similarity index 89%
rename from server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java
rename to server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
index 49e5ace2a3..bd408eea38 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfigCheck.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBStartCheck.java
@@ -18,9 +18,12 @@
*/
package org.apache.iotdb.db.conf;
+import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.commons.conf.IoTDBConstant;
+import org.apache.iotdb.commons.exception.BadNodeUrlException;
import org.apache.iotdb.commons.exception.ConfigurationException;
import org.apache.iotdb.commons.file.SystemFileFactory;
+import org.apache.iotdb.commons.utils.NodeUrlUtils;
import org.apache.iotdb.db.metadata.upgrade.MetadataUpgrader;
import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
@@ -38,13 +41,14 @@ import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
-public class IoTDBConfigCheck {
+public class IoTDBStartCheck {
- private static final Logger logger =
LoggerFactory.getLogger(IoTDBConfigCheck.class);
+ private static final Logger logger =
LoggerFactory.getLogger(IoTDBStartCheck.class);
private static final IoTDBConfig config =
IoTDBDescriptor.getInstance().getConfig();
@@ -108,18 +112,20 @@ public class IoTDBConfigCheck {
private static final String DATA_NODE_ID = "data_node_id";
+ private static final String CONFIG_NODE_LIST = "config_node_list";
+
private static final String IOTDB_VERSION_STRING = "iotdb_version";
- public static IoTDBConfigCheck getInstance() {
+ public static IoTDBStartCheck getInstance() {
return IoTDBConfigCheckHolder.INSTANCE;
}
private static class IoTDBConfigCheckHolder {
- private static final IoTDBConfigCheck INSTANCE = new IoTDBConfigCheck();
+ private static final IoTDBStartCheck INSTANCE = new IoTDBStartCheck();
}
- private IoTDBConfigCheck() {
+ private IoTDBStartCheck() {
logger.info("Starting IoTDB " + IoTDBConstant.VERSION);
// check whether SCHEMA_DIR exists, create if not exists
@@ -180,10 +186,10 @@ public class IoTDBConfigCheck {
public void checkConfig() throws ConfigurationException, IOException {
propertiesFile =
SystemFileFactory.INSTANCE.getFile(
- IoTDBConfigCheck.SCHEMA_DIR + File.separator +
PROPERTIES_FILE_NAME);
+ IoTDBStartCheck.SCHEMA_DIR + File.separator +
PROPERTIES_FILE_NAME);
tmpPropertiesFile =
SystemFileFactory.INSTANCE.getFile(
- IoTDBConfigCheck.SCHEMA_DIR + File.separator +
PROPERTIES_FILE_NAME + ".tmp");
+ IoTDBStartCheck.SCHEMA_DIR + File.separator + PROPERTIES_FILE_NAME
+ ".tmp");
// system init first time, no need to check, write system.properties and
return
if (!propertiesFile.exists() && !tmpPropertiesFile.exists()) {
@@ -409,4 +415,38 @@ public class IoTDBConfigCheck {
// rename system.properties.tmp to system.properties
FileUtils.moveFile(tmpPropertiesFile, propertiesFile);
}
+
+ /** call this method to serialize config node list */
+ public void serializeConfigNodeList(List<TEndPoint> configNodeList) throws
IOException {
+ // create an empty tmpPropertiesFile
+ if (tmpPropertiesFile.createNewFile()) {
+ logger.info("Create system.properties.tmp {}.", tmpPropertiesFile);
+ } else {
+ logger.error("Create system.properties.tmp {} failed.",
tmpPropertiesFile);
+ System.exit(-1);
+ }
+
+ try (FileOutputStream tmpFOS = new
FileOutputStream(tmpPropertiesFile.toString())) {
+ properties.setProperty(CONFIG_NODE_LIST,
NodeUrlUtils.convertTEndPointUrls(configNodeList));
+ properties.store(tmpFOS, SYSTEM_PROPERTIES_STRING);
+ // serialize finished, delete old system.properties file
+ if (propertiesFile.exists()) {
+ Files.delete(propertiesFile.toPath());
+ }
+ }
+ // rename system.properties.tmp to system.properties
+ FileUtils.moveFile(tmpPropertiesFile, propertiesFile);
+ }
+
+ public void loadConfigNodeList() {
+ // properties contain CONFIG_NODE_LIST only when start as Data node
+ try {
+ if (properties.containsKey(CONFIG_NODE_LIST)) {
+ config.setConfigNodeList(
+
NodeUrlUtils.parseTEndPointUrls(properties.getProperty(CONFIG_NODE_LIST)));
+ }
+ } catch (BadNodeUrlException e) {
+ logger.error("Cannot parse config node list in system.properties");
+ }
+ }
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
index 3dffffb032..9ea66f3776 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterPartitionFetcher.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.db.mpp.plan.analyze;
import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
import org.apache.iotdb.common.rpc.thrift.TSeriesPartitionSlot;
import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
-import org.apache.iotdb.commons.exception.BadNodeUrlException;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.partition.DataPartition;
import org.apache.iotdb.commons.partition.DataPartitionQueryParam;
@@ -86,7 +85,7 @@ public class ClusterPartitionFetcher implements
IPartitionFetcher {
private ClusterPartitionFetcher() {
try {
client = new ConfigNodeClient();
- } catch (IoTDBConnectionException | BadNodeUrlException e) {
+ } catch (IoTDBConnectionException e) {
throw new StatementAnalyzeException("Couldn't connect config node");
}
this.partitionExecutor =
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/AuthorizerConfigTask.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/AuthorizerConfigTask.java
index bc1c4a0236..e3d43e18a7 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/AuthorizerConfigTask.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/AuthorizerConfigTask.java
@@ -21,7 +21,6 @@ package org.apache.iotdb.db.mpp.plan.execution.config;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.auth.AuthException;
-import org.apache.iotdb.commons.exception.BadNodeUrlException;
import org.apache.iotdb.confignode.rpc.thrift.TAuthorizerReq;
import org.apache.iotdb.confignode.rpc.thrift.TAuthorizerResp;
import org.apache.iotdb.db.client.ConfigNodeClient;
@@ -109,7 +108,7 @@ public class AuthorizerConfigTask implements IConfigTask {
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
- } catch (IoTDBConnectionException | BadNodeUrlException e) {
+ } catch (IoTDBConnectionException e) {
LOGGER.error("Failed to connect to config node.");
future.setException(e);
} finally {
@@ -169,7 +168,7 @@ public class AuthorizerConfigTask implements IConfigTask {
future.set(
new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS, builder.build(),
datasetHeader));
}
- } catch (IoTDBConnectionException | BadNodeUrlException e) {
+ } catch (IoTDBConnectionException e) {
LOGGER.error("Failed to connect to config node.");
future.setException(e);
} finally {
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/CountStorageGroupTask.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/CountStorageGroupTask.java
index 2c51e8dfe7..5f08ae0cce 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/CountStorageGroupTask.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/CountStorageGroupTask.java
@@ -20,7 +20,6 @@
package org.apache.iotdb.db.mpp.plan.execution.config;
import org.apache.iotdb.commons.conf.IoTDBConstant;
-import org.apache.iotdb.commons.exception.BadNodeUrlException;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.confignode.rpc.thrift.TCountStorageGroupResp;
import org.apache.iotdb.db.client.ConfigNodeClient;
@@ -67,7 +66,7 @@ public class CountStorageGroupTask implements IConfigTask {
client = new ConfigNodeClient();
TCountStorageGroupResp resp =
client.countMatchedStorageGroups(storageGroupPathPattern);
storageGroupNum = resp.getCount();
- } catch (IoTDBConnectionException | BadNodeUrlException e) {
+ } catch (IoTDBConnectionException e) {
LOGGER.error("Failed to connect to config node.");
future.setException(e);
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/SetStorageGroupTask.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/SetStorageGroupTask.java
index b391254696..f3e5ed34e5 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/SetStorageGroupTask.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/SetStorageGroupTask.java
@@ -20,7 +20,6 @@
package org.apache.iotdb.db.mpp.plan.execution.config;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.exception.BadNodeUrlException;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.confignode.rpc.thrift.TSetStorageGroupReq;
import org.apache.iotdb.confignode.rpc.thrift.TStorageGroupSchema;
@@ -73,7 +72,7 @@ public class SetStorageGroupTask implements IConfigTask {
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
- } catch (IoTDBConnectionException | BadNodeUrlException e) {
+ } catch (IoTDBConnectionException e) {
LOGGER.error("Failed to connect to config node.");
future.setException(e);
} finally {
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/SetTTLTask.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/SetTTLTask.java
index 7a56e587f6..0a3af19191 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/SetTTLTask.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/SetTTLTask.java
@@ -20,7 +20,6 @@
package org.apache.iotdb.db.mpp.plan.execution.config;
import org.apache.iotdb.common.rpc.thrift.TSStatus;
-import org.apache.iotdb.commons.exception.BadNodeUrlException;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.confignode.rpc.thrift.TSetTTLReq;
import org.apache.iotdb.db.client.ConfigNodeClient;
@@ -74,7 +73,7 @@ public class SetTTLTask implements IConfigTask {
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
- } catch (IoTDBConnectionException | BadNodeUrlException e) {
+ } catch (IoTDBConnectionException e) {
LOGGER.error("Failed to connect to config node.");
future.setException(e);
} finally {
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ShowStorageGroupTask.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ShowStorageGroupTask.java
index a2cc411b7b..853a0136a1 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ShowStorageGroupTask.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ShowStorageGroupTask.java
@@ -20,7 +20,6 @@
package org.apache.iotdb.db.mpp.plan.execution.config;
import org.apache.iotdb.commons.conf.IoTDBConstant;
-import org.apache.iotdb.commons.exception.BadNodeUrlException;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.confignode.rpc.thrift.TStorageGroupSchemaResp;
@@ -71,7 +70,7 @@ public class ShowStorageGroupTask implements IConfigTask {
TStorageGroupSchemaResp resp =
client.getMatchedStorageGroupSchemas(storageGroupPathPattern);
storageGroupPaths = new
ArrayList<>(resp.getStorageGroupSchemaMap().keySet());
- } catch (IoTDBConnectionException | BadNodeUrlException e) {
+ } catch (IoTDBConnectionException e) {
LOGGER.error("Failed to connect to config node.");
future.setException(e);
} finally {
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ShowTTLTask.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ShowTTLTask.java
index 6a1c031385..1cb7b0f978 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ShowTTLTask.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/config/ShowTTLTask.java
@@ -19,7 +19,6 @@
package org.apache.iotdb.db.mpp.plan.execution.config;
-import org.apache.iotdb.commons.exception.BadNodeUrlException;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.path.PartialPath;
import org.apache.iotdb.confignode.rpc.thrift.TStorageGroupSchema;
@@ -88,7 +87,7 @@ public class ShowTTLTask implements IConfigTask {
}
}
}
- } catch (IoTDBConnectionException | BadNodeUrlException e) {
+ } catch (IoTDBConnectionException e) {
LOGGER.error("Failed to connect to config node.");
future.setException(e);
} finally {
diff --git a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
index d6cce8c638..61b764e2eb 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/DataNode.java
@@ -22,18 +22,18 @@ import org.apache.iotdb.common.rpc.thrift.TDataNodeLocation;
import org.apache.iotdb.common.rpc.thrift.TEndPoint;
import org.apache.iotdb.commons.concurrent.IoTDBDefaultThreadExceptionHandler;
import org.apache.iotdb.commons.conf.IoTDBConstant;
-import org.apache.iotdb.commons.exception.BadNodeUrlException;
import org.apache.iotdb.commons.exception.ConfigurationException;
import org.apache.iotdb.commons.exception.StartupException;
import org.apache.iotdb.commons.service.JMXService;
import org.apache.iotdb.commons.service.RegisterManager;
import org.apache.iotdb.commons.service.StartupChecks;
+import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeLocation;
import org.apache.iotdb.confignode.rpc.thrift.TDataNodeRegisterReq;
import org.apache.iotdb.confignode.rpc.thrift.TDataNodeRegisterResp;
import org.apache.iotdb.db.client.ConfigNodeClient;
import org.apache.iotdb.db.conf.IoTDBConfig;
-import org.apache.iotdb.db.conf.IoTDBConfigCheck;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.IoTDBStartCheck;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor;
import org.apache.iotdb.db.consensus.ConsensusImpl;
import org.apache.iotdb.db.engine.StorageEngineV2;
@@ -64,6 +64,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
public class DataNode implements DataNodeMBean {
private static final Logger logger = LoggerFactory.getLogger(DataNode.class);
@@ -98,7 +100,7 @@ public class DataNode implements DataNodeMBean {
}
protected void serverCheckAndInit() throws ConfigurationException,
IOException {
- IoTDBConfigCheck.getInstance().checkConfig();
+ IoTDBStartCheck.getInstance().checkConfig();
IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
// TODO: check configuration for data node
@@ -134,16 +136,11 @@ public class DataNode implements DataNodeMBean {
public void joinCluster() throws StartupException {
int retry = DEFAULT_JOIN_RETRY;
- ConfigNodeClient configNodeClient = null;
- try {
- configNodeClient = new ConfigNodeClient();
- } catch (IoTDBConnectionException | BadNodeUrlException e) {
- throw new StartupException(e.getMessage());
- }
while (retry > 0) {
logger.info("start joining the cluster.");
try {
+ ConfigNodeClient configNodeClient = new ConfigNodeClient();
IoTDBConfig config = IoTDBDescriptor.getInstance().getConfig();
TDataNodeRegisterReq req = new TDataNodeRegisterReq();
TDataNodeLocation location = new TDataNodeLocation();
@@ -158,21 +155,35 @@ public class DataNode implements DataNodeMBean {
req.setDataNodeLocation(location);
TDataNodeRegisterResp dataNodeRegisterResp =
configNodeClient.registerDataNode(req);
+
+ // store config node lists from resp
+ List<TEndPoint> configNodeList = new ArrayList<>();
+ for (TConfigNodeLocation configNodeLocation :
dataNodeRegisterResp.getConfigNodeList()) {
+ configNodeList.add(configNodeLocation.getInternalEndPoint());
+ }
+ config.setConfigNodeList(configNodeList);
+ IoTDBStartCheck.getInstance().serializeConfigNodeList(configNodeList);
+
if (dataNodeRegisterResp.getStatus().getCode()
== TSStatusCode.SUCCESS_STATUS.getStatusCode()
|| dataNodeRegisterResp.getStatus().getCode()
== TSStatusCode.DATANODE_ALREADY_REGISTERED.getStatusCode()) {
+ logger.info(dataNodeRegisterResp.getStatus().getMessage());
int dataNodeID = dataNodeRegisterResp.getDataNodeId();
if (dataNodeID != config.getDataNodeId()) {
- IoTDBConfigCheck.getInstance().serializeDataNodeId(dataNodeID);
+ IoTDBStartCheck.getInstance().serializeDataNodeId(dataNodeID);
config.setDataNodeId(dataNodeID);
}
IoTDBDescriptor.getInstance().loadGlobalConfig(dataNodeRegisterResp.globalConfig);
logger.info("Joined the cluster successfully");
return;
}
- } catch (IOException | IoTDBConnectionException e) {
+ } catch (IOException e) {
+ logger.warn("Cannot join the cluster, because: {}", e.getMessage());
+ } catch (IoTDBConnectionException e) {
+ // read config nodes from system.properties
logger.warn("Cannot join the cluster, because: {}", e.getMessage());
+ IoTDBStartCheck.getInstance().loadConfigNodeList();
}
try {
diff --git a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
index db38f5838a..ba315a5ea1 100644
--- a/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
+++ b/server/src/main/java/org/apache/iotdb/db/service/IoTDB.java
@@ -25,8 +25,8 @@ import org.apache.iotdb.commons.exception.StartupException;
import org.apache.iotdb.commons.service.JMXService;
import org.apache.iotdb.commons.service.RegisterManager;
import org.apache.iotdb.commons.service.StartupChecks;
-import org.apache.iotdb.db.conf.IoTDBConfigCheck;
import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.IoTDBStartCheck;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceCheck;
import org.apache.iotdb.db.conf.rest.IoTDBRestServiceDescriptor;
import org.apache.iotdb.db.engine.StorageEngine;
@@ -78,7 +78,7 @@ public class IoTDB implements IoTDBMBean {
public static void main(String[] args) {
try {
- IoTDBConfigCheck.getInstance().checkConfig();
+ IoTDBStartCheck.getInstance().checkConfig();
IoTDBRestServiceCheck.getInstance().checkConfig();
} catch (ConfigurationException | IOException e) {
logger.error("meet error when doing start checking", e);