This is an automated email from the ASF dual-hosted git repository.
jiangtian 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 490aab1341b Fixed the NPE caused by multiple errors (#16091)
490aab1341b is described below
commit 490aab1341b520e4b1931b0de9a4af9540df7a6f
Author: Caideyipi <[email protected]>
AuthorDate: Tue Aug 5 18:27:18 2025 +0800
Fixed the NPE caused by multiple errors (#16091)
* partial
* fix
* partial
* add-failure-hanlder
---
.../procedure/impl/cq/CreateCQProcedure.java | 4 +-
.../procedure/impl/schema/SetTTLProcedure.java | 2 +-
.../impl/schema/SetTemplateProcedure.java | 12 +--
.../impl/schema/UnsetTemplateProcedure.java | 4 +-
.../impl/schema/table/AddTableColumnProcedure.java | 7 +-
.../impl/schema/table/CreateTableProcedure.java | 6 +-
.../schema/table/DropTableColumnProcedure.java | 4 +-
.../impl/schema/table/DropTableProcedure.java | 4 +-
.../schema/table/RenameTableColumnProcedure.java | 7 +-
.../impl/schema/table/RenameTableProcedure.java | 7 +-
.../schema/table/SetTablePropertiesProcedure.java | 7 +-
.../schema/table/view/AddViewColumnProcedure.java | 3 +-
.../table/view/CreateTableViewProcedure.java | 6 +-
.../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 | 2 +-
.../plan/execution/config/ConfigExecution.java | 54 +++++++---
.../plan/execution/config/ConfigTaskResult.java | 11 ++
.../config/executor/ClusterConfigTaskExecutor.java | 114 ++++++++++-----------
.../template/ClusterTemplateManager.java | 10 +-
.../apache/iotdb/db/utils/ErrorHandlingUtils.java | 12 ++-
.../iotdb/commons/exception/IoTDBException.java | 15 +++
.../commons/exception/IoTDBRuntimeException.java | 15 +++
26 files changed, 193 insertions(+), 131 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 46c09e9f36f..a5463439f66 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
@@ -168,9 +168,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())));
}
}
@@ -193,7 +191,7 @@ public class SetTemplateProcedure
templateName,
templateSetPath,
status.getMessage());
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -368,7 +366,7 @@ public class SetTemplateProcedure
templateName,
templateSetPath,
status.getMessage());
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -470,7 +468,7 @@ public class SetTemplateProcedure
templateName,
templateSetPath,
status.getMessage());
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -529,7 +527,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 fd8eb399406..464c6b7c21b 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/schema/table/AddTableColumnProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/AddTableColumnProcedure.java
index bdb5331e01e..d5b99942721 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/AddTableColumnProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/AddTableColumnProcedure.java
@@ -110,8 +110,7 @@ public class AddTableColumnProcedure
database, tableName, addedColumnList, this instanceof
AddViewColumnProcedure);
final TSStatus status = result.getLeft();
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- setFailure(
- new ProcedureException(new IoTDBException(status.getMessage(),
status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
return;
}
table = result.getRight();
@@ -137,7 +136,7 @@ public class AddTableColumnProcedure
: new AddTableColumnPlan(database, tableName,
addedColumnList, false),
isGeneratedByPipe);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
} else {
setNextState(AddTableColumnState.COMMIT_RELEASE);
}
@@ -186,7 +185,7 @@ public class AddTableColumnProcedure
: new AddTableColumnPlan(database, tableName,
addedColumnList, true),
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/schema/table/CreateTableProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/CreateTableProcedure.java
index 7890256675b..d0fbdb605d1 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/CreateTableProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/CreateTableProcedure.java
@@ -142,7 +142,7 @@ public class CreateTableProcedure
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
setNextState(CreateTableState.PRE_RELEASE);
} else {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -175,7 +175,7 @@ public class CreateTableProcedure
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
setNextState(CreateTableState.COMMIT_RELEASE);
} else {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -225,7 +225,7 @@ public class CreateTableProcedure
new RollbackCreateTablePlan(database, table.getTableName()), env,
LOGGER);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
LOGGER.warn("Failed to rollback table creation {}.{}", database,
table.getTableName());
- 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/table/DropTableColumnProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DropTableColumnProcedure.java
index 02bd1679b52..65b591f0322 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DropTableColumnProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DropTableColumnProcedure.java
@@ -142,7 +142,7 @@ public class DropTableColumnProcedure
isAttributeColumn = status.isSetMessage();
setNextState(DropTableColumnState.INVALIDATE_CACHE);
} else {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -216,7 +216,7 @@ public class DropTableColumnProcedure
: new CommitDeleteColumnPlan(database, tableName,
columnName),
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/schema/table/DropTableProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DropTableProcedure.java
index 1d9dbef13e2..1f02014e994 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DropTableProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/DropTableProcedure.java
@@ -125,7 +125,7 @@ public class DropTableProcedure extends
AbstractAlterOrDropTableProcedure<DropTa
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
setNextState(DropTableState.INVALIDATE_CACHE);
} else {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -201,7 +201,7 @@ public class DropTableProcedure extends
AbstractAlterOrDropTableProcedure<DropTa
: new CommitDeleteTablePlan(database, tableName),
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/schema/table/RenameTableColumnProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/RenameTableColumnProcedure.java
index 8303a4481f7..da51dad2672 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/RenameTableColumnProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/RenameTableColumnProcedure.java
@@ -113,8 +113,7 @@ public class RenameTableColumnProcedure
database, tableName, oldName, newName, this instanceof
RenameViewColumnProcedure);
final TSStatus status = result.getLeft();
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- setFailure(
- new ProcedureException(new IoTDBException(status.getMessage(),
status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
return;
}
table = result.getRight();
@@ -140,7 +139,7 @@ public class RenameTableColumnProcedure
: new RenameTableColumnPlan(database, tableName, oldName,
newName),
isGeneratedByPipe);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
} else {
setNextState(RenameTableColumnState.COMMIT_RELEASE);
}
@@ -184,7 +183,7 @@ public class RenameTableColumnProcedure
new RenameTableColumnPlan(database, tableName, newName,
oldName),
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/schema/table/RenameTableProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/RenameTableProcedure.java
index 1e5dc24781c..93d1035a761 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/RenameTableProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/RenameTableProcedure.java
@@ -106,8 +106,7 @@ public class RenameTableProcedure extends
AbstractAlterOrDropTableProcedure<Rena
database, tableName, newName, this instanceof
RenameViewProcedure);
final TSStatus status = result.getLeft();
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- setFailure(
- new ProcedureException(new IoTDBException(status.getMessage(),
status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
return;
}
table = result.getRight();
@@ -133,7 +132,7 @@ public class RenameTableProcedure extends
AbstractAlterOrDropTableProcedure<Rena
: new RenameTablePlan(database, tableName, newName),
isGeneratedByPipe);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
} else {
setNextState(RenameTableState.COMMIT_RELEASE);
}
@@ -175,7 +174,7 @@ public class RenameTableProcedure extends
AbstractAlterOrDropTableProcedure<Rena
: new RenameTablePlan(database, newName, tableName),
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/schema/table/SetTablePropertiesProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTablePropertiesProcedure.java
index 6c0673068eb..eedbf7fdb3d 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTablePropertiesProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/SetTablePropertiesProcedure.java
@@ -130,8 +130,7 @@ public class SetTablePropertiesProcedure
this instanceof SetViewPropertiesProcedure);
final TSStatus status = result.getLeft();
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- setFailure(
- new ProcedureException(new IoTDBException(status.getMessage(),
status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
return;
}
table = result.getRight();
@@ -157,7 +156,7 @@ public class SetTablePropertiesProcedure
: new SetTablePropertiesPlan(database, tableName,
updatedProperties),
isGeneratedByPipe);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
} else {
setNextState(COMMIT_RELEASE);
}
@@ -207,7 +206,7 @@ public class SetTablePropertiesProcedure
new SetTablePropertiesPlan(database, tableName,
originalProperties),
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/schema/table/view/AddViewColumnProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/view/AddViewColumnProcedure.java
index 5418822aafb..27a0618ab6a 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/view/AddViewColumnProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/view/AddViewColumnProcedure.java
@@ -76,8 +76,7 @@ public class AddViewColumnProcedure extends
AddTableColumnProcedure {
new TreeDeviceViewFieldDetector(env.getConfigManager(), table,
fields2Detect)
.detectMissingFieldTypes();
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/schema/table/view/CreateTableViewProcedure.java
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/view/CreateTableViewProcedure.java
index c8b3b02d3cb..b7fb458c8bb 100644
---
a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/view/CreateTableViewProcedure.java
+++
b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/procedure/impl/schema/table/view/CreateTableViewProcedure.java
@@ -111,7 +111,7 @@ public class CreateTableViewProcedure extends
CreateTableProcedure {
new TreeDeviceViewFieldDetector(env.getConfigManager(), table, null)
.detectMissingFieldTypes();
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -123,7 +123,7 @@ public class CreateTableViewProcedure extends
CreateTableProcedure {
if (status.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
setNextState(CreateTableState.PRE_RELEASE);
} else {
- setFailure(new ProcedureException(new
IoTDBException(status.getMessage(), status.getCode())));
+ setFailure(new ProcedureException(new IoTDBException(status)));
}
}
@@ -138,7 +138,7 @@ public class CreateTableViewProcedure extends
CreateTableProcedure {
new PreCreateTableViewPlan(database, oldView, oldStatus), env,
LOGGER);
if (status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
LOGGER.warn("Failed to rollback table creation {}.{}", database,
table.getTableName());
- 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 9d4fb61f85d..4b2fea1aac8 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 48c70658fa7..4dbad54d51c 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
@@ -378,7 +378,7 @@ public class ClusterAuthorityFetcher implements
IAuthorityFetcher {
: configNodeClient.operatePermission(
statementToAuthorizerReq((AuthorStatement) plan));
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
} else {
onOperatePermissionSuccess(plan);
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
@@ -437,8 +437,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()));
}
return future;
}
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 5202a9103d7..5d8a710ba3e 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
@@ -315,8 +315,7 @@ public class PartitionCache {
userName, PrivilegeType.MANAGE_DATABASE),
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 80b17a2a45c..dd3c925786a 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
@@ -549,7 +549,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));
}
}
@@ -581,7 +581,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));
}
}
@@ -660,7 +660,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 dbb99dbde90..2c1657e839e 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
@@ -464,7 +464,7 @@ public class QueryExecution implements IQueryExecution {
stateMachine.transitionToFailed(t);
TSStatus status = stateMachine.getFailureStatus();
if (status != null) {
- throw new IoTDBException(status.getMessage(), status.code);
+ throw new IoTDBException(status);
} else {
Throwable rootCause = stateMachine.getFailureException();
if (rootCause != null) {
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 6af502dd50a..1ae57fe38d5 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
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.queryengine.plan.execution.config;
+import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.exception.IoTDBException;
import org.apache.iotdb.commons.exception.IoTDBRuntimeException;
import org.apache.iotdb.commons.utils.TestOnly;
@@ -161,12 +162,22 @@ public class ConfigExecution implements IQueryExecution {
private void fail(final Throwable cause) {
int errorCode = TSStatusCode.INTERNAL_SERVER_ERROR.getStatusCode();
+ TSStatus status = null;
if (cause instanceof IoTDBException) {
- errorCode = ((IoTDBException) cause).getErrorCode();
+ if (Objects.nonNull(((IoTDBException) cause).getStatus())) {
+ status = ((IoTDBException) cause).getStatus();
+ } else {
+ errorCode = ((IoTDBException) cause).getErrorCode();
+ }
} else if (cause instanceof IoTDBRuntimeException) {
- errorCode = ((IoTDBRuntimeException) cause).getErrorCode();
+ if (Objects.nonNull(((IoTDBRuntimeException) cause).getStatus())) {
+ status = ((IoTDBRuntimeException) cause).getStatus();
+ } else {
+ errorCode = ((IoTDBRuntimeException) cause).getErrorCode();
+ }
}
- if (!userExceptionCodes.contains(errorCode)) {
+ if (Objects.nonNull(status) && isUserException(status)
+ || !userExceptionCodes.contains(errorCode)) {
LOGGER.warn(
"Failures happened during running ConfigExecution when executing
{}.",
Objects.nonNull(task) ? task.getClass().getSimpleName() : null,
@@ -179,15 +190,31 @@ public class ConfigExecution implements IQueryExecution {
errorCode);
}
stateMachine.transitionToFailed(cause);
- final ConfigTaskResult result =
- cause instanceof StatementExecutionException
- ? new ConfigTaskResult(
- TSStatusCode.representOf(((StatementExecutionException)
cause).getStatusCode()))
- : new ConfigTaskResult(TSStatusCode.representOf(errorCode));
+ final ConfigTaskResult result;
+ if (Objects.nonNull(status)) {
+ result = new ConfigTaskResult(status);
+ } else {
+ result =
+ cause instanceof StatementExecutionException
+ ? new ConfigTaskResult(
+ TSStatusCode.representOf(((StatementExecutionException)
cause).getStatusCode()))
+ : new ConfigTaskResult(TSStatusCode.representOf(errorCode));
+ }
taskFuture.set(result);
}
+ private boolean isUserException(final TSStatus status) {
+ if (status.getCode() == TSStatusCode.MULTIPLE_ERROR.getStatusCode()) {
+ return status.getSubStatus().stream()
+ .allMatch(
+ s ->
+ s.getCode() == TSStatusCode.SUCCESS_STATUS.getStatusCode()
+ || userExceptionCodes.contains(s.getCode()));
+ }
+ return userExceptionCodes.contains(status.getCode());
+ }
+
@Override
public void stop(Throwable t) {
// do nothing
@@ -211,14 +238,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 b96dea27a66..d5dc521292e 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
@@ -430,7 +430,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 {
@@ -462,7 +462,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));
}
@@ -535,7 +535,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));
@@ -689,7 +689,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));
}
@@ -716,7 +716,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));
}
@@ -871,7 +871,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));
}
@@ -889,7 +889,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));
}
@@ -1055,7 +1055,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));
}
@@ -1082,7 +1082,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));
}
@@ -1133,7 +1133,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));
}
@@ -1166,7 +1166,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;
}
@@ -1195,7 +1195,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;
}
@@ -1221,7 +1221,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;
}
@@ -1241,7 +1241,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;
}
}
@@ -1264,7 +1264,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;
}
@@ -1317,7 +1317,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;
}
@@ -1345,7 +1345,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;
}
@@ -1437,7 +1437,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.CONFIG_REGION_ID)) {
final TSStatus executionStatus = client.killQuery(queryId, dataNodeId);
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() !=
executionStatus.getCode()) {
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1680,7 +1680,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.CONFIG_REGION_ID)) {
resp = client.showAINodes();
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 (final ClientManagerException | TException e) {
@@ -1701,7 +1701,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
ClusterTemplateManager.getInstance().createSchemaTemplate(createSchemaTemplateStatement);
// Get response or throw exception
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1810,7 +1810,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
} while (TSStatusCode.OVERLAP_WITH_EXISTING_TASK.getStatusCode() ==
tsStatus.getCode());
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1831,7 +1831,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
configNodeClient.dropSchemaTemplate(dropSchemaTemplateStatement.getTemplateName());
// Get response or throw exception
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));
}
@@ -1902,7 +1902,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
} while (TSStatusCode.OVERLAP_WITH_EXISTING_TASK.getStatusCode() ==
tsStatus.getCode());
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -1953,7 +1953,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
} while (TSStatusCode.OVERLAP_WITH_EXISTING_TASK.getStatusCode() ==
tsStatus.getCode());
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2018,7 +2018,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
.setConnectorAttributes(createPipeStatement.getConnectorAttributes());
final TSStatus tsStatus = configNodeClient.createPipe(req);
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));
}
@@ -2190,7 +2190,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
req.setIsTableModel(alterPipeStatement.isTableModel());
final TSStatus tsStatus = configNodeClient.alterPipe(req);
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));
}
@@ -2297,7 +2297,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
.setPipeName(startPipeStatement.getPipeName())
.setIsTableModel(startPipeStatement.isTableModel()));
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));
}
@@ -2331,7 +2331,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
.setIfExistsCondition(dropPipeStatement.hasIfExistsCondition())
.setIsTableModel(dropPipeStatement.isTableModel()));
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));
}
@@ -2365,7 +2365,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
.setPipeName(stopPipeStatement.getPipeName())
.setIsTableModel(stopPipeStatement.isTableModel()));
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));
}
@@ -2453,7 +2453,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
.setIfExistsCondition(dropSubscriptionStatement.hasIfExistsCondition())
.setIsTableModel(dropSubscriptionStatement.isTableModel()));
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));
}
@@ -2524,7 +2524,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
.setTopicAttributes(topicAttributes);
final TSStatus tsStatus = configNodeClient.createTopic(req);
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));
}
@@ -2550,7 +2550,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
.setTopicName(dropTopicStatement.getTopicName())
.setIsTableModel(dropTopicStatement.isTableModel()));
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));
}
@@ -2626,7 +2626,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));
@@ -2664,7 +2664,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
} while (TSStatusCode.OVERLAP_WITH_EXISTING_TASK.getStatusCode() ==
tsStatus.getCode());
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2749,7 +2749,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
} while (TSStatusCode.OVERLAP_WITH_EXISTING_TASK.getStatusCode() ==
tsStatus.getCode());
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != tsStatus.getCode()) {
- future.setException(new IoTDBException(tsStatus.getMessage(),
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -2825,7 +2825,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));
@@ -2911,7 +2911,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 (final Exception e) {
@@ -2934,7 +2934,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 (final Exception e) {
@@ -2969,7 +2969,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 (final Exception e) {
@@ -3004,7 +3004,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 (final Exception e) {
@@ -3027,7 +3027,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
migrateRegionTask.getModel());
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));
@@ -3195,7 +3195,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
reconstructRegionTask.getModel());
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));
@@ -3218,7 +3218,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
extendRegionTask.getModel());
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));
@@ -3241,7 +3241,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
removeRegionTask.getModel());
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));
@@ -3279,7 +3279,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
context.getSession() == null ? null :
context.getSession().getUserName());
final TSStatus executionStatus = client.createCQ(tCreateCQReq);
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() !=
executionStatus.getCode()) {
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -3296,7 +3296,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.CONFIG_REGION_ID)) {
final TSStatus executionStatus = client.dropCQ(new TDropCQReq(cqId));
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() !=
executionStatus.getCode()) {
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -3313,8 +3313,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
@@ -3334,7 +3333,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
final TCreateModelReq req = new TCreateModelReq(modelId, uri);
final TSStatus status = client.createModel(req);
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() != status.getCode()) {
- future.setException(new IoTDBException(status.message, status.code));
+ future.setException(new IoTDBException(status));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -3351,7 +3350,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
CONFIG_NODE_CLIENT_MANAGER.borrowClient(ConfigNodeInfo.CONFIG_REGION_ID)) {
final TSStatus executionStatus = client.dropModel(new
TDropModelReq(modelId));
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() !=
executionStatus.getCode()) {
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -3372,8 +3371,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
}
final 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
@@ -3411,7 +3409,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
req.setTimeRanges(timeRanges);
final TSStatus executionStatus = client.createTraining(req);
if (TSStatusCode.SUCCESS_STATUS.getStatusCode() !=
executionStatus.getCode()) {
- future.setException(new IoTDBException(executionStatus.message,
executionStatus.code));
+ future.setException(new IoTDBException(executionStatus));
} else {
future.set(new ConfigTaskResult(TSStatusCode.SUCCESS_STATUS));
}
@@ -3443,7 +3441,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;
}
@@ -3493,7 +3491,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;
}
@@ -3666,7 +3664,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
"Failed to execute delete database {} in config node, status is
{}.",
dropDB.getDbName().getValue(),
tsStatus);
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.getCode()));
+ future.setException(new IoTDBException(tsStatus));
}
} catch (final ClientManagerException | TException e) {
future.setException(e);
@@ -3705,7 +3703,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
TSStatusCode.DATABASE_ALREADY_EXISTS.getStatusCode()));
}
} else {
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
}
} catch (final ClientManagerException | TException e) {
future.setException(e);
@@ -3738,7 +3736,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
unsetDatabaseIfNotExist(
databaseSchema.getName(),
SessionManager.getInstance().getCurrSession());
} else {
- future.setException(new IoTDBException(tsStatus.message,
tsStatus.code));
+ future.setException(new IoTDBException(tsStatus));
}
} catch (final ClientManagerException | TException e) {
future.setException(e);
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 18229858ceb..7a5eb3b2a61 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 e035a4f52bb..f8c709e5773 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
@@ -26,7 +26,6 @@ import
org.apache.iotdb.commons.exception.QuerySchemaFetchFailedException;
import org.apache.iotdb.db.exception.BatchProcessException;
import org.apache.iotdb.db.exception.QueryInBatchStatementException;
import org.apache.iotdb.db.exception.StorageGroupNotReadyException;
-import org.apache.iotdb.db.exception.ainode.ModelException;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.exception.query.QueryTimeoutRuntimeException;
import org.apache.iotdb.db.exception.sql.SemanticException;
@@ -43,6 +42,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;
@@ -166,7 +166,9 @@ public class ErrorHandlingUtils {
|| t instanceof QuerySchemaFetchFailedException) {
return RpcUtils.getStatus(TSStatusCode.PLAN_FAILED_NETWORK_PARTITION,
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) {
@@ -176,9 +178,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());
- } else if (t instanceof ModelException) {
- return RpcUtils.getStatus(((ModelException) t).getStatusCode(),
rootCause.getMessage());
+ return Objects.nonNull(((IoTDBRuntimeException) t).getStatus())
+ ? ((IoTDBRuntimeException) t).getStatus()
+ : RpcUtils.getStatus(((IoTDBRuntimeException) t).getErrorCode(),
t.getMessage());
}
if (t instanceof RuntimeException && rootCause instanceof IoTDBException) {
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..8227f3ea8ee 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,8 @@
package org.apache.iotdb.commons.exception;
+import org.apache.iotdb.common.rpc.thrift.TSStatus;
+
public class IoTDBException extends Exception {
private static final long serialVersionUID = 8480450962311247736L;
@@ -31,6 +33,8 @@ public class IoTDBException extends Exception {
*/
private final boolean isUserException;
+ private TSStatus status;
+
public IoTDBException(String message, int errorCode) {
super(message);
this.errorCode = errorCode;
@@ -61,6 +65,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 +79,8 @@ public class IoTDBException extends Exception {
public int getErrorCode() {
return errorCode;
}
+
+ public 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 160ae8b6d82..68950c3fc81 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;
@@ -63,6 +67,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;
}
@@ -70,4 +81,8 @@ public class IoTDBRuntimeException extends RuntimeException {
public int getErrorCode() {
return errorCode;
}
+
+ public TSStatus getStatus() {
+ return status;
+ }
}