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/13 05:45:19 UTC

[iotdb] branch improve/iotdb-2901 created (now 3896bdc91d)

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

ericpai pushed a change to branch improve/iotdb-2901
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at 3896bdc91d [IOTDB-2901] Refine codes of DataTypeMismatchException and checkDataTypeMatch

This branch includes the following new commits:

     new 3896bdc91d [IOTDB-2901] Refine codes of DataTypeMismatchException and checkDataTypeMatch

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 01/01: [IOTDB-2901] Refine codes of DataTypeMismatchException and checkDataTypeMatch

Posted by er...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ericpai pushed a commit to branch improve/iotdb-2901
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 3896bdc91d37bf0c44dacf92d420a23a30b4ea8f
Author: ericpai <er...@hotmail.com>
AuthorDate: Wed Apr 13 13:42:18 2022 +0800

    [IOTDB-2901] Refine codes of DataTypeMismatchException and checkDataTypeMatch
---
 .../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 a067b17e30..39e8d73a31 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
@@ -75,7 +75,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.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
@@ -274,7 +273,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();
@@ -1547,8 +1550,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 {
@@ -1634,47 +1638,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");