This is an automated email from the ASF dual-hosted git repository.

jackietien 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 0db4ec4373f Fix accidental wrong error msg
0db4ec4373f is described below

commit 0db4ec4373fd346481416b2906272251722326ec
Author: Jackie Tien <[email protected]>
AuthorDate: Fri Oct 25 09:30:11 2024 +0800

    Fix accidental wrong error msg
---
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |  5 +++-
 .../exception/MemoryNotEnoughException.java        |  8 ++++--
 .../db/queryengine/execution/driver/Driver.java    |  6 +++-
 .../execution/driver/DriverContext.java            |  6 ++--
 .../fragment/FragmentInstanceContext.java          |  6 +++-
 .../fragment/FragmentInstanceExecution.java        |  2 +-
 .../execution/schedule/AbstractDriverThread.java   | 11 ++++----
 .../execution/schedule/DriverScheduler.java        | 32 +++++++++++++---------
 .../schedule/DriverTaskAbortedException.java       |  2 +-
 .../execution/schedule/DriverTaskThread.java       |  5 +++-
 .../schedule/DriverTaskTimeoutSentinelThread.java  |  3 +-
 .../execution/schedule/IDriverScheduler.java       |  2 +-
 .../execution/schedule/task/DriverTask.java        |  9 +++---
 .../apache/iotdb/db/utils/ErrorHandlingUtils.java  |  3 --
 .../execution/schedule/DriverSchedulerTest.java    | 14 ++++++----
 .../DriverTaskTimeoutSentinelThreadTest.java       | 14 ++++++----
 .../commons/exception/QueryTimeoutException.java}  | 11 +++++---
 17 files changed, 87 insertions(+), 52 deletions(-)

