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;

Reply via email to