This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch ty/FixBug in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 259f4251f4e61d0b76ae89b172bb12a9b7846528 Author: JackieTien97 <[email protected]> AuthorDate: Thu Aug 29 12:31:14 2024 +0800 Fix query stuck while DN restarting & keep quite while cleaning sort tmp file --- .../apache/iotdb/db/queryengine/execution/driver/Driver.java | 2 +- .../execution/fragment/FragmentInstanceExecution.java | 2 +- .../queryengine/execution/fragment/FragmentInstanceState.java | 2 +- .../plan/scheduler/FixedRateFragInsStateTracker.java | 8 ++++++++ .../main/java/org/apache/iotdb/commons/utils/FileUtils.java | 10 +++++++++- 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/Driver.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/Driver.java index 1211df6b74b..812c84298fc 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/Driver.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/Driver.java @@ -445,7 +445,7 @@ public abstract class Driver implements IDriver { if (!tmpPipeLineDir.exists()) { return; } - FileUtils.deleteFileOrDirectory(tmpPipeLineDir); + FileUtils.deleteFileOrDirectory(tmpPipeLineDir, true); } private static Throwable addSuppressedException( diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceExecution.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceExecution.java index c42834f5190..d1c8cc8ff6a 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceExecution.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceExecution.java @@ -358,7 +358,7 @@ public class FragmentInstanceExecution { + File.separator; File tmpFile = new File(tmpFilePath); if (tmpFile.exists()) { - FileUtils.deleteFileOrDirectory(tmpFile); + FileUtils.deleteFileOrDirectory(tmpFile, true); } } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceState.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceState.java index 77531e94494..092b1be3816 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceState.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceState.java @@ -47,7 +47,7 @@ public enum FragmentInstanceState { /** Instance execution failed. */ FAILED(true, true), /** Instance is not found. */ - NO_SUCH_INSTANCE(false, false); + NO_SUCH_INSTANCE(false, true); public static final Set<FragmentInstanceState> TERMINAL_INSTANCE_STATES = Stream.of(FragmentInstanceState.values()) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FixedRateFragInsStateTracker.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FixedRateFragInsStateTracker.java index 31b5742a9d0..608abea2ba7 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FixedRateFragInsStateTracker.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/FixedRateFragInsStateTracker.java @@ -143,6 +143,14 @@ public class FixedRateFragInsStateTracker extends AbstractFragInsStateTracker { } private void updateQueryState(FragmentInstanceId instanceId, FragmentInstanceInfo instanceInfo) { + // no such instance may be caused by DN restarting + if (instanceInfo.getState() == FragmentInstanceState.NO_SUCH_INSTANCE) { + stateMachine.transitionToFailed( + new RuntimeException( + String.format( + "FragmentInstance[%s] is failed. %s, may be caused by DN restarting.", + instanceId, instanceInfo.getMessage()))); + } if (instanceInfo.getState().isFailed()) { if (instanceInfo.getFailureInfoList() == null || instanceInfo.getFailureInfoList().isEmpty()) { diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/FileUtils.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/FileUtils.java index 71498bbe220..1fca92394af 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/FileUtils.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/FileUtils.java @@ -62,6 +62,10 @@ public class FileUtils { } public static void deleteFileOrDirectory(File file) { + deleteFileOrDirectory(file, false); + } + + public static void deleteFileOrDirectory(File file, boolean quiteForNoSuchFile) { if (file.isDirectory()) { for (File subfile : file.listFiles()) { deleteFileOrDirectory(subfile); @@ -69,7 +73,11 @@ public class FileUtils { } try { Files.delete(file.toPath()); - } catch (NoSuchFileException | DirectoryNotEmptyException e) { + } catch (NoSuchFileException e) { + if (!quiteForNoSuchFile) { + LOGGER.warn("{}: {}", e.getMessage(), Arrays.toString(file.list()), e); + } + } catch (DirectoryNotEmptyException e) { LOGGER.warn("{}: {}", e.getMessage(), Arrays.toString(file.list()), e); } catch (Exception e) { LOGGER.warn("{}: {}", e.getMessage(), file.getName(), e);
