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

Reply via email to