This is an automated email from the ASF dual-hosted git repository.
justinchen pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new e27a673dd30 [To dev/1.3] Pipe: Fixed the NPE caused by multiple errors
(#16118)
e27a673dd30 is described below
commit e27a673dd30bc3424942681b0c32c7e5e2207c13
Author: Caideyipi <[email protected]>
AuthorDate: Fri Aug 22 18:20:41 2025 +0800
[To dev/1.3] Pipe: Fixed the NPE caused by multiple errors (#16118)
* Fixed the NPE caused by multiple errors (#16091)
* partial
* fix
* partial
* add-failure-hanlder
(cherry picked from commit 490aab1341b520e4b1931b0de9a4af9540df7a6f)
* fix
* try fix
* Revert "try fix"
This reverts commit db493ae08d157b1d5466b99ef951dd124efbb188.
* fix
* fixup! fix
* add ConfigExecution.java
---------
Co-authored-by: VGalaxies <[email protected]>
---
.../procedure/impl/cq/CreateCQProcedure.java | 4 +-
.../procedure/impl/schema/SetTTLProcedure.java | 2 +-
.../impl/schema/SetTemplateProcedure.java | 12 +--
.../impl/schema/UnsetTemplateProcedure.java | 4 +-
.../impl/sync/AuthOperationProcedure.java | 2 +-
.../iotdb/db/auth/ClusterAuthorityFetcher.java | 5 +-
.../queryengine/execution/QueryStateMachine.java | 2 +-
.../analyze/cache/partition/PartitionCache.java | 3 +-
.../analyze/schema/AutoCreateSchemaExecutor.java | 6 +-
.../queryengine/plan/execution/QueryExecution.java | 3 +-
.../plan/execution/config/ConfigExecution.java | 17 +++-
.../plan/execution/config/ConfigTaskResult.java | 11 +++
.../config/executor/ClusterConfigTaskExecutor.java | 104 ++++++++++-----------
.../template/ClusterTemplateManager.java | 10 +-
.../apache/iotdb/db/utils/ErrorHandlingUtils.java | 9 +-
.../iotdb/commons/exception/IoTDBException.java | 17 ++++
.../commons/exception/IoTDBRuntimeException.java | 15 +++
17 files changed, 137 insertions(+), 89 deletions(-)
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/cq/CreateCQProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/cq/CreateCQProcedure.java
index 2b274be607c..3da60c5ad84 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/cq/CreateCQProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/cq/CreateCQProcedure.java
@@ -136,10 +136,10 @@ public class CreateCQProcedure extends
AbstractNodeProcedure<CreateCQState> {
setNextState(INACTIVE);
} else if (res.code == TSStatusCode.CQ_ALREADY_EXIST.getStatusCode()) {
LOGGER.info("Failed to init CQ {} because such cq already exists",
req.cqId);
- setFailure(new ProcedureException(new IoTDBException(res.message,
res.code)));
+ setFailure(new ProcedureException(new IoTDBException(res)));
} else {
LOGGER.warn("Failed to init CQ {} because of unknown reasons {}",
req.cqId, res);
- setFailure(new ProcedureException(new IoTDBException(res.message,
res.code)));
+ setFailure(new ProcedureException(new IoTDBException(res)));
}
}
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTTLProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTTLProcedure.java
index 9b43af2003b..3e1af7dd1f5 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTTLProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTTLProcedure.java
@@ -97,7 +97,7 @@ public class SetTTLProcedure extends
StateMachineProcedure<ConfigNodeProcedureEn
}
if (res.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
LOGGER.info("Failed to execute plan {} because {}", plan, res.message);
- setFailure(new ProcedureException(new IoTDBException(res.message,
res.code)));
+ setFailure(new ProcedureException(new IoTDBException(res)));
} else {
setNextState(SetTTLState.UPDATE_DATANODE_CACHE);
}
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java
index c0de568f877..d812e715a6c 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/SetTemplateProcedure.java
@@ -165,9 +165,7 @@ public class SetTemplateProcedure
if (resp.getStatus().getCode() ==
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
setNextState(SetTemplateState.PRE_SET);
} else {
- setFailure(
- new ProcedureException(
- new IoTDBException(resp.getStatus().getMessage(),
resp.getStatus().getCode())));
+ setFailure(new ProcedureException(new IoTDBException(resp.getStatus())));
}
}
@@ -190,7 +188,7 @@ public class SetTemplateProcedure
templateName,
templateSetPath,
status.getMessage());
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -364,7 +362,7 @@ public class SetTemplateProcedure
templateName,
templateSetPath,
status.getMessage());
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -466,7 +464,7 @@ public class SetTemplateProcedure
templateName,
templateSetPath,
status.getMessage());
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -525,7 +523,7 @@ public class SetTemplateProcedure
templateName,
templateSetPath,
status.getMessage());
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java
index 49e116c2ccd..f3afb667202 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/UnsetTemplateProcedure.java
@@ -136,7 +136,7 @@ public class UnsetTemplateProcedure
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
setNextState(UnsetTemplateState.CLEAN_DATANODE_TEMPLATE_CACHE);
} else {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -199,7 +199,7 @@ public class UnsetTemplateProcedure
.getClusterSchemaManager()
.unsetSchemaTemplateInBlackList(template.getId(), path,
isGeneratedByPipe);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
diff --git
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
index 20cc759a74c..b643e6de23b 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/sync/AuthOperationProcedure.java
@@ -162,7 +162,7 @@ public class AuthOperationProcedure extends
AbstractNodeProcedure<AuthOperationP
"Execute auth plan {} success. To invalidate datanodes: {}", plan,
dataNodesToInvalid);
} else {
LOGGER.info("Failed to execute plan {} because {}", plan, res.message);
- setFailure(new ProcedureException(new IoTDBException(res.message,
res.code)));
+ setFailure(new ProcedureException(new IoTDBException(res)));
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/ClusterAuthorityFetcher.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/ClusterAuthorityFetcher.java
index 70333039957..5c7ca1c9603 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/ClusterAuthorityFetcher.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/auth/ClusterAuthorityFetcher.java
@@ -313,7 +313,7 @@ public class ClusterAuthorityFetcher implements
IAuthorityFetcher {
"Failed to execute {} in config node, status is {}.",
AuthorType.values()[authorizerReq.getAuthorType()].toString().toLowerCase(Locale.ROOT),
tsStatus);
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -355,8 +355,7 @@ public class ClusterAuthorityFetcher implements
IAuthorityFetcher {
LOGGER.error(CONNECTERROR);
authorizerResp.setStatus(
RpcUtils.getStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR,
CONNECTERROR));
- future.setException(
- new IoTDBException(authorizerResp.getStatus().message,
authorizerResp.getStatus().code));
+ future.setException(new IoTDBException(authorizerResp.getStatus()));
} catch (AuthException e) {
future.setException(e);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/QueryStateMachine.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/QueryStateMachine.java
index cc0f787b014..c7c16f20baf 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/QueryStateMachine.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/QueryStateMachine.java
@@ -149,7 +149,7 @@ public class QueryStateMachine {
public Throwable getFailureException() {
Throwable throwable = failureException.get();
if (throwable == null) {
- return new IoTDBException(getFailureStatus().getMessage(),
getFailureStatus().code);
+ return new IoTDBException(getFailureStatus());
} else {
return throwable;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/partition/PartitionCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/partition/PartitionCache.java
index 2c62d8a67ff..cf876d92882 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/partition/PartitionCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/cache/partition/PartitionCache.java
@@ -263,8 +263,7 @@ public class PartitionCache {
userName, PrivilegeType.MANAGE_DATABASE.ordinal()),
PrivilegeType.MANAGE_DATABASE);
if (status.getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- throw new RuntimeException(
- new IoTDBException(status.getMessage(), status.getCode()));
+ throw new RuntimeException(new IoTDBException(status));
}
}
} finally {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
index 0cfa03dbda4..34fa662d172 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
@@ -558,7 +558,7 @@ class AutoCreateSchemaExecutor {
status = executionResult.status;
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()
&& status.getCode() !=
TSStatusCode.TEMPLATE_IS_IN_USE.getStatusCode()) {
- throw new SemanticException(new IoTDBException(status.getMessage(),
status.getCode()));
+ throw new SemanticException(new IoTDBException(status));
}
}
@@ -590,7 +590,7 @@ class AutoCreateSchemaExecutor {
throw new SemanticException(new MetadataException(String.join("; ",
failedActivationSet)));
}
} else {
- throw new SemanticException(new IoTDBException(status.getMessage(),
status.getCode()));
+ throw new SemanticException(new IoTDBException(status));
}
}
@@ -659,7 +659,7 @@ class AutoCreateSchemaExecutor {
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()
&& status.getCode()
!=
TSStatusCode.MEASUREMENT_ALREADY_EXISTS_IN_TEMPLATE.getStatusCode()) {
- throw new SemanticException(new IoTDBException(status.getMessage(),
status.getCode()));
+ throw new SemanticException(new IoTDBException(status));
}
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
index 28f9753e87a..350dd6394d9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
@@ -457,8 +457,7 @@ public class QueryExecution implements IQueryExecution {
private void dealWithException(Throwable t) throws IoTDBException {
stateMachine.transitionToFailed(t);
if (stateMachine.getFailureStatus() != null) {
- throw new IoTDBException(
- stateMachine.getFailureStatus().getMessage(),
stateMachine.getFailureStatus().code);
+ throw new IoTDBException(stateMachine.getFailureStatus());
} else if (stateMachine.getFailureException() != null) {
Throwable rootCause = stateMachine.getFailureException();
throw new IoTDBException(rootCause,
TSStatusCode.EXECUTE_STATEMENT_ERROR.getStatusCode());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
index 3076e87d5b4..a9d96961834 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
@@ -47,6 +47,7 @@ import javax.validation.constraints.NotNull;
import java.io.IOException;
import java.nio.ByteBuffer;
+import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -124,7 +125,10 @@ public class ConfigExecution implements IQueryExecution {
ConfigTaskResult result;
if (cause instanceof IoTDBException) {
result =
- new ConfigTaskResult(TSStatusCode.representOf(((IoTDBException)
cause).getErrorCode()));
+ Objects.nonNull(((IoTDBException) cause).getStatus())
+ ? new ConfigTaskResult(((IoTDBException) cause).getStatus())
+ : new ConfigTaskResult(
+ TSStatusCode.representOf(((IoTDBException)
cause).getErrorCode()));
} else if (cause instanceof StatementExecutionException) {
result =
new ConfigTaskResult(
@@ -158,14 +162,17 @@ public class ConfigExecution implements IQueryExecution {
@Override
public ExecutionResult getStatus() {
try {
- ConfigTaskResult taskResult = taskFuture.get();
- TSStatusCode statusCode = taskResult.getStatusCode();
+ final ConfigTaskResult taskResult = taskFuture.get();
resultSet = taskResult.getResultSet();
datasetHeader = taskResult.getResultSetHeader();
- String message =
+ if (Objects.nonNull(taskResult.getStatus())) {
+ return new ExecutionResult(context.getQueryId(),
taskResult.getStatus());
+ }
+ final TSStatusCode statusCode = taskResult.getStatusCode();
+ final String message =
statusCode == TSStatusCode.SUCCESS_STATUS ? "" :
stateMachine.getFailureMessage();
return new ExecutionResult(context.getQueryId(),
RpcUtils.getStatus(statusCode, message));
- } catch (InterruptedException | ExecutionException e) {
+ } catch (final InterruptedException | ExecutionException e) {
if (e instanceof InterruptedException) {
Thread.currentThread().interrupt();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskResult.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskResult.java
index cc003e31c77..3f4f525bdc6 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskResult.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigTaskResult.java
@@ -19,12 +19,14 @@
package org.apache.iotdb.db.queryengine.plan.execution.config;
+import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.db.queryengine.common.header.DatasetHeader;
import org.apache.iotdb.rpc.TSStatusCode;
import org.apache.tsfile.read.common.block.TsBlock;
public class ConfigTaskResult {
+ private TSStatus status;
private TSStatusCode statusCode;
private TsBlock resultSet;
private DatasetHeader resultSetHeader;
@@ -40,6 +42,15 @@ public class ConfigTaskResult {
this.resultSetHeader = resultSetHeader;
}
+ public ConfigTaskResult(final TSStatus status) {
+ this.status = status;
+ this.statusCode = TSStatusCode.representOf(status.getCode());
+ }
+
+ public TSStatus getStatus() {
+ return status;
+ }
+
public TSStatusCode getStatusCode() {
return statusCode;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index b128f3ba361..e633ad60735 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -349,7 +349,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
"Failed to execute create database {} in config node, status is
{}.",
databaseSchemaStatement.getDatabasePath(),
tsStatus);
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
}
} else {
@@ -380,7 +380,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
databaseSchemaStatement.getDatabasePath(),
tsStatus);
}
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -451,7 +451,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
future.setException(
new BatchProcessException(tsStatus.subStatus.toArray(new
TSStatus[0])));
} else {
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
}
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
@@ -576,7 +576,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
udfName,
className,
executionStatus.getMessage());
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -595,7 +595,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() !=
executionStatus.getCode()) {
LOGGER.warn("[{}] Failed to drop function {}.", executionStatus,
udfName);
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -750,7 +750,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
executionStatus,
createTriggerStatement.getTriggerName(),
executionStatus.message);
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -768,7 +768,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
final TSStatus executionStatus = client.dropTrigger(new
TDropTriggerReq(triggerName));
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() !=
executionStatus.getCode()) {
LOGGER.warn("[{}] Failed to drop trigger {}.", executionStatus,
triggerName);
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -915,7 +915,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
pluginName,
className,
executionStatus.getMessage());
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -941,7 +941,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
"[{}] Failed to drop pipe plugin {}.",
executionStatus,
dropPipePluginStatement.getPluginName());
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -989,7 +989,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
taskName,
setTTLStatement.getPath(),
tsStatus);
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1022,7 +1022,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (tsStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
} else {
- future.setException(new IoTDBException(tsStatus.message, tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
}
return future;
}
@@ -1050,7 +1050,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (tsStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
} else {
- future.setException(new IoTDBException(tsStatus.message, tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
}
return future;
}
@@ -1078,7 +1078,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (tsStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
} else {
- future.setException(new IoTDBException(tsStatus.message, tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
}
return future;
}
@@ -1098,7 +1098,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
+ ignoredConfigItems
+ " because they are immutable or undefined.");
if (req.getConfigs().isEmpty()) {
- future.setException(new IoTDBException(warningTsStatus.message,
warningTsStatus.code));
+ future.setException(new IoTDBException(warningTsStatus));
return future;
}
}
@@ -1121,7 +1121,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (tsStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
} else {
- future.setException(new IoTDBException(tsStatus.message, tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
}
return future;
}
@@ -1174,7 +1174,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (tsStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
} else {
- future.setException(new IoTDBException(tsStatus.message, tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
}
return future;
}
@@ -1202,7 +1202,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (tsStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
} else {
- future.setException(new IoTDBException(tsStatus.message, tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
}
return future;
}
@@ -1285,7 +1285,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
final TSStatus executionStatus = client.killQuery(queryId, dataNodeId);
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() !=
executionStatus.getCode()) {
LOGGER.warn("Failed to kill query [{}], because {}", queryId,
executionStatus.message);
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1486,7 +1486,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
"Failed to execute create device template {} in config node,
status is {}.",
createSchemaTemplateStatement.getName(),
tsStatus);
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1600,7 +1600,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
deactivateTemplateStatement.getTemplateName(),
deactivateTemplateStatement.getPathPatternList(),
tsStatus);
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1625,7 +1625,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
"Failed to execute drop device template {} in config node, status
is {}.",
dropSchemaTemplateStatement.getTemplateName(),
tsStatus);
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1700,7 +1700,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
"Failed to alter device template {} in config node, status is {}.",
alterSchemaTemplateStatement.getTemplateAlterInfo().getTemplateName(),
tsStatus);
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1756,7 +1756,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
unsetSchemaTemplateStatement.getTemplateName(),
unsetSchemaTemplateStatement.getPath(),
tsStatus);
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1812,7 +1812,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
"Failed to create pipe {} in config node, status is {}.",
createPipeStatement.getPipeName(),
tsStatus);
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1957,7 +1957,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
final TSStatus tsStatus = configNodeClient.alterPipe(req);
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
LOGGER.warn("Failed to alter pipe {} in config node, status is {}.",
pipeName, tsStatus);
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1989,7 +1989,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
LOGGER.warn(
"Failed to start pipe {}, status is {}.",
startPipeStatement.getPipeName(), tsStatus);
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2025,7 +2025,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
LOGGER.warn(
"Failed to drop pipe {}, status is {}.",
dropPipeStatement.getPipeName(), tsStatus);
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2057,7 +2057,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
LOGGER.warn(
"Failed to stop pipe {}, status is {}.",
stopPipeStatement.getPipeName(), tsStatus);
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2141,7 +2141,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
.setSubsciptionId(dropSubscriptionStatement.getSubscriptionId())
.setIfExistsCondition(dropSubscriptionStatement.hasIfExistsCondition()));
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2209,7 +2209,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
final TSStatus tsStatus = configNodeClient.createTopic(req);
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
LOGGER.warn("Failed to create topic {} in config node, status is {}.",
topicName, tsStatus);
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2236,7 +2236,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
LOGGER.warn(
"Failed to drop topic {}, status is {}.",
dropTopicStatement.getTopicName(), tsStatus);
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2314,7 +2314,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
future.setException(
new BatchProcessException(tsStatus.subStatus.toArray(new
TSStatus[0])));
} else {
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
}
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
@@ -2356,7 +2356,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
"Failed to execute delete view {}, status is {}.",
deleteLogicalViewStatement.getPathPatternList(),
tsStatus);
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2442,7 +2442,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
LOGGER.warn("Failed to execute delete view {}, status is {}.",
oldName, tsStatus);
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2521,7 +2521,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
future.setException(
new BatchProcessException(tsStatus.subStatus.toArray(new
TSStatus[0])));
} else {
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
}
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
@@ -2604,7 +2604,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
TimePartitionUtils.getTimePartitionSlot(getRegionIdStatement.getEndTimeStamp()));
resp = configNodeClient.getRegionId(tGetRegionIdReq);
if (resp.getStatus().getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- future.setException(new IoTDBException(resp.getStatus().message,
resp.getStatus().code));
+ future.setException(new IoTDBException(resp.getStatus()));
return future;
}
} catch (Exception e) {
@@ -2627,7 +2627,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
getSeriesSlotListStatement.getPartitionType());
resp = configNodeClient.getSeriesSlotList(tGetSeriesSlotListReq);
if (resp.getStatus().getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- future.setException(new IoTDBException(resp.getStatus().message,
resp.getStatus().code));
+ future.setException(new IoTDBException(resp.getStatus()));
return future;
}
} catch (Exception e) {
@@ -2660,7 +2660,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
}
resp = configNodeClient.getTimeSlotList(tGetTimeSlotListReq);
if (resp.getStatus().getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- future.setException(new IoTDBException(resp.getStatus().message,
resp.getStatus().code));
+ future.setException(new IoTDBException(resp.getStatus()));
return future;
}
} catch (Exception e) {
@@ -2693,7 +2693,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
}
resp = configNodeClient.countTimeSlotList(tCountTimeSlotListReq);
if (resp.getStatus().getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- future.setException(new IoTDBException(resp.getStatus().message,
resp.getStatus().code));
+ future.setException(new IoTDBException(resp.getStatus()));
return future;
}
} catch (Exception e) {
@@ -2716,7 +2716,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
migrateRegionStatement.getToId());
final TSStatus status =
configNodeClient.migrateRegion(tMigrateRegionReq);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- future.setException(new IoTDBException(status.message, status.code));
+ future.setException(new IoTDBException(status));
return future;
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
@@ -2854,7 +2854,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
reconstructRegionStatement.getDataNodeId());
final TSStatus status = configNodeClient.reconstructRegion(req);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- future.setException(new IoTDBException(status.message, status.code));
+ future.setException(new IoTDBException(status));
return future;
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
@@ -2876,7 +2876,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
extendRegionStatement.getRegionIds(),
extendRegionStatement.getDataNodeId());
final TSStatus status = configNodeClient.extendRegion(req);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- future.setException(new IoTDBException(status.message, status.code));
+ future.setException(new IoTDBException(status));
return future;
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
@@ -2898,7 +2898,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
removeRegionStatement.getRegionIds(),
removeRegionStatement.getDataNodeId());
final TSStatus status = configNodeClient.removeRegion(req);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- future.setException(new IoTDBException(status.message, status.code));
+ future.setException(new IoTDBException(status));
return future;
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
@@ -2940,7 +2940,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
executionStatus,
createContinuousQueryStatement.getCqId(),
executionStatus.message);
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2958,7 +2958,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
final TSStatus executionStatus = client.dropCQ(new TDropCQReq(cqId));
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() !=
executionStatus.getCode()) {
LOGGER.warn("[{}] Failed to drop continuous query {}.",
executionStatus, cqId);
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2975,8 +2975,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.CONFIG_REGION_ID)) {
final TShowCQResp showCQResp = client.showCQ();
if (showCQResp.getStatus().getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- future.setException(
- new IoTDBException(showCQResp.getStatus().message,
showCQResp.getStatus().code));
+ future.setException(new IoTDBException(showCQResp.getStatus()));
return future;
}
// convert cqList and buildTsBlock
@@ -3003,7 +3002,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
status,
createModelStatement.getModelName(),
status.message);
- future.setException(new IoTDBException(status.message, status.code));
+ future.setException(new IoTDBException(status));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -3021,7 +3020,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
final TSStatus executionStatus = client.dropModel(new
TDropModelReq(modelName));
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() !=
executionStatus.getCode()) {
LOGGER.warn("[{}] Failed to drop model {}.", executionStatus,
modelName);
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -3042,8 +3041,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
}
TShowModelResp showModelResp = client.showModel(req);
if (showModelResp.getStatus().getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- future.setException(
- new IoTDBException(showModelResp.getStatus().message,
showModelResp.getStatus().code));
+ future.setException(new IoTDBException(showModelResp.getStatus()));
return future;
}
// convert model info list and buildTsBlock
@@ -3094,7 +3092,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (tsStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
} else {
- future.setException(new IoTDBException(tsStatus.message, tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
}
return future;
}
@@ -3144,7 +3142,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
if (tsStatus.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
} else {
- future.setException(new IoTDBException(tsStatus.message, tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
}
return future;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java
index 4459f29ed6b..0350b7883e0 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/schemaengine/template/ClusterTemplateManager.java
@@ -25,6 +25,7 @@ import
org.apache.iotdb.commons.client.exception.ClientManagerException;
import org.apache.iotdb.commons.consensus.ConfigRegionId;
import org.apache.iotdb.commons.exception.IllegalPathException;
import org.apache.iotdb.commons.exception.IoTDBException;
+import org.apache.iotdb.commons.exception.IoTDBRuntimeException;
import org.apache.iotdb.commons.exception.MetadataException;
import org.apache.iotdb.commons.exception.runtime.SchemaExecutionException;
import org.apache.iotdb.commons.path.PartialPath;
@@ -171,8 +172,7 @@ public class ClusterTemplateManager implements
ITemplateManager {
templatesList.add(template);
});
} else {
- throw new RuntimeException(
- new IoTDBException(resp.getStatus().getMessage(),
resp.getStatus().getCode()));
+ throw new IoTDBRuntimeException(resp.getStatus());
}
} catch (ClientManagerException | TException e) {
throw new RuntimeException(
@@ -193,7 +193,7 @@ public class ClusterTemplateManager implements
ITemplateManager {
template.deserialize(ByteBuffer.wrap(templateBytes));
return template;
} else {
- throw new IoTDBException(resp.status.getMessage(),
resp.status.getCode());
+ throw new IoTDBException(resp.status);
}
} catch (ClientManagerException | TException e) {
throw new RuntimeException(
@@ -233,7 +233,7 @@ public class ClusterTemplateManager implements
ITemplateManager {
name,
path,
tsStatus);
- throw new IoTDBException(tsStatus.getMessage(), tsStatus.getCode());
+ throw new IoTDBException(tsStatus);
}
} catch (Exception e) {
throw new RuntimeException(e);
@@ -261,7 +261,7 @@ public class ClusterTemplateManager implements
ITemplateManager {
});
}
} else {
- throw new IoTDBException(resp.status.getMessage(),
resp.status.getCode());
+ throw new IoTDBException(resp.status);
}
} catch (Exception e) {
throw new RuntimeException(e);
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 785395af8fb..987eaaf1019 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
@@ -41,6 +41,7 @@ import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.util.Arrays;
+import java.util.Objects;
import java.util.concurrent.ExecutionException;
import static org.apache.iotdb.commons.utils.StatusUtils.needRetry;
@@ -153,7 +154,9 @@ public class ErrorHandlingUtils {
return RpcUtils.getStatus(
TSStatusCode.QUERY_NOT_ALLOWED, INFO_NOT_ALLOWED_IN_BATCH_ERROR +
rootCause.getMessage());
} else if (t instanceof IoTDBException) {
- return RpcUtils.getStatus(((IoTDBException) t).getErrorCode(),
rootCause.getMessage());
+ return Objects.nonNull(((IoTDBException) t).getStatus())
+ ? ((IoTDBException) t).getStatus()
+ : RpcUtils.getStatus(((IoTDBException) t).getErrorCode(),
rootCause.getMessage());
} else if (t instanceof TsFileRuntimeException) {
return RpcUtils.getStatus(TSStatusCode.TSFILE_PROCESSOR_ERROR,
rootCause.getMessage());
} else if (t instanceof SemanticException) {
@@ -163,7 +166,9 @@ public class ErrorHandlingUtils {
}
return RpcUtils.getStatus(TSStatusCode.SEMANTIC_ERROR,
rootCause.getMessage());
} else if (t instanceof IoTDBRuntimeException) {
- return RpcUtils.getStatus(((IoTDBRuntimeException) t).getErrorCode(),
t.getMessage());
+ return Objects.nonNull(((IoTDBRuntimeException) t).getStatus())
+ ? ((IoTDBRuntimeException) t).getStatus()
+ : 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) {
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/exception/IoTDBException.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/exception/IoTDBException.java
index 3fca9bc6210..d52ab223007 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/exception/IoTDBException.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/exception/IoTDBException.java
@@ -20,6 +20,10 @@
package org.apache.iotdb.commons.exception;
+import org.apache.iotdb.common.rpc.thrift.TSStatus;
+
+import org.apache.thrift.annotation.Nullable;
+
public class IoTDBException extends Exception {
private static final long serialVersionUID = 8480450962311247736L;
@@ -31,6 +35,8 @@ public class IoTDBException extends Exception {
*/
private final boolean isUserException;
+ private @Nullable TSStatus status;
+
public IoTDBException(String message, int errorCode) {
super(message);
this.errorCode = errorCode;
@@ -61,6 +67,13 @@ public class IoTDBException extends Exception {
this.isUserException = isUserException;
}
+ public IoTDBException(final TSStatus status) {
+ super(status.message);
+ this.errorCode = status.getCode();
+ this.status = status;
+ this.isUserException = false;
+ }
+
public boolean isUserException() {
return isUserException;
}
@@ -68,4 +81,8 @@ public class IoTDBException extends Exception {
public int getErrorCode() {
return errorCode;
}
+
+ public @Nullable TSStatus getStatus() {
+ return status;
+ }
}
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/exception/IoTDBRuntimeException.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/exception/IoTDBRuntimeException.java
index 3d58f7d606b..f28fb0cd9ec 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/exception/IoTDBRuntimeException.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/exception/IoTDBRuntimeException.java
@@ -20,6 +20,8 @@
package org.apache.iotdb.commons.exception;
+import org.apache.iotdb.common.rpc.thrift.TSStatus;
+
public class IoTDBRuntimeException extends RuntimeException {
protected int errorCode;
@@ -29,6 +31,8 @@ public class IoTDBRuntimeException extends RuntimeException {
*/
protected boolean isUserException = false;
+ private TSStatus status;
+
public IoTDBRuntimeException(String message, int errorCode) {
super(message);
this.errorCode = errorCode;
@@ -56,6 +60,13 @@ public class IoTDBRuntimeException extends RuntimeException {
this.isUserException = isUserException;
}
+ public IoTDBRuntimeException(final TSStatus status) {
+ super(status.message);
+ this.errorCode = status.getCode();
+ this.status = status;
+ this.isUserException = false;
+ }
+
public boolean isUserException() {
return isUserException;
}
@@ -63,4 +74,8 @@ public class IoTDBRuntimeException extends RuntimeException {
public int getErrorCode() {
return errorCode;
}
+
+ public TSStatus getStatus() {
+ return status;
+ }
}