You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by er...@apache.org on 2022/04/14 02:52:42 UTC

[iotdb] branch master updated: [IOTDB-2901] Refine codes of DataTypeMismatchException and checkDataTypeMatch (#5501)

This is an automated email from the ASF dual-hosted git repository.

ericpai 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 4de7d70fe1 [IOTDB-2901] Refine codes of DataTypeMismatchException and checkDataTypeMatch (#5501)
4de7d70fe1 is described below

commit 4de7d70fe1f9f78f2830441f41ae9aa0d9deaca7
Author: BaiJian <er...@hotmail.com>
AuthorDate: Thu Apr 14 10:52:37 2022 +0800

    [IOTDB-2901] Refine codes of DataTypeMismatchException and checkDataTypeMatch (#5501)
---
 .../session/IoTDBSessionDisableMemControlIT.java   |  8 ++--
 .../apache/iotdb/session/IoTDBSessionSimpleIT.java |  4 +-
 .../iotdb/session/IoTDBSessionVectorInsertIT.java  |  4 +-
 .../metadata/DataTypeMismatchException.java        |  6 +--
 .../db/metadata/idtable/IDTableHashmapImpl.java    | 50 ++--------------------
 .../db/metadata/schemaregion/SchemaRegion.java     | 50 +++-------------------
 .../metadata/schemaregion/SchemaRegionUtils.java   | 42 ++++++++++++++++++
 .../schemaregion/rocksdb/RSchemaRegion.java        | 49 +--------------------
 .../mpp/sql/statement/crud/InsertRowStatement.java |  5 ++-
 .../sql/statement/crud/InsertTabletStatement.java  |  5 ++-
 .../db/wal/recover/file/TsFilePlanRedoer.java      |  5 ++-
 .../iotdb/db/metadata/idtable/IDTableTest.java     |  2 +-
 12 files changed, 78 insertions(+), 152 deletions(-)

diff --git a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java
index 8bc9d199e5..1f4101b64f 100644
--- a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java
+++ b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionDisableMemControlIT.java
@@ -100,7 +100,7 @@ public class IoTDBSessionDisableMemControlIT {
           session.insertTablet(tablet, true);
         } catch (StatementExecutionException e) {
           Assert.assertEquals(
-              "313: failed to insert measurements [s3] caused by DataType mismatch, Insert measurement s3 type TEXT, metadata tree type INT64",
+              "313: failed to insert measurements [s3] caused by DataType mismatch, Insert timeseries root.sg.d.s3 type TEXT, metadata tree type INT64",
               e.getMessage());
         }
         tablet.reset();
@@ -113,7 +113,7 @@ public class IoTDBSessionDisableMemControlIT {
         session.insertTablet(tablet);
       } catch (StatementExecutionException e) {
         Assert.assertEquals(
-            "313: failed to insert measurements [s3] caused by DataType mismatch, Insert measurement s3 type TEXT, metadata tree type INT64",
+            "313: failed to insert measurements [s3] caused by DataType mismatch, Insert timeseries root.sg.d.s3 type TEXT, metadata tree type INT64",
             e.getMessage());
       }
       tablet.reset();
@@ -179,7 +179,7 @@ public class IoTDBSessionDisableMemControlIT {
           session.insertAlignedTablet(tablet, true);
         } catch (StatementExecutionException e) {
           Assert.assertEquals(
-              "313: failed to insert measurements [s3] caused by DataType mismatch, Insert measurement s3 type TEXT, metadata tree type INT64",
+              "313: failed to insert measurements [s3] caused by DataType mismatch, Insert timeseries root.sg.d.s3 type TEXT, metadata tree type INT64",
               e.getMessage());
         }
         tablet.reset();
@@ -192,7 +192,7 @@ public class IoTDBSessionDisableMemControlIT {
         session.insertAlignedTablet(tablet);
       } catch (StatementExecutionException e) {
         Assert.assertEquals(
-            "313: failed to insert measurements [s3] caused by DataType mismatch, Insert measurement s3 type TEXT, metadata tree type INT64",
+            "313: failed to insert measurements [s3] caused by DataType mismatch, Insert timeseries root.sg.d.s3 type TEXT, metadata tree type INT64",
             e.getMessage());
       }
       tablet.reset();
diff --git a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
index fa371dd3f7..818cc78e6e 100644
--- a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
+++ b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionSimpleIT.java
@@ -1455,7 +1455,7 @@ public class IoTDBSessionSimpleIT {
           session.insertTablet(tablet, true);
         } catch (StatementExecutionException e) {
           Assert.assertEquals(
-              "313: failed to insert measurements [s3] caused by DataType mismatch, Insert measurement s3 type TEXT, metadata tree type INT64",
+              "313: failed to insert measurements [s3] caused by DataType mismatch, Insert timeseries root.sg.d.s3 type TEXT, metadata tree type INT64",
               e.getMessage());
         }
         tablet.reset();
@@ -1468,7 +1468,7 @@ public class IoTDBSessionSimpleIT {
         session.insertTablet(tablet);
       } catch (StatementExecutionException e) {
         Assert.assertEquals(
-            "313: failed to insert measurements [s3] caused by DataType mismatch, Insert measurement s3 type TEXT, metadata tree type INT64",
+            "313: failed to insert measurements [s3] caused by DataType mismatch, Insert timeseries root.sg.d.s3 type TEXT, metadata tree type INT64",
             e.getMessage());
       }
       tablet.reset();
diff --git a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java
index 6f7aaef17d..f0c010e992 100644
--- a/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java
+++ b/integration/src/test/java/org/apache/iotdb/session/IoTDBSessionVectorInsertIT.java
@@ -490,7 +490,7 @@ public class IoTDBSessionVectorInsertIT {
           session.insertAlignedTablet(tablet, true);
         } catch (StatementExecutionException e) {
           Assert.assertEquals(
-              "313: failed to insert measurements [s3] caused by DataType mismatch, Insert measurement s3 type TEXT, metadata tree type INT64",
+              "313: failed to insert measurements [s3] caused by DataType mismatch, Insert timeseries root.sg.d.s3 type TEXT, metadata tree type INT64",
               e.getMessage());
         }
         tablet.reset();
@@ -503,7 +503,7 @@ public class IoTDBSessionVectorInsertIT {
         session.insertAlignedTablet(tablet);
       } catch (StatementExecutionException e) {
         Assert.assertEquals(
-            "313: failed to insert measurements [s3] caused by DataType mismatch, Insert measurement s3 type TEXT, metadata tree type INT64",
+            "313: failed to insert measurements [s3] caused by DataType mismatch, Insert timeseries root.sg.d.s3 type TEXT, metadata tree type INT64",
             e.getMessage());
       }
       tablet.reset();
diff --git a/server/src/main/java/org/apache/iotdb/db/exception/metadata/DataTypeMismatchException.java b/server/src/main/java/org/apache/iotdb/db/exception/metadata/DataTypeMismatchException.java
index 15fe3a9733..b9effa8b9d 100644
--- a/server/src/main/java/org/apache/iotdb/db/exception/metadata/DataTypeMismatchException.java
+++ b/server/src/main/java/org/apache/iotdb/db/exception/metadata/DataTypeMismatchException.java
@@ -22,10 +22,10 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
 public class DataTypeMismatchException extends MetadataException {
   public DataTypeMismatchException(
-      String measurementName, TSDataType insertType, TSDataType realType) {
+      String deviceName, String measurementName, TSDataType insertType, TSDataType realType) {
     super(
         String.format(
-            "DataType mismatch, Insert measurement %s type %s, metadata tree type %s",
-            measurementName, insertType, realType));
+            "DataType mismatch, Insert timeseries %s.%s type %s, metadata tree type %s",
+            deviceName, measurementName, insertType, realType));
   }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java
index 33578f630b..8f704ce016 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/idtable/IDTableHashmapImpl.java
@@ -32,14 +32,11 @@ import org.apache.iotdb.db.metadata.idtable.entry.SchemaEntry;
 import org.apache.iotdb.db.metadata.idtable.entry.TimeseriesID;
 import org.apache.iotdb.db.metadata.mnode.IMeasurementMNode;
 import org.apache.iotdb.db.metadata.path.PartialPath;
+import org.apache.iotdb.db.metadata.schemaregion.SchemaRegionUtils;
 import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
-import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan;
-import org.apache.iotdb.db.qp.physical.crud.InsertTabletPlan;
 import org.apache.iotdb.db.qp.physical.sys.CreateAlignedTimeSeriesPlan;
 import org.apache.iotdb.db.qp.physical.sys.CreateTimeSeriesPlan;
 import org.apache.iotdb.db.service.IoTDB;
-import org.apache.iotdb.db.utils.TypeInferenceUtils;
-import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.TimeValuePair;
 import org.apache.iotdb.tsfile.write.schema.IMeasurementSchema;
 import org.apache.iotdb.tsfile.write.schema.MeasurementSchema;
@@ -154,9 +151,10 @@ public class IDTableHashmapImpl implements IDTable {
           IMeasurementMNode measurementMNode =
               getOrCreateMeasurementIfNotExist(deviceEntry, plan, i);
 
-          checkDataTypeMatch(plan, i, measurementMNode.getSchema().getType());
+          SchemaRegionUtils.checkDataTypeMatch(plan, i, measurementMNode.getSchema().getType());
           measurementMNodes[i] = measurementMNode;
         } catch (DataTypeMismatchException mismatchException) {
+          logger.warn(mismatchException.getMessage());
           if (!config.isEnablePartialInsert()) {
             throw mismatchException;
           } else {
@@ -454,48 +452,6 @@ public class IDTableHashmapImpl implements IDTable {
     return schemaEntry;
   }
 
-  // from mmanger
-  private void checkDataTypeMatch(InsertPlan plan, int loc, TSDataType dataType)
-      throws MetadataException {
-    TSDataType insertDataType;
-    if (plan instanceof InsertRowPlan) {
-      if (!((InsertRowPlan) plan).isNeedInferType()) {
-        // only when InsertRowPlan's values is object[], we should check type
-        insertDataType = getTypeInLoc(plan, loc);
-      } else {
-        insertDataType = dataType;
-      }
-    } else {
-      insertDataType = getTypeInLoc(plan, loc);
-    }
-    if (dataType != insertDataType) {
-      String measurement = plan.getMeasurements()[loc];
-      logger.warn(
-          "DataType mismatch, Insert measurement {} type {}, metadata tree type {}",
-          measurement,
-          insertDataType,
-          dataType);
-      throw new DataTypeMismatchException(measurement, insertDataType, dataType);
-    }
-  }
-
-  /** get dataType of plan, in loc measurements only support InsertRowPlan and InsertTabletPlan */
-  private TSDataType getTypeInLoc(InsertPlan plan, int loc) throws MetadataException {
-    TSDataType dataType;
-    if (plan instanceof InsertRowPlan) {
-      InsertRowPlan tPlan = (InsertRowPlan) plan;
-      dataType =
-          TypeInferenceUtils.getPredictedDataType(tPlan.getValues()[loc], tPlan.isNeedInferType());
-    } else if (plan instanceof InsertTabletPlan) {
-      dataType = (plan).getDataTypes()[loc];
-    } else {
-      throw new MetadataException(
-          String.format(
-              "Only support insert and insertTablet, plan is [%s]", plan.getOperatorType()));
-    }
-    return dataType;
-  }
-
   @TestOnly
   public Map<IDeviceID, DeviceEntry>[] getIdTables() {
     return idTables;
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegion.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegion.java
index 47f56a5f12..38f1582fcd 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegion.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegion.java
@@ -77,7 +77,6 @@ import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.db.sync.sender.manager.SchemaSyncManager;
 import org.apache.iotdb.db.utils.SchemaUtils;
-import org.apache.iotdb.db.utils.TypeInferenceUtils;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -277,7 +276,11 @@ public class SchemaRegion implements ISchemaRegion {
     }
   }
 
-  /** @return line number of the logFile */
+  /**
+   * Init from metadata log file.
+   *
+   * @return line number of the logFile
+   */
   @SuppressWarnings("squid:S3776")
   private int initFromLog(File logFile) throws IOException {
     long time = System.currentTimeMillis();
@@ -1567,8 +1570,9 @@ public class SchemaRegion implements ISchemaRegion {
           // check type is match
           if (plan instanceof InsertRowPlan || plan instanceof InsertTabletPlan) {
             try {
-              checkDataTypeMatch(plan, i, measurementMNode.getSchema().getType());
+              SchemaRegionUtils.checkDataTypeMatch(plan, i, measurementMNode.getSchema().getType());
             } catch (DataTypeMismatchException mismatchException) {
+              logger.warn(mismatchException.getMessage());
               if (!config.isEnablePartialInsert()) {
                 throw mismatchException;
               } else {
@@ -1654,47 +1658,7 @@ public class SchemaRegion implements ISchemaRegion {
     return new Pair<>(deviceMNode, measurementMNode);
   }
 
-  private void checkDataTypeMatch(InsertPlan plan, int loc, TSDataType dataType)
-      throws MetadataException {
-    TSDataType insertDataType;
-    if (plan instanceof InsertRowPlan) {
-      if (!((InsertRowPlan) plan).isNeedInferType()) {
-        // only when InsertRowPlan's values is object[], we should check type
-        insertDataType = getTypeInLoc(plan, loc);
-      } else {
-        insertDataType = dataType;
-      }
-    } else {
-      insertDataType = getTypeInLoc(plan, loc);
-    }
-    if (dataType != insertDataType) {
-      String measurement = plan.getMeasurements()[loc];
-      logger.warn(
-          "DataType mismatch, Insert measurement {} type {}, metadata tree type {}",
-          measurement,
-          insertDataType,
-          dataType);
-      throw new DataTypeMismatchException(measurement, insertDataType, dataType);
-    }
-  }
-
   /** get dataType of plan, in loc measurements only support InsertRowPlan and InsertTabletPlan */
-  private TSDataType getTypeInLoc(InsertPlan plan, int loc) throws MetadataException {
-    TSDataType dataType;
-    if (plan instanceof InsertRowPlan) {
-      InsertRowPlan tPlan = (InsertRowPlan) plan;
-      dataType =
-          TypeInferenceUtils.getPredictedDataType(tPlan.getValues()[loc], tPlan.isNeedInferType());
-    } else if (plan instanceof InsertTabletPlan) {
-      dataType = (plan).getDataTypes()[loc];
-    } else {
-      throw new MetadataException(
-          String.format(
-              "Only support insert and insertTablet, plan is [%s]", plan.getOperatorType()));
-    }
-    return dataType;
-  }
-
   private IMeasurementMNode findMeasurementInTemplate(IMNode deviceMNode, String measurement)
       throws MetadataException {
     Template curTemplate = deviceMNode.getUpperTemplate();
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionUtils.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionUtils.java
index 40f2cc10c1..a67182bd24 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionUtils.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/SchemaRegionUtils.java
@@ -20,7 +20,13 @@
 package org.apache.iotdb.db.metadata.schemaregion;
 
 import org.apache.iotdb.db.engine.fileSystem.SystemFileFactory;
+import org.apache.iotdb.db.exception.metadata.DataTypeMismatchException;
 import org.apache.iotdb.db.exception.metadata.MetadataException;
+import org.apache.iotdb.db.qp.physical.crud.InsertPlan;
+import org.apache.iotdb.db.qp.physical.crud.InsertRowPlan;
+import org.apache.iotdb.db.qp.physical.crud.InsertTabletPlan;
+import org.apache.iotdb.db.utils.TypeInferenceUtils;
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
 import org.slf4j.Logger;
 
@@ -56,4 +62,40 @@ public class SchemaRegionUtils {
               "Failed to delete schema region folder %s", schemaRegionDir.getAbsolutePath()));
     }
   }
+
+  public static void checkDataTypeMatch(InsertPlan plan, int loc, TSDataType dataType)
+      throws MetadataException {
+    TSDataType insertDataType;
+    if (plan instanceof InsertRowPlan) {
+      if (!((InsertRowPlan) plan).isNeedInferType()) {
+        // only when InsertRowPlan's values is object[], we should check type
+        insertDataType = getTypeInLoc(plan, loc);
+      } else {
+        insertDataType = dataType;
+      }
+    } else {
+      insertDataType = getTypeInLoc(plan, loc);
+    }
+    if (dataType != insertDataType) {
+      String measurement = plan.getMeasurements()[loc];
+      String device = plan.getDevicePath().getFullPath();
+      throw new DataTypeMismatchException(device, measurement, insertDataType, dataType);
+    }
+  }
+
+  private static TSDataType getTypeInLoc(InsertPlan plan, int loc) throws MetadataException {
+    TSDataType dataType;
+    if (plan instanceof InsertRowPlan) {
+      InsertRowPlan tPlan = (InsertRowPlan) plan;
+      dataType =
+          TypeInferenceUtils.getPredictedDataType(tPlan.getValues()[loc], tPlan.isNeedInferType());
+    } else if (plan instanceof InsertTabletPlan) {
+      dataType = (plan).getDataTypes()[loc];
+    } else {
+      throw new MetadataException(
+          String.format(
+              "Only support insert and insertTablet, plan is [%s]", plan.getOperatorType()));
+    }
+    return dataType;
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
index 0eb798fd61..5026693ee1 100644
--- a/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
+++ b/server/src/main/java/org/apache/iotdb/db/metadata/schemaregion/rocksdb/RSchemaRegion.java
@@ -72,7 +72,6 @@ import org.apache.iotdb.db.query.dataset.ShowDevicesResult;
 import org.apache.iotdb.db.query.dataset.ShowTimeSeriesResult;
 import org.apache.iotdb.db.service.IoTDB;
 import org.apache.iotdb.db.utils.SchemaUtils;
-import org.apache.iotdb.db.utils.TypeInferenceUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
@@ -1806,13 +1805,9 @@ public class RSchemaRegion implements ISchemaRegion {
         // check type is match
         if (plan instanceof InsertRowPlan || plan instanceof InsertTabletPlan) {
           try {
-            checkDataTypeMatch(plan, i, nodeMap.get(i).getSchema().getType());
+            SchemaRegionUtils.checkDataTypeMatch(plan, i, nodeMap.get(i).getSchema().getType());
           } catch (DataTypeMismatchException mismatchException) {
-            logger.warn(
-                "DataType mismatch, Insert measurement {} type {}, metadata tree type {}",
-                measurementList[i],
-                plan.getDataTypes()[i],
-                nodeMap.get(i).getSchema().getType());
+            logger.warn(mismatchException.getMessage());
             if (!config.isEnablePartialInsert()) {
               throw mismatchException;
             } else {
@@ -1850,46 +1845,6 @@ public class RSchemaRegion implements ISchemaRegion {
     return deviceMNode;
   }
 
-  private void checkDataTypeMatch(InsertPlan plan, int loc, TSDataType dataType)
-      throws MetadataException {
-    TSDataType insertDataType;
-    if (plan instanceof InsertRowPlan) {
-      if (!((InsertRowPlan) plan).isNeedInferType()) {
-        // only when InsertRowPlan's values is object[], we should check type
-        insertDataType = getTypeInLoc(plan, loc);
-      } else {
-        insertDataType = dataType;
-      }
-    } else {
-      insertDataType = getTypeInLoc(plan, loc);
-    }
-    if (dataType != insertDataType) {
-      String measurement = plan.getMeasurements()[loc];
-      logger.warn(
-          "DataType mismatch, Insert measurement {} type {}, metadata tree type {}",
-          measurement,
-          insertDataType,
-          dataType);
-      throw new DataTypeMismatchException(measurement, insertDataType, dataType);
-    }
-  }
-  /** get dataType of plan, in loc measurements only support InsertRowPlan and InsertTabletPlan */
-  private TSDataType getTypeInLoc(InsertPlan plan, int loc) throws MetadataException {
-    TSDataType dataType;
-    if (plan instanceof InsertRowPlan) {
-      InsertRowPlan tPlan = (InsertRowPlan) plan;
-      dataType =
-          TypeInferenceUtils.getPredictedDataType(tPlan.getValues()[loc], tPlan.isNeedInferType());
-    } else if (plan instanceof InsertTabletPlan) {
-      dataType = (plan).getDataTypes()[loc];
-    } else {
-      throw new MetadataException(
-          String.format(
-              "Only support insert and insertTablet, plan is [%s]", plan.getOperatorType()));
-    }
-    return dataType;
-  }
-
   @Override
   public void clear() {
     try {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/statement/crud/InsertRowStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/statement/crud/InsertRowStatement.java
index d5becb00c2..80862ab70e 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/statement/crud/InsertRowStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/statement/crud/InsertRowStatement.java
@@ -193,7 +193,10 @@ public class InsertRowStatement extends InsertBaseStatement {
           markFailedMeasurementInsertion(
               i,
               new DataTypeMismatchException(
-                  measurements[i], measurementSchemas.get(i).getType(), dataTypes[i]));
+                  devicePath.getFullPath(),
+                  measurements[i],
+                  measurementSchemas.get(i).getType(),
+                  dataTypes[i]));
         }
       }
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/statement/crud/InsertTabletStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/statement/crud/InsertTabletStatement.java
index 9123601eef..9755950521 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/statement/crud/InsertTabletStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/statement/crud/InsertTabletStatement.java
@@ -117,7 +117,10 @@ public class InsertTabletStatement extends InsertBaseStatement {
           markFailedMeasurementInsertion(
               i,
               new DataTypeMismatchException(
-                  measurements[i], measurementSchemas.get(i).getType(), dataTypes[i]));
+                  devicePath.getFullPath(),
+                  measurements[i],
+                  measurementSchemas.get(i).getType(),
+                  dataTypes[i]));
         }
       }
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java
index 47318b0c5d..1932488fef 100644
--- a/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java
+++ b/server/src/main/java/org/apache/iotdb/db/wal/recover/file/TsFilePlanRedoer.java
@@ -144,7 +144,10 @@ public class TsFilePlanRedoer {
         tPlan.markFailedMeasurementInsertion(
             i,
             new DataTypeMismatchException(
-                mNodes[i].getName(), tPlan.getDataTypes()[i], mNodes[i].getSchema().getType()));
+                tPlan.getDevicePath().getFullPath(),
+                mNodes[i].getName(),
+                tPlan.getDataTypes()[i],
+                mNodes[i].getSchema().getType()));
       }
     }
   }
diff --git a/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java b/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java
index 294f87c533..4973887d35 100644
--- a/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/metadata/idtable/IDTableTest.java
@@ -160,7 +160,7 @@ public class IDTableTest {
         fail("should throw exception");
       } catch (DataTypeMismatchException e) {
         assertEquals(
-            "DataType mismatch, Insert measurement s2 type DOUBLE, metadata tree type INT64",
+            "DataType mismatch, Insert timeseries root.laptop.d1.aligned_device.s2 type DOUBLE, metadata tree type INT64",
             e.getMessage());
       } catch (Exception e2) {
         fail("throw wrong exception");