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);
}
}