liyuheng55555 commented on code in PR #12165:
URL: https://github.com/apache/iotdb/pull/12165#discussion_r1533429359


##########
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java:
##########
@@ -535,125 +537,136 @@ public boolean removeDataNode(RemoveDataNodePlan 
removeDataNodePlan) {
     return true;
   }
 
-  public TSStatus migrateRegion(TMigrateRegionReq migrateRegionReq) {
-    TConsensusGroupId regionGroupId;
+  // region region migration
+
+  private TConsensusGroupId idToTConsensusGroupId(final int regionId) throws 
ProcedureException {
     if (configManager
         .getPartitionManager()
-        .isRegionGroupExists(
-            new TConsensusGroupId(
-                TConsensusGroupType.SchemaRegion, 
migrateRegionReq.getRegionId()))) {
-      regionGroupId =
-          new TConsensusGroupId(TConsensusGroupType.SchemaRegion, 
migrateRegionReq.getRegionId());
-    } else if (configManager
+        .isRegionGroupExists(new 
TConsensusGroupId(TConsensusGroupType.SchemaRegion, regionId))) {
+      return new TConsensusGroupId(TConsensusGroupType.SchemaRegion, regionId);
+    }
+    if (configManager
         .getPartitionManager()
-        .isRegionGroupExists(
-            new TConsensusGroupId(
-                TConsensusGroupType.DataRegion, 
migrateRegionReq.getRegionId()))) {
-      regionGroupId =
-          new TConsensusGroupId(TConsensusGroupType.DataRegion, 
migrateRegionReq.getRegionId());
-    } else {
-      LOGGER.warn(
-          "Submit RegionMigrateProcedure failed, because RegionGroup: {} 
doesn't exist",
-          migrateRegionReq.getRegionId());
-      TSStatus status = new 
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
-      status.setMessage(
-          String.format(
-              "Submit RegionMigrateProcedure failed, because RegionGroup: %s 
doesn't exist",
-              migrateRegionReq.getRegionId()));
-      return status;
+        .isRegionGroupExists(new 
TConsensusGroupId(TConsensusGroupType.DataRegion, regionId))) {
+      return new TConsensusGroupId(TConsensusGroupType.DataRegion, regionId);
     }
+    String msg =
+        String.format(
+            "Submit RegionMigrateProcedure failed, because RegionGroup: %s 
doesn't exist",
+            regionId);
+    LOGGER.warn(msg);
+    throw new ProcedureException(msg);
+  }
 
-    TDataNodeLocation originalDataNode =
-        configManager
-            .getNodeManager()
-            .getRegisteredDataNode(migrateRegionReq.getFromId())
-            .getLocation();
-    TDataNodeLocation destDataNode =
-        configManager
-            .getNodeManager()
-            .getRegisteredDataNode(migrateRegionReq.getToId())
-            .getLocation();
-
+  private TSStatus checkRegionMigrate(
+      TMigrateRegionReq migrateRegionReq,
+      TConsensusGroupId regionGroupId,
+      TDataNodeLocation originalDataNode,
+      TDataNodeLocation destDataNode,
+      TDataNodeLocation coordinatorForAddPeer) {
+    String failMessage = null;
     if (originalDataNode == null) {
-      LOGGER.warn(
-          "Submit RegionMigrateProcedure failed, because no original DataNode 
{}",
-          migrateRegionReq.getFromId());
-      TSStatus status = new 
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
-      status.setMessage(
-          "Submit RegionMigrateProcedure failed, because no original DataNode "
-              + migrateRegionReq.getFromId());
-      return status;
+      failMessage =
+          String.format(
+              "Submit RegionMigrateProcedure failed, because no original 
DataNode %d",
+              migrateRegionReq.getFromId());
     } else if (destDataNode == null) {
-      LOGGER.warn(
-          "Submit RegionMigrateProcedure failed, because no target DataNode 
{}",
-          migrateRegionReq.getToId());
-      TSStatus status = new 
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
-      status.setMessage(
-          "Submit RegionMigrateProcedure failed, because no target DataNode "
-              + migrateRegionReq.getToId());
-      return status;
+      failMessage =
+          String.format(
+              "Submit RegionMigrateProcedure failed, because no target 
DataNode %s",
+              migrateRegionReq.getToId());
+    } else if (coordinatorForAddPeer == null) {
+      failMessage =
+          String.format(
+              "%s, There are no other DataNodes could be selected to perform 
the add peer process, "
+                  + "please check RegionGroup: %s by show regions sql command",
+              REGION_MIGRATE_PROCESS, regionGroupId);
     } else if (configManager.getPartitionManager()
         .getAllReplicaSets(originalDataNode.getDataNodeId()).stream()
         .noneMatch(replicaSet -> 
replicaSet.getRegionId().equals(regionGroupId))) {
-      LOGGER.warn(
-          "Submit RegionMigrateProcedure failed, because the original DataNode 
{} doesn't contain Region {}",
-          migrateRegionReq.getFromId(),
-          migrateRegionReq.getRegionId());
-      TSStatus status = new 
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
-      status.setMessage(
-          "Submit RegionMigrateProcedure failed, because the original DataNode 
"
-              + migrateRegionReq.getFromId()
-              + " doesn't contain Region "
-              + migrateRegionReq.getRegionId());
-      return status;
+      failMessage =
+          String.format(
+              "Submit RegionMigrateProcedure failed, because the original 
DataNode %s doesn't contain Region %s",
+              migrateRegionReq.getFromId(), migrateRegionReq.getRegionId());
     } else if 
(configManager.getPartitionManager().getAllReplicaSets(destDataNode.getDataNodeId())
         .stream()
         .anyMatch(replicaSet -> 
replicaSet.getRegionId().equals(regionGroupId))) {
-      LOGGER.warn(
-          "Submit RegionMigrateProcedure failed, because the target DataNode 
{} already contains Region {}",
-          migrateRegionReq.getToId(),
-          migrateRegionReq.getRegionId());
-      TSStatus status = new 
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
-      status.setMessage(
-          "Submit RegionMigrateProcedure failed, because the target DataNode "
-              + migrateRegionReq.getToId()
-              + " already contains Region "
-              + migrateRegionReq.getRegionId());
-      return status;
-    }
-    // Here we only check Running DataNode to implement migration, because 
removing nodes may not
-    // exist when add peer is performing
-    Set<Integer> aliveDataNodes =
-        
configManager.getNodeManager().filterDataNodeThroughStatus(NodeStatus.Running).stream()
-            .map(TDataNodeConfiguration::getLocation)
-            .map(TDataNodeLocation::getDataNodeId)
-            .collect(Collectors.toSet());
-    if (NodeStatus.Unknown.equals(
+      failMessage =
+          String.format(
+              "Submit RegionMigrateProcedure failed, because the target 
DataNode %s already contains Region %s",
+              migrateRegionReq.getToId(), migrateRegionReq.getRegionId());
+    } else if (NodeStatus.Unknown.equals(
         
configManager.getLoadManager().getNodeStatus(migrateRegionReq.getFromId()))) {
-      LOGGER.warn(
-          "Submit RegionMigrateProcedure failed, because the sourceDataNode {} 
is Unknown.",
-          migrateRegionReq.getFromId());
-      TSStatus status = new 
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
-      status.setMessage(
-          "Submit RegionMigrateProcedure failed, because the sourceDataNode "
-              + migrateRegionReq.getFromId()
-              + " is Unknown.");
-      return status;
+      failMessage =
+          String.format(
+              "Submit RegionMigrateProcedure failed, because the 
sourceDataNode %s is Unknown.",
+              migrateRegionReq.getFromId());

Review Comment:
   deleted



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to