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

jackietien pushed a commit to branch IgnoreMismatchedType
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 43e2166cbbdd010ba577e4470b53e27ea424930b
Author: JackieTien97 <[email protected]>
AuthorDate: Thu Nov 30 20:24:40 2023 +0800

    Ignore MismatchedType caused by delete
---
 .../execution/operator/source/SeriesScanUtil.java         |  6 ++++++
 .../tsfile/file/metadata/AlignedTimeSeriesMetadata.java   | 15 +++++++++++++++
 .../iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java   |  4 ++++
 .../iotdb/tsfile/file/metadata/TimeseriesMetadata.java    |  9 +++++++++
 .../tsfile/read/reader/chunk/AlignedChunkReader.java      |  2 +-
 5 files changed, 35 insertions(+), 1 deletion(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
index 77f1c100f4d..3425e96cee0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
@@ -1048,6 +1048,12 @@ public class SeriesScanUtil {
 
   @SuppressWarnings("squid:S3740")
   protected void filterFirstTimeSeriesMetadata() throws IOException {
+    // skip if data type is mismatched which may be caused by delete
+    if (firstTimeSeriesMetadata != null
+        && !firstTimeSeriesMetadata.typeMatch(getTsDataTypeList())) {
+      skipCurrentFile();
+    }
+
     if (firstTimeSeriesMetadata != null
         && !isFileOverlapped()
         && !firstTimeSeriesMetadata.isModified()) {
diff --git 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
index 79d20588418..ea687e8a17a 100644
--- 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
+++ 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/AlignedTimeSeriesMetadata.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.tsfile.file.metadata;
 
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.controller.IChunkMetadataLoader;
 
@@ -165,6 +166,20 @@ public class AlignedTimeSeriesMetadata implements 
ITimeSeriesMetadata {
     this.chunkMetadataLoader = chunkMetadataLoader;
   }
 
+  @Override
+  public boolean typeMatch(List<TSDataType> dataTypes) {
+    if (valueTimeseriesMetadataList != null) {
+      for (int i = 0, size = dataTypes.size(); i < size; i++) {
+        TimeseriesMetadata valueTimeSeriesMetadata = 
valueTimeseriesMetadataList.get(i);
+        if (valueTimeSeriesMetadata != null
+            && !valueTimeSeriesMetadata.typeMatch(dataTypes.get(i))) {
+          return false;
+        }
+      }
+    }
+    return true;
+  }
+
   public List<TimeseriesMetadata> getValueTimeseriesMetadataList() {
     return valueTimeseriesMetadataList;
   }
diff --git 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
index c09f0e90b08..7467f807bdd 100644
--- 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
+++ 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ITimeSeriesMetadata.java
@@ -19,6 +19,7 @@
 
 package org.apache.iotdb.tsfile.file.metadata;
 
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.controller.IChunkMetadataLoader;
 
@@ -44,4 +45,7 @@ public interface ITimeSeriesMetadata {
   List<IChunkMetadata> loadChunkMetadataList();
 
   void setChunkMetadataLoader(IChunkMetadataLoader chunkMetadataLoader);
+
+  /** @return true if data type is matched, otherwise false */
+  boolean typeMatch(List<TSDataType> dataTypes);
 }
diff --git 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java
 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java
index b40868d4346..0412ae5090a 100644
--- 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java
+++ 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java
@@ -232,6 +232,15 @@ public class TimeseriesMetadata implements 
ITimeSeriesMetadata {
     this.chunkMetadataLoader = chunkMetadataLoader;
   }
 
+  @Override
+  public boolean typeMatch(List<TSDataType> dataTypes) {
+    return typeMatch(dataTypes.get(0));
+  }
+
+  public boolean typeMatch(TSDataType dataType) {
+    return this.dataType == dataType;
+  }
+
   @Override
   public List<IChunkMetadata> loadChunkMetadataList() {
     return chunkMetadataLoader.loadChunkMetadataList(this);
diff --git 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
index bbbb5fc8864..e60950b2638 100644
--- 
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
+++ 
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
@@ -363,7 +363,7 @@ public class AlignedChunkReader implements IChunkReader {
     pageInfo.dataType = chunkHeader.getDataType();
     int compressedPageBodyLength = pageHeader.getCompressedSize();
     byte[] compressedPageBody = new byte[compressedPageBodyLength];
-    // doesn't has a complete page body
+    // doesn't have a complete page body
     if (compressedPageBodyLength > chunkBuffer.remaining()) {
       throw new IOException(
           "do not has a complete page body. Expected:"

Reply via email to