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;