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:"
