This is an automated email from the ASF dual-hosted git repository.
jackietien 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 24f0a606cbc Ignore MismatchedType caused by delete
24f0a606cbc is described below
commit 24f0a606cbc582ade472b53379f9ca357db841f4
Author: Jackie Tien <[email protected]>
AuthorDate: Wed Dec 6 18:09:37 2023 +0800
Ignore MismatchedType caused by delete
---
.../execution/operator/source/AlignedSeriesScanUtil.java | 6 ++++++
.../execution/operator/source/SeriesScanUtil.java | 6 ++++++
.../compaction/ReadPointCompactionPerformerTest.java | 2 +-
.../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 +-
7 files changed, 42 insertions(+), 2 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/AlignedSeriesScanUtil.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/AlignedSeriesScanUtil.java
index b5e7e2486e2..26ca68cdc35 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/AlignedSeriesScanUtil.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/AlignedSeriesScanUtil.java
@@ -158,6 +158,12 @@ public class AlignedSeriesScanUtil extends SeriesScanUtil {
@Override
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/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/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadPointCompactionPerformerTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadPointCompactionPerformerTest.java
index 79999e02b96..bfbc6533317 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadPointCompactionPerformerTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadPointCompactionPerformerTest.java
@@ -5814,7 +5814,7 @@ public class ReadPointCompactionPerformerTest extends
AbstractCompactionTest {
Map<String, Long> measurementMaxTime = new HashMap<>();
for (int i = 0; i < 4; i++) {
- TSDataType tsDataType = i < 2 ? TSDataType.TEXT : TSDataType.INT64;
+ TSDataType tsDataType = (i < 2 || i == 3) ? TSDataType.TEXT :
TSDataType.INT64;
for (int j = 0; j < 7; j++) {
measurementMaxTime.putIfAbsent(
COMPACTION_TEST_SG + PATH_SEPARATOR + "d" + i + PATH_SEPARATOR +
"s" + j,
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:"