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


##########
iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/ProcedureManager.java:
##########
@@ -794,39 +917,48 @@ private TSStatus checkRegionMigrate(
           ((RemoveDataNodesProcedure) 
conflictRemoveDataNodesProcedure.get()).getRemovedDataNodes();
       Set<TConsensusGroupId> removedDataNodesRegionSet =
           removeDataNodeHandler.getRemovedDataNodesRegionSet(removedDataNodes);
-      if (removedDataNodesRegionSet.contains(regionGroupId)) {
-        failMessage =
-            String.format(
-                "Submit RegionMigrateProcedure failed, "
-                    + "because another RemoveDataNodesProcedure %s is already 
in processing which conflicts with this RegionMigrateProcedure. "
-                    + "The RemoveDataNodesProcedure is removing the DataNodes 
%s which contains the region %s. "
-                    + "For further information, please search [pid%d] in log. 
",
-                conflictRemoveDataNodesProcedure.get().getProcId(),
-                removedDataNodes,
-                regionGroupId,
-                conflictRemoveDataNodesProcedure.get().getProcId());
-      } else if (removedDataNodes.contains(destDataNode)) {
-        failMessage =
-            String.format(
-                "Submit RegionMigrateProcedure failed, "
-                    + "because another RemoveDataNodesProcedure %s is already 
in processing which conflicts with this RegionMigrateProcedure. "
-                    + "The RemoveDataNodesProcedure is removing the target 
DataNode %s. "
-                    + "For further information, please search [pid%d] in log. 
",
-                conflictRemoveDataNodesProcedure.get().getProcId(),
-                destDataNode,
-                conflictRemoveDataNodesProcedure.get().getProcId());
+      if (removedDataNodesRegionSet.contains(regionId)) {
+        return String.format(
+            "Another RemoveDataNodesProcedure %s is already in processing 
which conflicts with this procedure. "
+                + "The RemoveDataNodesProcedure is removing the DataNodes %s 
which contains the region %s. "
+                + "For further information, please search [pid%d] in log. ",
+            conflictRemoveDataNodesProcedure.get().getProcId(),
+            removedDataNodes,
+            regionId,
+            conflictRemoveDataNodesProcedure.get().getProcId());
+      } else if (removedDataNodes.contains(targetDataNode)) {
+        return String.format(
+            "Another RemoveDataNodesProcedure %s is already in processing 
which conflicts with this procedure. "
+                + "The RemoveDataNodesProcedure is removing the target 
DataNode %s. "
+                + "For further information, please search [pid%d] in log. ",
+            conflictRemoveDataNodesProcedure.get().getProcId(),
+            targetDataNode,
+            conflictRemoveDataNodesProcedure.get().getProcId());
       }
     }
+    return null;
+  }
 
-    if (failMessage != null) {
-      LOGGER.warn(failMessage);
-      TSStatus failStatus = new 
TSStatus(TSStatusCode.MIGRATE_REGION_ERROR.getStatusCode());
-      failStatus.setMessage(failMessage);
-      return failStatus;
+  private String checkRegionOperationDuplication(TConsensusGroupId regionId) {
+    List<? extends RegionOperationProcedure<?>> 
otherRegionMemberChangeProcedures =
+        getExecutor().getProcedures().values().stream()
+            .filter(procedure -> !procedure.isFinished())
+            .filter(procedure -> procedure instanceof RegionOperationProcedure)
+            .map(procedure -> (RegionOperationProcedure<?>) procedure)
+            .filter(
+                regionMemberChangeProcedure ->
+                    regionId.equals(regionMemberChangeProcedure.getRegionId()))
+            .collect(Collectors.toList());
+    if (!otherRegionMemberChangeProcedures.isEmpty()) {
+      return String.format(
+          "%s has some other region operation procedures in progress, their 
procedure id is: %s",
+          regionId, otherRegionMemberChangeProcedures);
     }
-    return new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode());
+    return null;
   }
 
+  // end region
+
   public TSStatus migrateRegion(TMigrateRegionReq migrateRegionReq) {
     env.getSubmitRegionMigrateLock().lock();

Review Comment:
   sure



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