This is an automated email from the ASF dual-hosted git repository.
justinchen 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 91c51321f3b [To dev/1.3] Load: Optimized the exception error message
of convertion to tablet (#16499)
91c51321f3b is described below
commit 91c51321f3b23834b7757665cdcae4951e0989cb
Author: Caideyipi <[email protected]>
AuthorDate: Mon Sep 29 17:19:49 2025 +0800
[To dev/1.3] Load: Optimized the exception error message of convertion to
tablet (#16499)
---
.../plan/analyze/load/LoadTsFileAnalyzer.java | 2 +-
.../analyze/load/LoadTsFileTableSchemaCache.java | 72 +++++++++++-----------
.../plan/relational/metadata/TableSchema.java | 12 ++--
.../fetcher/TableHeaderSchemaValidator.java | 4 +-
.../relational/sql/ast/WrappedInsertStatement.java | 2 +-
...rtedInsertTabletStatementExceptionVisitor.java} | 18 +++---
...leStatementDataTypeConvertExecutionVisitor.java | 23 ++++---
...rtedInsertTabletStatementExceptionVisitor.java} | 2 +-
...eeStatementDataTypeConvertExecutionVisitor.java | 19 +++---
.../converter/LoadTsFileDataTypeConverter.java | 8 ++-
10 files changed, 87 insertions(+), 75 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileAnalyzer.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileAnalyzer.java
index 56ca5b3011a..4cc3753d26d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileAnalyzer.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileAnalyzer.java
@@ -563,7 +563,7 @@ public class LoadTsFileAnalyzer implements AutoCloseable {
}
getOrCreateTableSchemaCache().flush();
- getOrCreateTableSchemaCache().clearIdColumnMapper();
+ getOrCreateTableSchemaCache().clearTagColumnMapper();
TimestampPrecisionUtils.checkTimestampPrecision(tsFileResource.getFileEndTime());
tsFileResource.setStatus(TsFileResourceStatus.NORMAL);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileTableSchemaCache.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileTableSchemaCache.java
index 833b27a852e..abf0b0afe5b 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileTableSchemaCache.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/load/LoadTsFileTableSchemaCache.java
@@ -100,13 +100,13 @@ public class LoadTsFileTableSchemaCache {
private Map<String, Set<IDeviceID>> currentBatchTable2Devices;
// tableName -> Pair<device column count, device column mapping>
- private Map<String, Pair<Integer, Map<Integer, Integer>>>
tableIdColumnMapper = new HashMap<>();
+ private Map<String, Pair<Integer, Map<Integer, Integer>>>
tableTagColumnMapper = new HashMap<>();
private PatternTreeMap<ModEntry, PatternTreeMapFactory.ModsSerializer>
currentModifications;
private ITimeIndex currentTimeIndex;
private long batchTable2DevicesMemoryUsageSizeInBytes = 0;
- private long tableIdColumnMapperMemoryUsageSizeInBytes = 0;
+ private long tableTagColumnMapperMemoryUsageSizeInBytes = 0;
private long currentModificationsMemoryUsageSizeInBytes = 0;
private long currentTimeIndexMemoryUsageSizeInBytes = 0;
@@ -217,22 +217,22 @@ public class LoadTsFileTableSchemaCache {
@Override
public List<Object[]> getDeviceIdList() {
final List<Object[]> devices = new ArrayList<>();
- final Pair<Integer, Map<Integer, Integer>> idColumnCountAndMapper =
- tableIdColumnMapper.get(tableName);
- if (Objects.isNull(idColumnCountAndMapper)) {
+ final Pair<Integer, Map<Integer, Integer>> tagColumnCountAndMapper =
+ tableTagColumnMapper.get(tableName);
+ if (Objects.isNull(tagColumnCountAndMapper)) {
// This should not happen
- LOGGER.warn("Failed to find id column mapping for table {}",
tableName);
+ LOGGER.warn("Failed to find tag column mapping for table {}",
tableName);
}
for (final IDeviceID device :
currentBatchTable2Devices.get(tableName)) {
- if (Objects.isNull(idColumnCountAndMapper)) {
+ if (Objects.isNull(tagColumnCountAndMapper)) {
devices.add(Arrays.copyOfRange(device.getSegments(), 1,
device.getSegments().length));
continue;
}
- final Object[] deviceIdArray = new
String[idColumnCountAndMapper.getLeft()];
+ final Object[] deviceIdArray = new
String[tagColumnCountAndMapper.getLeft()];
for (final Map.Entry<Integer, Integer> fileColumn2RealColumn :
- idColumnCountAndMapper.getRight().entrySet()) {
+ tagColumnCountAndMapper.getRight().entrySet()) {
final int fileColumnIndex = fileColumn2RealColumn.getKey();
final int realColumnIndex = fileColumn2RealColumn.getValue();
deviceIdArray[realColumnIndex] =
@@ -294,7 +294,7 @@ public class LoadTsFileTableSchemaCache {
"Failed to validate schema for table {%s, %s}",
fileSchema.getTableName(), fileSchema));
}
- verifyTableDataTypeAndGenerateIdColumnMapper(fileSchema, realSchema);
+ verifyTableDataTypeAndGenerateTagColumnMapper(fileSchema, realSchema);
}
private void autoCreateTableDatabaseIfAbsent(final String database) throws
LoadAnalyzeException {
@@ -329,18 +329,18 @@ public class LoadTsFileTableSchemaCache {
}
}
- private void verifyTableDataTypeAndGenerateIdColumnMapper(
+ private void verifyTableDataTypeAndGenerateTagColumnMapper(
TableSchema fileSchema, TableSchema realSchema) throws
LoadAnalyzeException {
- final int realIdColumnCount = realSchema.getIdColumns().size();
- final Map<Integer, Integer> idColumnMapping =
- tableIdColumnMapper
+ final int realTagColumnCount = realSchema.getTagColumns().size();
+ final Map<Integer, Integer> tagColumnMapping =
+ tableTagColumnMapper
.computeIfAbsent(
- realSchema.getTableName(), k -> new Pair<>(realIdColumnCount,
new HashMap<>()))
+ realSchema.getTableName(), k -> new Pair<>(realTagColumnCount,
new HashMap<>()))
.getRight();
- Map<String, Integer> idColumnNameToIndex = new HashMap<>();
- for (int i = 0; i < realSchema.getIdColumns().size(); i++) {
- idColumnNameToIndex.put(realSchema.getIdColumns().get(i).getName(), i);
+ Map<String, Integer> tagColumnNameToIndex = new HashMap<>();
+ for (int i = 0; i < realSchema.getTagColumns().size(); i++) {
+ tagColumnNameToIndex.put(realSchema.getTagColumns().get(i).getName(), i);
}
Map<String, ColumnSchema> fieldColumnNameToSchema = new HashMap<>();
for (ColumnSchema column : realSchema.getColumns()) {
@@ -349,16 +349,16 @@ public class LoadTsFileTableSchemaCache {
}
}
- int idColumnIndex = 0;
+ int tagColumnIndex = 0;
for (ColumnSchema fileColumn : fileSchema.getColumns()) {
if (fileColumn.getColumnCategory() == TsTableColumnCategory.TAG) {
- Integer realIndex = idColumnNameToIndex.get(fileColumn.getName());
+ Integer realIndex = tagColumnNameToIndex.get(fileColumn.getName());
if (realIndex != null) {
- idColumnMapping.put(idColumnIndex++, realIndex);
+ tagColumnMapping.put(tagColumnIndex++, realIndex);
} else {
throw new LoadAnalyzeException(
String.format(
- "Id column %s in TsFile is not found in IoTDB table %s",
+ "Tag column %s in TsFile is not found in IoTDB table %s",
fileColumn.getName(), realSchema.getTableName()));
}
} else if (fileColumn.getColumnCategory() ==
TsTableColumnCategory.FIELD) {
@@ -374,19 +374,19 @@ public class LoadTsFileTableSchemaCache {
}
}
}
- updateTableIdColumnMapperMemoryUsageSizeInBytes();
+ updateTableTagColumnMapperMemoryUsageSizeInBytes();
}
- private void updateTableIdColumnMapperMemoryUsageSizeInBytes() {
- block.reduceMemoryUsage(tableIdColumnMapperMemoryUsageSizeInBytes);
- tableIdColumnMapperMemoryUsageSizeInBytes = 0;
+ private void updateTableTagColumnMapperMemoryUsageSizeInBytes() {
+ block.reduceMemoryUsage(tableTagColumnMapperMemoryUsageSizeInBytes);
+ tableTagColumnMapperMemoryUsageSizeInBytes = 0;
for (final Map.Entry<String, Pair<Integer, Map<Integer, Integer>>> entry :
- tableIdColumnMapper.entrySet()) {
- tableIdColumnMapperMemoryUsageSizeInBytes +=
computeStringMemUsage(entry.getKey());
- tableIdColumnMapperMemoryUsageSizeInBytes +=
+ tableTagColumnMapper.entrySet()) {
+ tableTagColumnMapperMemoryUsageSizeInBytes +=
computeStringMemUsage(entry.getKey());
+ tableTagColumnMapperMemoryUsageSizeInBytes +=
(4L + 4L * 2 * entry.getValue().getRight().size());
}
- block.addMemoryUsage(tableIdColumnMapperMemoryUsageSizeInBytes);
+ block.addMemoryUsage(tableTagColumnMapperMemoryUsageSizeInBytes);
}
public void setCurrentModificationsAndTimeIndex(
@@ -431,13 +431,13 @@ public class LoadTsFileTableSchemaCache {
public void close() {
clearDevices();
- clearIdColumnMapper();
+ clearTagColumnMapper();
clearModificationsAndTimeIndex();
block.close();
currentBatchTable2Devices = null;
- tableIdColumnMapper = null;
+ tableTagColumnMapper = null;
}
private void clearDevices() {
@@ -456,9 +456,9 @@ public class LoadTsFileTableSchemaCache {
currentTimeIndexMemoryUsageSizeInBytes = 0;
}
- public void clearIdColumnMapper() {
- tableIdColumnMapper.clear();
- block.reduceMemoryUsage(tableIdColumnMapperMemoryUsageSizeInBytes);
- tableIdColumnMapperMemoryUsageSizeInBytes = 0;
+ public void clearTagColumnMapper() {
+ tableTagColumnMapper.clear();
+ block.reduceMemoryUsage(tableTagColumnMapperMemoryUsageSizeInBytes);
+ tableTagColumnMapperMemoryUsageSizeInBytes = 0;
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableSchema.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableSchema.java
index 6cfe46ce873..23bed99415d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableSchema.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/TableSchema.java
@@ -97,13 +97,13 @@ public class TableSchema {
}
/**
- * Given the name of an ID column, return the index of this column among all
ID columns, return -1
- * if not found.
+ * Given the name of an TAG column, return the index of this column among
all TAG columns, return
+ * -1 if not found.
*/
- public int getIndexAmongIdColumns(final String idColumnName) {
+ public int getIndexAmongTagColumns(final String tagColumnName) {
int index = 0;
- for (final ColumnSchema column : getIdColumns()) {
- if (column.getName().equals(idColumnName)) {
+ for (final ColumnSchema column : getTagColumns()) {
+ if (column.getName().equals(tagColumnName)) {
return index;
}
index++;
@@ -222,7 +222,7 @@ public class TableSchema {
return "TableSchema{" + "tableName='" + tableName + '\'' + ", columns=" +
columns + '}';
}
- public List<ColumnSchema> getIdColumns() {
+ public List<ColumnSchema> getTagColumns() {
return columns.stream()
.filter(c -> c.getColumnCategory() == TsTableColumnCategory.TAG)
.collect(Collectors.toList());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
index 4f35390c98f..29ff418d4b5 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableHeaderSchemaValidator.java
@@ -135,13 +135,13 @@ public class TableHeaderSchemaValidator {
// id columns are the prefix of the incoming id columns, or vice versa
if (isStrictTagColumn) {
final List<TsTableColumnSchema> realTagColumns =
table.getTagColumnSchemaList();
- final List<ColumnSchema> incomingTagColumns =
tableSchema.getIdColumns();
+ final List<ColumnSchema> incomingTagColumns =
tableSchema.getTagColumns();
if (realTagColumns.size() <= incomingTagColumns.size()) {
// When incoming table has more ID columns, the existing id columns
// should be the prefix of the incoming id columns (or equal)
for (int indexReal = 0; indexReal < realTagColumns.size();
indexReal++) {
final String tagName =
realTagColumns.get(indexReal).getColumnName();
- final int indexIncoming =
tableSchema.getIndexAmongIdColumns(tagName);
+ final int indexIncoming =
tableSchema.getIndexAmongTagColumns(tagName);
if (indexIncoming != indexReal) {
throw new LoadAnalyzeTableColumnDisorderException(
String.format(
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
index e0bd9cc3243..ea7125a7a0a 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/sql/ast/WrappedInsertStatement.java
@@ -133,7 +133,7 @@ public abstract class WrappedInsertStatement extends
WrappedStatement
validateTableSchema(incomingSchemaColumn, realSchemaColumn, i,
innerTreeStatement);
}
// incoming schema should contain all id columns in real schema and have
consistent order
- final List<ColumnSchema> realIdColumns = realSchema.getIdColumns();
+ final List<ColumnSchema> realIdColumns = realSchema.getTagColumns();
adjustIdColumns(realIdColumns, innerTreeStatement);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadConvertedInsertTabletStatementExceptionVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTableConvertedInsertTabletStatementExceptionVisitor.java
similarity index 76%
copy from
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadConvertedInsertTabletStatementExceptionVisitor.java
copy to
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTableConvertedInsertTabletStatementExceptionVisitor.java
index 9b1af3dfdeb..495f6ef2662 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadConvertedInsertTabletStatementExceptionVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTableConvertedInsertTabletStatementExceptionVisitor.java
@@ -23,16 +23,15 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus;
import org.apache.iotdb.commons.exception.auth.AccessDeniedException;
import org.apache.iotdb.db.exception.load.LoadRuntimeOutOfMemoryException;
import org.apache.iotdb.db.exception.sql.SemanticException;
-import org.apache.iotdb.db.queryengine.plan.statement.StatementNode;
-import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
-import org.apache.iotdb.db.queryengine.plan.statement.crud.LoadTsFileStatement;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.AstVisitor;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.LoadTsFile;
+import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Node;
import org.apache.iotdb.rpc.TSStatusCode;
-public class LoadConvertedInsertTabletStatementExceptionVisitor
- extends StatementVisitor<TSStatus, Exception> {
-
+public class LoadTableConvertedInsertTabletStatementExceptionVisitor
+ extends AstVisitor<TSStatus, Exception> {
@Override
- public TSStatus visitNode(final StatementNode node, final Exception context)
{
+ public TSStatus visitNode(final Node node, final Exception context) {
if (context instanceof AccessDeniedException) {
return new TSStatus(TSStatusCode.NO_PERMISSION.getStatusCode())
.setMessage(context.getMessage());
@@ -42,8 +41,7 @@ public class
LoadConvertedInsertTabletStatementExceptionVisitor
}
@Override
- public TSStatus visitLoadFile(
- final LoadTsFileStatement loadTsFileStatement, final Exception context) {
+ public TSStatus visitLoadTsFile(final LoadTsFile loadTsFile, final Exception
context) {
if (context instanceof LoadRuntimeOutOfMemoryException) {
return new
TSStatus(TSStatusCode.LOAD_TEMPORARY_UNAVAILABLE_EXCEPTION.getStatusCode())
.setMessage(context.getMessage());
@@ -51,6 +49,6 @@ public class
LoadConvertedInsertTabletStatementExceptionVisitor
return new
TSStatus(TSStatusCode.LOAD_USER_CONFLICT_EXCEPTION.getStatusCode())
.setMessage(context.getMessage());
}
- return visitStatement(loadTsFileStatement, context);
+ return visitStatement(loadTsFile, context);
}
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTableStatementDataTypeConvertExecutionVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTableStatementDataTypeConvertExecutionVisitor.java
index 667a2faf0de..20711544894 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTableStatementDataTypeConvertExecutionVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTableStatementDataTypeConvertExecutionVisitor.java
@@ -65,10 +65,13 @@ public class
LoadTableStatementDataTypeConvertExecutionVisitor
public Optional<TSStatus> visitLoadTsFile(
final LoadTsFile loadTsFileStatement, final String databaseName) {
if (Objects.isNull(databaseName)) {
- LOGGER.warn(
- "Database name is unexpectedly null for LoadTsFileStatement: {}.
Skip data type conversion.",
- loadTsFileStatement);
- return Optional.empty();
+ final String errorMsg =
+ String.format(
+ "Database name is unexpectedly null for LoadTsFileStatement: %s.
Skip data type conversion.",
+ loadTsFileStatement);
+ LOGGER.warn(errorMsg);
+ return Optional.of(
+ new
TSStatus(TSStatusCode.SEMANTIC_ERROR.getStatusCode()).setMessage(errorMsg));
}
LOGGER.info("Start data type conversion for LoadTsFileStatement: {}.",
loadTsFileStatement);
@@ -100,15 +103,17 @@ public class
LoadTableStatementDataTypeConvertExecutionVisitor
.constructStatement(),
loadTsFileStatement.isConvertOnTypeMismatch());
- if (!handleTSStatus(
- executeInsertTabletWithRetry(statement, databaseName),
loadTsFileStatement)) {
- return Optional.empty();
+ final TSStatus status = executeInsertTabletWithRetry(statement,
databaseName);
+ if (!handleTSStatus(status, loadTsFileStatement)) {
+ return Optional.of(status);
}
}
} catch (final Exception e) {
LOGGER.warn(
"Failed to convert data type for LoadTsFileStatement: {}.",
loadTsFileStatement, e);
- return Optional.empty();
+ return Optional.of(
+
LoadTsFileDataTypeConverter.TABLE_STATEMENT_EXCEPTION_VISITOR.process(
+ loadTsFileStatement, e));
}
}
@@ -156,7 +161,7 @@ public class
LoadTableStatementDataTypeConvertExecutionVisitor
if (e instanceof InterruptedException) {
Thread.currentThread().interrupt();
}
- result =
statement.accept(LoadTsFileDataTypeConverter.STATEMENT_EXCEPTION_VISITOR, e);
+ result =
statement.accept(LoadTsFileDataTypeConverter.TREE_STATEMENT_EXCEPTION_VISITOR,
e);
}
return result;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadConvertedInsertTabletStatementExceptionVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTreeConvertedInsertTabletStatementExceptionVisitor.java
similarity index 97%
rename from
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadConvertedInsertTabletStatementExceptionVisitor.java
rename to
iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTreeConvertedInsertTabletStatementExceptionVisitor.java
index 9b1af3dfdeb..03b80bd812e 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadConvertedInsertTabletStatementExceptionVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTreeConvertedInsertTabletStatementExceptionVisitor.java
@@ -28,7 +28,7 @@ import
org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor;
import org.apache.iotdb.db.queryengine.plan.statement.crud.LoadTsFileStatement;
import org.apache.iotdb.rpc.TSStatusCode;
-public class LoadConvertedInsertTabletStatementExceptionVisitor
+public class LoadTreeConvertedInsertTabletStatementExceptionVisitor
extends StatementVisitor<TSStatus, Exception> {
@Override
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTreeStatementDataTypeConvertExecutionVisitor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTreeStatementDataTypeConvertExecutionVisitor.java
index 6dd851d1d9d..bee1f0faa37 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTreeStatementDataTypeConvertExecutionVisitor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTreeStatementDataTypeConvertExecutionVisitor.java
@@ -117,7 +117,7 @@ public class
LoadTreeStatementDataTypeConvertExecutionVisitor
tabletRawReqSizes.clear();
if (!handleTSStatus(result, loadTsFileStatement)) {
- return Optional.empty();
+ return Optional.of(result);
}
tabletRawReqs.add(tabletRawReq);
@@ -127,7 +127,9 @@ public class
LoadTreeStatementDataTypeConvertExecutionVisitor
} catch (final Exception e) {
LOGGER.warn(
"Failed to convert data type for LoadTsFileStatement: {}.",
loadTsFileStatement, e);
- return Optional.empty();
+ return Optional.of(
+ loadTsFileStatement.accept(
+
LoadTsFileDataTypeConverter.TREE_STATEMENT_EXCEPTION_VISITOR, e));
}
}
@@ -144,12 +146,14 @@ public class
LoadTreeStatementDataTypeConvertExecutionVisitor
tabletRawReqSizes.clear();
if (!handleTSStatus(result, loadTsFileStatement)) {
- return Optional.empty();
+ return Optional.of(result);
}
} catch (final Exception e) {
LOGGER.warn(
"Failed to convert data type for LoadTsFileStatement: {}.",
loadTsFileStatement, e);
- return Optional.empty();
+ return Optional.of(
+ loadTsFileStatement.accept(
+
LoadTsFileDataTypeConverter.TREE_STATEMENT_EXCEPTION_VISITOR, e));
}
}
} finally {
@@ -181,14 +185,14 @@ public class
LoadTreeStatementDataTypeConvertExecutionVisitor
}
private TSStatus executeInsertMultiTabletsWithRetry(
- final List<PipeTransferTabletRawReq> tabletRawReqs, boolean
isConvertOnTypeMismatch) {
+ final List<PipeTransferTabletRawReq> tabletRawReqs, final boolean
isConvertedOnTypeMismatch) {
final InsertMultiTabletsStatement batchStatement = new
InsertMultiTabletsStatement();
batchStatement.setInsertTabletStatementList(
tabletRawReqs.stream()
.map(
req ->
new LoadConvertedInsertTabletStatement(
- req.constructStatement(), isConvertOnTypeMismatch))
+ req.constructStatement(), isConvertedOnTypeMismatch))
.collect(Collectors.toList()));
TSStatus result;
@@ -214,7 +218,8 @@ public class
LoadTreeStatementDataTypeConvertExecutionVisitor
if (e instanceof InterruptedException) {
Thread.currentThread().interrupt();
}
- result =
batchStatement.accept(LoadTsFileDataTypeConverter.STATEMENT_EXCEPTION_VISITOR,
e);
+ result =
+
batchStatement.accept(LoadTsFileDataTypeConverter.TREE_STATEMENT_EXCEPTION_VISITOR,
e);
}
return result;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
index 62deb10b368..b45c05a3f30 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
@@ -54,8 +54,12 @@ public class LoadTsFileDataTypeConverter {
public static final LoadConvertedInsertTabletStatementTSStatusVisitor
STATEMENT_STATUS_VISITOR =
new LoadConvertedInsertTabletStatementTSStatusVisitor();
- public static final LoadConvertedInsertTabletStatementExceptionVisitor
- STATEMENT_EXCEPTION_VISITOR = new
LoadConvertedInsertTabletStatementExceptionVisitor();
+ public static final LoadTreeConvertedInsertTabletStatementExceptionVisitor
+ TREE_STATEMENT_EXCEPTION_VISITOR =
+ new LoadTreeConvertedInsertTabletStatementExceptionVisitor();
+ public static final LoadTableConvertedInsertTabletStatementExceptionVisitor
+ TABLE_STATEMENT_EXCEPTION_VISITOR =
+ new LoadTableConvertedInsertTabletStatementExceptionVisitor();
private final boolean isGeneratedByPipe;
private final MPPQueryContext context;