This is an automated email from the ASF dual-hosted git repository.
tanxinyu 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 612ecd4f75e Refactor node registration check (#12766)
612ecd4f75e is described below
commit 612ecd4f75e767c5983d17e28f6090877ec86570
Author: Li Yu Heng <[email protected]>
AuthorDate: Wed Jun 19 16:34:08 2024 +0800
Refactor node registration check (#12766)
* done
* done
---
.../iotdb/confignode/manager/ConfigManager.java | 14 +--
.../manager/node/ClusterNodeStartUtils.java | 115 +++++++++++++--------
2 files changed, 73 insertions(+), 56 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index 20dddc56b09..7bb252fe8ac 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -401,12 +401,7 @@ public class ConfigManager implements IManager {
public DataSet registerDataNode(TDataNodeRegisterReq req) {
TSStatus status = confirmLeader();
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- status =
- ClusterNodeStartUtils.confirmNodeRegistration(
- NodeType.DataNode,
- req.getClusterName(),
- req.getDataNodeConfiguration().getLocation(),
- this);
+ status = ClusterNodeStartUtils.confirmDataNodeRegistration(req, this);
if (!req.isPreCheck() && status.getCode() ==
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return nodeManager.registerDataNode(req);
}
@@ -1211,12 +1206,7 @@ public class ConfigManager implements IManager {
// Make sure the global configurations are consist
status = checkConfigNodeGlobalConfig(req);
if (status == null) {
- status =
- ClusterNodeStartUtils.confirmNodeRegistration(
- NodeType.ConfigNode,
- req.getClusterParameters().getClusterName(),
- req.getConfigNodeLocation(),
- this);
+ status = ClusterNodeStartUtils.confirmConfigNodeRegistration(req,
this);
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return nodeManager.registerConfigNode(req);
}
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/ClusterNodeStartUtils.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/ClusterNodeStartUtils.java
index 6b809928fa4..1230746e357 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/ClusterNodeStartUtils.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/node/ClusterNodeStartUtils.java
@@ -29,6 +29,8 @@ import org.apache.iotdb.commons.conf.CommonConfig;
import org.apache.iotdb.commons.conf.CommonDescriptor;
import org.apache.iotdb.confignode.conf.ConfigNodeDescriptor;
import org.apache.iotdb.confignode.manager.ConfigManager;
+import org.apache.iotdb.confignode.rpc.thrift.TConfigNodeRegisterReq;
+import org.apache.iotdb.confignode.rpc.thrift.TDataNodeRegisterReq;
import org.apache.iotdb.rpc.TSStatusCode;
import java.util.ArrayList;
@@ -54,11 +56,8 @@ public class ClusterNodeStartUtils {
// Empty constructor
}
- public static TSStatus confirmNodeRegistration(
- NodeType nodeType, String clusterName, Object nodeLocation,
ConfigManager configManager) {
+ private static TSStatus confirmClusterName(NodeType nodeType, String
clusterName) {
TSStatus status = new TSStatus();
-
- /* Reject start if the cluster name is error */
if (!CLUSTER_NAME.equals(clusterName)) {
status.setCode(TSStatusCode.REJECT_NODE_START.getStatusCode());
status.setMessage(
@@ -76,46 +75,28 @@ public class ClusterNodeStartUtils {
CommonConfig.SYSTEM_CONFIG_NAME));
return status;
}
+ return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+ }
- /* Check if there exist conflict TEndPoints */
- List<TEndPoint> conflictEndPoints = null;
- switch (nodeType) {
- case ConfigNode:
- if (nodeLocation instanceof TConfigNodeLocation) {
- conflictEndPoints =
- checkConflictTEndPointForNewConfigNode(
- (TConfigNodeLocation) nodeLocation,
- configManager.getNodeManager().getRegisteredConfigNodes());
- }
- break;
- case DataNode:
- default:
- if (nodeLocation instanceof TDataNodeLocation) {
- conflictEndPoints =
- checkConflictTEndPointForNewDataNode(
- (TDataNodeLocation) nodeLocation,
- configManager.getNodeManager().getRegisteredDataNodes());
- }
- break;
- }
-
- if (conflictEndPoints != null && !conflictEndPoints.isEmpty()) {
- /* Reject Node registration because there exist conflict TEndPoints */
- status.setCode(TSStatusCode.REJECT_NODE_START.getStatusCode());
- status.setMessage(
- String.format(
- "Reject %s registration. Because the following ip:port: %s of
the current %s is conflicted with other registered Nodes in the cluster."
- + POSSIBLE_SOLUTIONS
- + "\t1. Use SQL: \"show cluster details\" to find out the
conflict Nodes. Remove them and retry start."
- + "\n\t2. Change the conflict ip:port configurations in %s
file and retry start.",
- nodeType.getNodeType(),
- conflictEndPoints,
- nodeType.getNodeType(),
- CommonConfig.SYSTEM_CONFIG_NAME));
- return status;
- }
+ private static TSStatus rejectRegistrationBecauseConflictEndPoints(
+ NodeType nodeType, List<TEndPoint> conflictEndPoints) {
+ TSStatus status = new TSStatus();
+ status.setCode(TSStatusCode.REJECT_NODE_START.getStatusCode());
+ status.setMessage(
+ String.format(
+ "Reject %s registration. Because the following ip:port: %s of the
current %s is conflicted with other registered Nodes in the cluster."
+ + POSSIBLE_SOLUTIONS
+ + "\t1. Use SQL: \"show cluster details\" to find out the
conflict Nodes. Remove them and retry start."
+ + "\n\t2. Change the conflict ip:port configurations in %s
file and retry start.",
+ nodeType.getNodeType(),
+ conflictEndPoints,
+ nodeType.getNodeType(),
+ CommonConfig.SYSTEM_CONFIG_NAME));
+ return status;
+ }
- // Check cluster id
+ public static TSStatus confirmClusterId(ConfigManager configManager) {
+ TSStatus status = new TSStatus();
final String clusterId =
configManager
.getClusterManager()
@@ -124,11 +105,57 @@ public class ClusterNodeStartUtils {
if (clusterId == null) {
status
.setCode(TSStatusCode.GET_CLUSTER_ID_ERROR.getStatusCode())
- .setMessage("clusterId has not generated, please try again later");
+ .setMessage("cluster id has not generated, please try again later");
+ return status;
+ }
+ return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+ }
+
+ public static TSStatus confirmDataNodeRegistration(
+ TDataNodeRegisterReq req, ConfigManager configManager) {
+ // Confirm cluster name
+ TSStatus status = confirmClusterName(NodeType.DataNode,
req.getClusterName());
+ if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ return status;
+ }
+ // Confirm end point conflicts
+ List<TEndPoint> conflictEndPoints =
+ checkConflictTEndPointForNewDataNode(
+ req.getDataNodeConfiguration().getLocation(),
+ configManager.getNodeManager().getRegisteredDataNodes());
+ if (!conflictEndPoints.isEmpty()) {
+ return rejectRegistrationBecauseConflictEndPoints(NodeType.DataNode,
conflictEndPoints);
+ }
+ // Confirm whether cluster id has been generated
+ status = confirmClusterId(configManager);
+ if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
return status;
}
+ // Success
+ return ACCEPT_NODE_REGISTRATION;
+ }
- /* Accept registration if all TEndPoints aren't conflict */
+ public static TSStatus confirmConfigNodeRegistration(
+ TConfigNodeRegisterReq req, ConfigManager configManager) {
+ // Confirm cluster name
+ TSStatus status =
+ confirmClusterName(NodeType.ConfigNode,
req.getClusterParameters().getClusterName());
+ if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ return status;
+ }
+ // Confirm end point conflicts
+ List<TEndPoint> conflictEndPoints =
+ checkConflictTEndPointForNewConfigNode(
+ req.getConfigNodeLocation(),
configManager.getNodeManager().getRegisteredConfigNodes());
+ if (!conflictEndPoints.isEmpty()) {
+ return rejectRegistrationBecauseConflictEndPoints(NodeType.ConfigNode,
conflictEndPoints);
+ }
+ // Confirm whether cluster id has been generated
+ status = confirmClusterId(configManager);
+ if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ return status;
+ }
+ // Success
return ACCEPT_NODE_REGISTRATION;
}