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 07e146faee6 [region migration] Handle InterruptedException during 
waitTaskFinish() more properly #14305
07e146faee6 is described below

commit 07e146faee65ee60403121703e47f7297b73719e
Author: Li Yu Heng <[email protected]>
AuthorDate: Wed Dec 4 12:08:28 2024 +0800

    [region migration] Handle InterruptedException during waitTaskFinish() more 
properly #14305
---
 .../procedure/env/RegionMaintainHandler.java       | 27 +++++++++++-----------
 .../impl/region/AddRegionPeerProcedure.java        |  5 ++--
 2 files changed, 16 insertions(+), 16 deletions(-)

diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/RegionMaintainHandler.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/RegionMaintainHandler.java
index 946f0f07bbf..c221342e3a6 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/RegionMaintainHandler.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/env/RegionMaintainHandler.java
@@ -336,27 +336,26 @@ public class RegionMaintainHandler {
               MAX_DISCONNECTION_TOLERATE_MS);
       long disconnectionTime = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() 
- lastReportTime);
       if (disconnectionTime > waitTime) {
-        break;
+        LOGGER.warn(
+            "{} task {} cannot get task report from DataNode {}, last report 
time is {} ago",
+            REGION_MIGRATE_PROCESS,
+            taskId,
+            dataNodeLocation,
+            CommonDateTimeUtils.convertMillisecondToDurationStr(
+                TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - 
lastReportTime)));
+        TRegionMigrateResult report = new TRegionMigrateResult();
+        report.setTaskStatus(TRegionMaintainTaskStatus.FAIL);
+        report.setFailedNodeAndReason(new HashMap<>());
+        report.getFailedNodeAndReason().put(dataNodeLocation, 
TRegionMigrateFailedType.Disconnect);
+        return report;
       }
       try {
         TimeUnit.SECONDS.sleep(1);
       } catch (InterruptedException ignore) {
         Thread.currentThread().interrupt();
-        break;
+        return new TRegionMigrateResult(TRegionMaintainTaskStatus.PROCESSING);
       }
     }
-    LOGGER.warn(
-        "{} task {} cannot get task report from DataNode {}, last report time 
is {} ago",
-        REGION_MIGRATE_PROCESS,
-        taskId,
-        dataNodeLocation,
-        CommonDateTimeUtils.convertMillisecondToDurationStr(
-            TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - 
lastReportTime)));
-    TRegionMigrateResult report = new TRegionMigrateResult();
-    report.setTaskStatus(TRegionMaintainTaskStatus.FAIL);
-    report.setFailedNodeAndReason(new HashMap<>());
-    report.getFailedNodeAndReason().put(dataNodeLocation, 
TRegionMigrateFailedType.Disconnect);
-    return report;
   }
 
   public void addRegionLocation(TConsensusGroupId regionId, TDataNodeLocation 
newLocation) {
diff --git 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/AddRegionPeerProcedure.java
 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/AddRegionPeerProcedure.java
index d06f40d3331..e835d69be2d 100644
--- 
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/AddRegionPeerProcedure.java
+++ 
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/region/AddRegionPeerProcedure.java
@@ -123,8 +123,9 @@ public class AddRegionPeerProcedure
               return warnAndRollBackAndNoMoreState(
                   env, handler, String.format("%s result is %s", state, 
result.getTaskStatus()));
             case PROCESSING:
-              // should never happen
-              return warnAndRollBackAndNoMoreState(env, handler, "should never 
return PROCESSING");
+              LOGGER.info(
+                  "waitTaskFinish() returns PROCESSING, which means the 
waiting has been interrupted, this procedure will end without rollback");
+              return Flow.NO_MORE_STATE;
             case SUCCESS:
               setNextState(UPDATE_REGION_LOCATION_CACHE);
               break outerSwitch;

Reply via email to