diff --git 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
index 0f091451e5b..70175e3ec35 100644
--- 
a/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
+++ 
b/iotdb-client/service-rpc/src/main/java/org/apache/iotdb/rpc/TSStatusCode.java
@@ -131,7 +131,10 @@ public enum TSStatusCode {
   EXPLAIN_ANALYZE_FETCH_ERROR(716),
   TOO_MANY_CONCURRENT_QUERIES_ERROR(717),
 
-  OPERATOR_NOT_FOUND(716),
+  OPERATOR_NOT_FOUND(718),
+
+  QUERY_EXECUTION_MEMORY_NOT_ENOUGH(719),
+  QUERY_TIMEOUT(720),
 
   // Arithmetic
   NUMERIC_VALUE_OUT_OF_RANGE(750),
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/exception/MemoryNotEnoughException.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/exception/MemoryNotEnoughException.java
index c0911254cb7..769399d51ab 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/exception/MemoryNotEnoughException.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/exception/MemoryNotEnoughException.java
@@ -19,9 +19,13 @@
 
 package org.apache.iotdb.db.queryengine.exception;
 
-public class MemoryNotEnoughException extends RuntimeException {
+import org.apache.iotdb.commons.exception.IoTDBRuntimeException;
+
+import static 
org.apache.iotdb.rpc.TSStatusCode.QUERY_EXECUTION_MEMORY_NOT_ENOUGH;
+
+public class MemoryNotEnoughException extends IoTDBRuntimeException {
 
   public MemoryNotEnoughException(String message) {
-    super(message);
+    super(message, QUERY_EXECUTION_MEMORY_NOT_ENOUGH.getStatusCode());
   }
 }
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 812c84298fc..248cce28240 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
@@ -246,7 +246,11 @@ public abstract class Driver implements IDriver {
       List<StackTraceElement> interrupterStack = 
exclusiveLock.getInterrupterStack();
       if (interrupterStack == null) {
         driverContext.failed(t);
-        throw new RuntimeException(t);
+        if (t instanceof RuntimeException) {
+          throw (RuntimeException) t;
+        } else {
+          throw new RuntimeException(t);
+        }
       }
 
       // Driver thread was interrupted which should only happen if the task is 
already finished.
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DriverContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DriverContext.java
index 79cb4acf3b9..0c3fa448c64 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DriverContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DriverContext.java
@@ -121,8 +121,10 @@ public class DriverContext {
   }
 
   public void failed(Throwable cause) {
-    fragmentInstanceContext.failed(cause);
-    finished.set(true);
+    if (finished.compareAndSet(false, true)) {
+      fragmentInstanceContext.failed(cause);
+      finished.set(true);
+    }
   }
 
   public void finished() {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
index 94917b12cd6..7771358e9de 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
@@ -395,7 +395,11 @@ public class FragmentInstanceContext extends QueryContext {
   }
 
   public Optional<Throwable> getFailureCause() {
-    return Optional.ofNullable(stateMachine.getFailureCauses().peek());
+    return Optional.ofNullable(
+        stateMachine.getFailureCauses().stream()
+            .filter(e -> e instanceof IoTDBException || e instanceof 
IoTDBRuntimeException)
+            .findFirst()
+            .orElse(stateMachine.getFailureCauses().peek()));
   }
 
   public Filter getGlobalTimeFilter() {
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 d1c8cc8ff6a..fbca6d8442b 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
@@ -327,7 +327,7 @@ public class FragmentInstanceExecution {
             context.releaseMemoryReservationManager();
 
             if (newState.isFailed()) {
-              scheduler.abortFragmentInstance(instanceId);
+              scheduler.abortFragmentInstance(instanceId, 
context.getFailureCause().orElse(null));
             }
           } catch (Throwable t) {
             try (SetThreadName threadName = new 
SetThreadName(instanceId.getFullId())) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/AbstractDriverThread.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/AbstractDriverThread.java
index 889eed8675f..58cbfb13db7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/AbstractDriverThread.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/AbstractDriverThread.java
@@ -81,10 +81,10 @@ public abstract class AbstractDriverThread extends Thread 
implements Closeable {
               new 
SetThreadName(next.getDriver().getDriverTaskId().getFullId())) {
             Throwable rootCause = ErrorHandlingUtils.getRootCause(e);
             if (rootCause instanceof IoTDBRuntimeException) {
-              next.setAbortCause(e.getMessage());
+              next.setAbortCause(rootCause);
             } else {
               logger.warn("[ExecuteFailed]", e);
-              next.setAbortCause(getAbortCause(e));
+              next.setAbortCause(getAbortCause(e, 
next.getDriverTaskId().getFullId()));
             }
             scheduler.toAborted(next);
           }
@@ -122,11 +122,12 @@ public abstract class AbstractDriverThread extends Thread 
implements Closeable {
     closed = true;
   }
 
-  private String getAbortCause(final Exception e) {
+  private Throwable getAbortCause(final Exception e, String fullId) {
     Throwable rootCause = ErrorHandlingUtils.getRootCause(e);
     if (rootCause instanceof MemoryNotEnoughException) {
-      return DriverTaskAbortedException.BY_MEMORY_NOT_ENOUGH;
+      return rootCause;
     }
-    return DriverTaskAbortedException.BY_INTERNAL_ERROR_SCHEDULED;
+    return new DriverTaskAbortedException(
+        fullId, DriverTaskAbortedException.BY_INTERNAL_ERROR_SCHEDULED);
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverScheduler.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverScheduler.java
index 09dab3d7819..dfe4fc9a742 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverScheduler.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverScheduler.java
@@ -50,7 +50,6 @@ import org.apache.iotdb.mpp.rpc.thrift.TFragmentInstanceId;
 
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
-import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -60,6 +59,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.OptionalInt;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
@@ -301,7 +301,10 @@ public class DriverScheduler implements IDriverScheduler, 
IService {
       for (Set<DriverTask> fragmentRelatedTasks : queryRelatedTasks.values()) {
         if (fragmentRelatedTasks != null) {
           for (DriverTask task : fragmentRelatedTasks) {
-            
task.setAbortCause(DriverTaskAbortedException.BY_QUERY_CASCADING_ABORTED);
+            task.setAbortCause(
+                new DriverTaskAbortedException(
+                    task.getDriverTaskId().getFullId(),
+                    DriverTaskAbortedException.BY_QUERY_CASCADING_ABORTED));
             clearDriverTask(task);
           }
         }
@@ -310,7 +313,7 @@ public class DriverScheduler implements IDriverScheduler, 
IService {
   }
 
   @Override
-  public void abortFragmentInstance(FragmentInstanceId instanceId) {
+  public void abortFragmentInstance(FragmentInstanceId instanceId, Throwable 
t) {
     Map<FragmentInstanceId, Set<DriverTask>> queryRelatedTasks =
         queryMap.get(instanceId.getQueryId());
     if (queryRelatedTasks != null) {
@@ -321,7 +324,12 @@ public class DriverScheduler implements IDriverScheduler, 
IService {
             if (task == null) {
               return;
             }
-            
task.setAbortCause(DriverTaskAbortedException.BY_FRAGMENT_ABORT_CALLED);
+            task.setAbortCause(
+                t == null
+                    ? new DriverTaskAbortedException(
+                        task.getDriverTaskId().getFullId(),
+                        DriverTaskAbortedException.BY_FRAGMENT_ABORT_CALLED)
+                    : t);
             clearDriverTask(task);
           }
         }
@@ -380,12 +388,9 @@ public class DriverScheduler implements IDriverScheduler, 
IService {
       }
       try {
         task.lock();
-        if (task.getAbortCause() != null) {
+        if (task.getAbortCause().isPresent()) {
           try {
-            task.getDriver()
-                .failed(
-                    new DriverTaskAbortedException(
-                        task.getDriver().getDriverTaskId().getFullId(), 
task.getAbortCause()));
+            task.getDriver().failed(task.getAbortCause().get());
           } catch (Exception e) {
             logger.error("Clear DriverTask failed", e);
           }
@@ -586,7 +591,7 @@ public class DriverScheduler implements IDriverScheduler, 
IService {
           task.unlock();
         }
         clearDriverTask(task);
-        String abortCause = task.getAbortCause();
+        Optional<Throwable> abortCause = task.getAbortCause();
         QueryId queryId = task.getDriverTaskId().getQueryId();
         Map<FragmentInstanceId, Set<DriverTask>> queryRelatedTasks = 
queryMap.remove(queryId);
         if (queryRelatedTasks != null) {
@@ -598,9 +603,10 @@ public class DriverScheduler implements IDriverScheduler, 
IService {
                     continue;
                   }
                   otherTask.setAbortCause(
-                      StringUtils.isEmpty(abortCause)
-                          ? 
DriverTaskAbortedException.BY_QUERY_CASCADING_ABORTED
-                          : abortCause);
+                      abortCause.orElse(
+                          new DriverTaskAbortedException(
+                              otherTask.getDriverTaskId().getFullId(),
+                              
DriverTaskAbortedException.BY_QUERY_CASCADING_ABORTED)));
                   clearDriverTask(otherTask);
                 }
               }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskAbortedException.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskAbortedException.java
index aac6d9fdebe..3fc00cd559b 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskAbortedException.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskAbortedException.java
@@ -25,7 +25,7 @@ import 
org.apache.iotdb.db.queryengine.execution.driver.IDriver;
 public class DriverTaskAbortedException extends Exception {
 
   public static final String BY_TIMEOUT = "timeout";
-  public static final String BY_FRAGMENT_ABORT_CALLED = " called";
+  public static final String BY_FRAGMENT_ABORT_CALLED = "called";
   public static final String BY_QUERY_CASCADING_ABORTED = "query cascading 
aborted";
   public static final String BY_ALREADY_BEING_CANCELLED = "already being 
cancelled";
   public static final String BY_INTERNAL_ERROR_SCHEDULED = "internal error 
scheduled";
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskThread.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskThread.java
index 8cbbb537670..132c11dadc1 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskThread.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskThread.java
@@ -83,7 +83,10 @@ public class DriverTaskThread extends AbstractDriverThread {
     ListenableFuture<?> future = driver.processFor(timeSlice);
     // If the future is cancelled, the task is in an error and should be 
thrown.
     if (future.isCancelled()) {
-      
task.setAbortCause(DriverTaskAbortedException.BY_ALREADY_BEING_CANCELLED);
+      task.setAbortCause(
+          new DriverTaskAbortedException(
+              task.getDriverTaskId().getFullId(),
+              DriverTaskAbortedException.BY_ALREADY_BEING_CANCELLED));
       scheduler.toAborted(task);
       return;
     }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThread.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThread.java
index 9fb4e59dda2..69f7e3020b7 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThread.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThread.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.db.queryengine.execution.schedule;
 
+import org.apache.iotdb.commons.exception.QueryTimeoutException;
 import 
org.apache.iotdb.db.queryengine.execution.schedule.queue.IndexedBlockingQueue;
 import org.apache.iotdb.db.queryengine.execution.schedule.task.DriverTask;
 
@@ -84,7 +85,7 @@ public class DriverTaskTimeoutSentinelThread extends 
AbstractDriverThread {
         "[DriverTaskTimeout] Current time is {}, ddl of task is {}",
         System.currentTimeMillis(),
         task.getDDL());
-    task.setAbortCause(DriverTaskAbortedException.BY_TIMEOUT);
+    task.setAbortCause(new QueryTimeoutException());
     scheduler.toAborted(task);
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/IDriverScheduler.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/IDriverScheduler.java
index faa33ce112b..1569870bd49 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/IDriverScheduler.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/IDriverScheduler.java
@@ -57,5 +57,5 @@ public interface IDriverScheduler {
    *
    * @param instanceId the id of the fragment instance to be aborted.
    */
-  void abortFragmentInstance(FragmentInstanceId instanceId);
+  void abortFragmentInstance(FragmentInstanceId instanceId, Throwable t);
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/task/DriverTask.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/task/DriverTask.java
index acbbcde6fab..fcfef17db1d 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/task/DriverTask.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/schedule/task/DriverTask.java
@@ -37,6 +37,7 @@ import com.google.common.util.concurrent.SettableFuture;
 import io.airlift.units.Duration;
 
 import java.util.Comparator;
+import java.util.Optional;
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
@@ -52,7 +53,7 @@ public class DriverTask implements IDIndexedAccessible {
 
   private final boolean isHighestPriority;
 
-  private String abortCause;
+  private Throwable abortCause;
 
   private final AtomicReference<Priority> priority;
 
@@ -149,11 +150,11 @@ public class DriverTask implements IDIndexedAccessible {
     return o instanceof DriverTask && ((DriverTask) 
o).getDriverTaskId().equals(getDriverTaskId());
   }
 
-  public String getAbortCause() {
-    return abortCause;
+  public Optional<Throwable> getAbortCause() {
+    return Optional.ofNullable(abortCause);
   }
 
-  public void setAbortCause(String abortCause) {
+  public void setAbortCause(Throwable abortCause) {
     this.abortCause = abortCause;
   }
 
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
index b3b173ce37d..76fdbb04010 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
@@ -30,7 +30,6 @@ import 
org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.exception.query.QueryTimeoutRuntimeException;
 import org.apache.iotdb.db.exception.sql.SemanticException;
 import org.apache.iotdb.db.protocol.thrift.OperationType;
-import org.apache.iotdb.db.queryengine.exception.MemoryNotEnoughException;
 import org.apache.iotdb.rpc.RpcUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
 
@@ -161,8 +160,6 @@ public class ErrorHandlingUtils {
       return RpcUtils.getStatus(((IoTDBRuntimeException) t).getErrorCode(), 
t.getMessage());
     } else if (t instanceof ModelException) {
       return RpcUtils.getStatus(((ModelException) t).getStatusCode(), 
rootCause.getMessage());
-    } else if (t instanceof MemoryNotEnoughException) {
-      return RpcUtils.getStatus(TSStatusCode.QUOTA_MEM_QUERY_NOT_ENOUGH, 
rootCause.getMessage());
     }
 
     if (t instanceof RuntimeException && rootCause instanceof IoTDBException) {
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverSchedulerTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverSchedulerTest.java
index 4b9e6d7d8c5..b651b62441e 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverSchedulerTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverSchedulerTest.java
@@ -133,7 +133,7 @@ public class DriverSchedulerTest {
     // Abort one FragmentInstance
     Mockito.reset(mockDriver1);
     Mockito.when(mockDriver1.getDriverTaskId()).thenReturn(driverTaskId1);
-    manager.abortFragmentInstance(instanceId1);
+    manager.abortFragmentInstance(instanceId1, null);
     Mockito.verify(mockMPPDataExchangeManager, Mockito.times(1))
         .forceDeregisterFragmentInstance(Mockito.any());
     Assert.assertTrue(manager.getBlockedTasks().isEmpty());
@@ -146,7 +146,9 @@ public class DriverSchedulerTest {
     Assert.assertEquals(DriverTaskStatus.READY, task3.getStatus());
     Assert.assertEquals(DriverTaskStatus.READY, task4.getStatus());
     Mockito.verify(mockDriver1, Mockito.times(1)).failed(Mockito.any());
-    Assert.assertEquals(DriverTaskAbortedException.BY_FRAGMENT_ABORT_CALLED, 
task1.getAbortCause());
+    Assert.assertEquals(
+        "DriverTask test.0.inst-0.0 is aborted by called",
+        task1.getAbortCause().get().getMessage());
 
     // Abort the whole query
     Mockito.reset(mockMPPDataExchangeManager);
@@ -173,9 +175,11 @@ public class DriverSchedulerTest {
     Mockito.verify(mockDriver3, Mockito.times(1)).failed(Mockito.any());
     Mockito.verify(mockDriver4, Mockito.never()).failed(Mockito.any());
     Assert.assertEquals(
-        DriverTaskAbortedException.BY_QUERY_CASCADING_ABORTED, 
task2.getAbortCause());
+        "DriverTask test.0.inst-1.0 is aborted by query cascading aborted",
+        task2.getAbortCause().get().getMessage());
     Assert.assertEquals(
-        DriverTaskAbortedException.BY_QUERY_CASCADING_ABORTED, 
task3.getAbortCause());
-    Assert.assertNull(task4.getAbortCause());
+        "DriverTask test.0.inst-2.0 is aborted by query cascading aborted",
+        task3.getAbortCause().get().getMessage());
+    Assert.assertFalse(task4.getAbortCause().isPresent());
   }
 }
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThreadTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThreadTest.java
index 85575b136a1..22aa7dfc27a 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThreadTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/schedule/DriverTaskTimeoutSentinelThreadTest.java
@@ -99,7 +99,7 @@ public class DriverTaskTimeoutSentinelThreadTest {
     executor.execute(testTask);
     Assert.assertEquals(DriverTaskStatus.BLOCKED, testTask.getStatus());
     Mockito.verify(mockDriver, Mockito.never()).processFor(Mockito.any());
-    Assert.assertNull(testTask.getAbortCause());
+    Assert.assertFalse(testTask.getAbortCause().isPresent());
     Mockito.verify(mockScheduler, Mockito.never()).toAborted(Mockito.any());
     Mockito.verify(mockScheduler, 
Mockito.never()).runningToBlocked(Mockito.any(), Mockito.any());
     Mockito.verify(mockScheduler, 
Mockito.never()).runningToFinished(Mockito.any(), Mockito.any());
@@ -139,7 +139,8 @@ public class DriverTaskTimeoutSentinelThreadTest {
     executor.execute(testTask);
     Mockito.verify(mockDriver, Mockito.times(1)).processFor(Mockito.any());
     Assert.assertEquals(
-        DriverTaskAbortedException.BY_ALREADY_BEING_CANCELLED, 
testTask.getAbortCause());
+        "DriverTask test.0.inst-0.0 is aborted by already being cancelled",
+        testTask.getAbortCause().get().getMessage());
     Mockito.verify(mockScheduler, Mockito.times(1)).toAborted(Mockito.any());
     Mockito.verify(mockScheduler, 
Mockito.never()).runningToReady(Mockito.any(), Mockito.any());
     Mockito.verify(mockScheduler, 
Mockito.never()).runningToBlocked(Mockito.any(), Mockito.any());
@@ -179,7 +180,7 @@ public class DriverTaskTimeoutSentinelThreadTest {
     DriverTask testTask = new DriverTask(mockDriver, 100L, 
DriverTaskStatus.READY, null, 0, false);
     executor.execute(testTask);
     Mockito.verify(mockDriver, Mockito.times(1)).processFor(Mockito.any());
-    Assert.assertNull(testTask.getAbortCause());
+    Assert.assertFalse(testTask.getAbortCause().isPresent());
     Mockito.verify(mockScheduler, Mockito.never()).toAborted(Mockito.any());
     Mockito.verify(mockScheduler, 
Mockito.never()).runningToReady(Mockito.any(), Mockito.any());
     Mockito.verify(mockScheduler, 
Mockito.never()).runningToBlocked(Mockito.any(), Mockito.any());
@@ -229,7 +230,7 @@ public class DriverTaskTimeoutSentinelThreadTest {
     DriverTask testTask = new DriverTask(mockDriver, 100L, 
DriverTaskStatus.READY, null, 0, false);
     executor.execute(testTask);
     Mockito.verify(mockDriver, Mockito.times(1)).processFor(Mockito.any());
-    Assert.assertNull(testTask.getAbortCause());
+    Assert.assertFalse(testTask.getAbortCause().isPresent());
     Mockito.verify(mockScheduler, Mockito.never()).toAborted(Mockito.any());
     Mockito.verify(mockScheduler, 
Mockito.never()).runningToReady(Mockito.any(), Mockito.any());
     Mockito.verify(mockScheduler, 
Mockito.times(1)).runningToBlocked(Mockito.any(), Mockito.any());
@@ -280,7 +281,7 @@ public class DriverTaskTimeoutSentinelThreadTest {
     DriverTask testTask = new DriverTask(mockDriver, 100L, 
DriverTaskStatus.READY, null, 0, false);
     executor.execute(testTask);
     Mockito.verify(mockDriver, Mockito.times(1)).processFor(Mockito.any());
-    Assert.assertNull(testTask.getAbortCause());
+    Assert.assertFalse(testTask.getAbortCause().isPresent());
     Mockito.verify(mockScheduler, Mockito.never()).toAborted(Mockito.any());
     Mockito.verify(mockScheduler, 
Mockito.times(1)).runningToReady(Mockito.any(), Mockito.any());
     Mockito.verify(mockScheduler, 
Mockito.never()).runningToBlocked(Mockito.any(), Mockito.any());
@@ -323,7 +324,8 @@ public class DriverTaskTimeoutSentinelThreadTest {
     executor.run(); // Here we use run() instead of start() to execute the 
task in the same thread
     Mockito.verify(mockDriver, Mockito.times(1)).processFor(Mockito.any());
     Assert.assertEquals(
-        DriverTaskAbortedException.BY_INTERNAL_ERROR_SCHEDULED, 
testTask.getAbortCause());
+        "DriverTask test.0.inst-0.0 is aborted by internal error scheduled",
+        testTask.getAbortCause().get().getMessage());
     Assert.assertEquals(0, taskQueue.size());
     Mockito.verify(mockScheduler, Mockito.times(1)).toAborted(Mockito.any());
     Mockito.verify(mockScheduler, 
Mockito.never()).runningToReady(Mockito.any(), Mockito.any());
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/exception/MemoryNotEnoughException.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/exception/QueryTimeoutException.java
similarity index 73%
copy from 
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/exception/MemoryNotEnoughException.java
copy to 
iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/exception/QueryTimeoutException.java
index c0911254cb7..61569a83826 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/exception/MemoryNotEnoughException.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/exception/QueryTimeoutException.java
@@ -15,13 +15,16 @@
  * KIND, either express or implied.  See the License for the
  * specific language governing permissions and limitations
  * under the License.
+ *
  */
 
-package org.apache.iotdb.db.queryengine.exception;
+package org.apache.iotdb.commons.exception;
+
+import static org.apache.iotdb.rpc.TSStatusCode.QUERY_TIMEOUT;
 
-public class MemoryNotEnoughException extends RuntimeException {
+public class QueryTimeoutException extends IoTDBRuntimeException {
 
-  public MemoryNotEnoughException(String message) {
-    super(message);
+  public QueryTimeoutException() {
+    super("Query execution is time out", QUERY_TIMEOUT.getStatusCode(), true);
   }
 }

Reply via email to