You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2023/07/10 09:19:34 UTC
[iotdb] branch rel/1.1 updated: [To rel/1.1][IOTDB-6056] Pipe: Failed to load tsfile with empty pages (NPE occurs when loading)(#10500)
This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch rel/1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.1 by this push:
new f465c0eff56 [To rel/1.1][IOTDB-6056] Pipe: Failed to load tsfile with empty pages (NPE occurs when loading)(#10500)
f465c0eff56 is described below
commit f465c0eff5661cf8305f4713c6fdc7c60ea8e05e
Author: Itami Sho <42...@users.noreply.github.com>
AuthorDate: Mon Jul 10 17:19:27 2023 +0800
[To rel/1.1][IOTDB-6056] Pipe: Failed to load tsfile with empty pages (NPE occurs when loading)(#10500)
---
.../iotdb/db/engine/load/TsFileSplitter.java | 26 ++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/load/TsFileSplitter.java b/server/src/main/java/org/apache/iotdb/db/engine/load/TsFileSplitter.java
index fb6d6a9dc90..8e5e0259cf2 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/load/TsFileSplitter.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/load/TsFileSplitter.java
@@ -261,15 +261,20 @@ public class TsFileSplitter {
}
}
if (alignedChunkDataList.size() == 1) { // write entire page
- alignedChunkDataList
- .get(0)
- .writeEntirePage(pageHeader, reader.readCompressedPage(pageHeader));
+ // write the entire page if it's not an empty page.
+ if (!isEmptyPage(pageHeader)) {
+ alignedChunkDataList
+ .get(0)
+ .writeEntirePage(pageHeader, reader.readCompressedPage(pageHeader));
+ }
} else { // decode page
long[] times = pageIndex2Times.get(pageIndex);
TsPrimitiveType[] values =
decodeValuePage(reader, header, pageHeader, times, valueDecoder);
for (AlignedChunkData alignedChunkData : alignedChunkDataList) {
- alignedChunkData.writeDecodeValuePage(times, values, header.getDataType());
+ if (!isEmptyPage(pageHeader)) {
+ alignedChunkData.writeDecodeValuePage(times, values, header.getDataType());
+ }
}
}
@@ -441,6 +446,19 @@ public class TsFileSplitter {
}
}
+ /**
+ * handle empty page in aligned chunk, if uncompressedSize and compressedSize are both 0, and the
+ * statistics is null, then the page is empty.
+ *
+ * @param pageHeader page header
+ * @return true if the page is empty
+ */
+ private boolean isEmptyPage(PageHeader pageHeader) {
+ return pageHeader.getUncompressedSize() == 0
+ && pageHeader.getCompressedSize() == 0
+ && pageHeader.getStatistics() == null;
+ }
+
private TsPrimitiveType[] decodeValuePage(
TsFileSequenceReader reader,
ChunkHeader chunkHeader,