You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2023/11/30 07:35:07 UTC

(iotdb) 01/01: Get correct TsFileSequenceReader from FileReaderManager

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

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

commit 374cd89e211b6002274bfb554c62d7fbe3f1925b
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Thu Nov 30 15:34:50 2023 +0800

    Get correct TsFileSequenceReader from FileReaderManager
---
 .../org/apache/iotdb/db/storageengine/buffer/ChunkCache.java   | 10 ++++++++--
 .../dataregion/read/reader/chunk/DiskAlignedChunkLoader.java   |  6 ++++--
 .../dataregion/read/reader/chunk/DiskChunkLoader.java          |  6 ++++--
 .../apache/iotdb/db/storageengine/buffer/ChunkCacheTest.java   |  6 ++++--
 4 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
index 6fe3509994d..84d6f4f728b 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/ChunkCache.java
@@ -83,7 +83,7 @@ public class ChunkCache {
                   long startTime = System.nanoTime();
                   try {
                     TsFileSequenceReader reader =
-                        FileReaderManager.getInstance().get(key.getFilePath(), true);
+                        FileReaderManager.getInstance().get(key.getFilePath(), key.closed);
                     Chunk chunk = reader.readMemChunk(key.offsetOfChunkHeader);
                     // to save memory footprint, we don't save measurementId in ChunkHeader of Chunk
                     chunk.getHeader().setMeasurementID(null);
@@ -180,13 +180,19 @@ public class ChunkCache {
 
     private final long offsetOfChunkHeader;
 
-    public ChunkCacheKey(String filePath, TsFileID tsfileId, long offsetOfChunkHeader) {
+    // we don't need to compare this field, it's just used to correctly get TsFileSequenceReader
+    // from FileReaderManager
+    private final boolean closed;
+
+    public ChunkCacheKey(
+        String filePath, TsFileID tsfileId, long offsetOfChunkHeader, boolean closed) {
       this.filePath = filePath;
       this.regionId = tsfileId.regionId;
       this.timePartitionId = tsfileId.timePartitionId;
       this.tsFileVersion = tsfileId.fileVersion;
       this.compactionVersion = tsfileId.compactionVersion;
       this.offsetOfChunkHeader = offsetOfChunkHeader;
+      this.closed = closed;
     }
 
     public long getRetainedSizeInBytes() {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskAlignedChunkLoader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskAlignedChunkLoader.java
index 51eba154041..c6c59578c67 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskAlignedChunkLoader.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskAlignedChunkLoader.java
@@ -82,7 +82,8 @@ public class DiskAlignedChunkLoader implements IChunkLoader {
                   new ChunkCache.ChunkCacheKey(
                       resource.getTsFilePath(),
                       resource.getTsFileID(),
-                      timeChunkMetadata.getOffsetOfChunkHeader()),
+                      timeChunkMetadata.getOffsetOfChunkHeader(),
+                      resource.isClosed()),
                   timeChunkMetadata.getDeleteIntervalList(),
                   timeChunkMetadata.getStatistics(),
                   debug);
@@ -96,7 +97,8 @@ public class DiskAlignedChunkLoader implements IChunkLoader {
                         new ChunkCache.ChunkCacheKey(
                             resource.getTsFilePath(),
                             resource.getTsFileID(),
-                            valueChunkMetadata.getOffsetOfChunkHeader()),
+                            valueChunkMetadata.getOffsetOfChunkHeader(),
+                            resource.isClosed()),
                         valueChunkMetadata.getDeleteIntervalList(),
                         valueChunkMetadata.getStatistics(),
                         debug));
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskChunkLoader.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskChunkLoader.java
index a08b47f4313..efa457262d8 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskChunkLoader.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/DiskChunkLoader.java
@@ -57,7 +57,8 @@ public class DiskChunkLoader implements IChunkLoader {
             new ChunkCache.ChunkCacheKey(
                 resource.getTsFilePath(),
                 resource.getTsFileID(),
-                chunkMetaData.getOffsetOfChunkHeader()),
+                chunkMetaData.getOffsetOfChunkHeader(),
+                resource.isClosed()),
             chunkMetaData.getDeleteIntervalList(),
             chunkMetaData.getStatistics(),
             debug);
@@ -79,7 +80,8 @@ public class DiskChunkLoader implements IChunkLoader {
                   new ChunkCache.ChunkCacheKey(
                       resource.getTsFilePath(),
                       resource.getTsFileID(),
-                      chunkMetaData.getOffsetOfChunkHeader()),
+                      chunkMetaData.getOffsetOfChunkHeader(),
+                      resource.isClosed()),
                   chunkMetaData.getDeleteIntervalList(),
                   chunkMetaData.getStatistics(),
                   debug);
diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/buffer/ChunkCacheTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/buffer/ChunkCacheTest.java
index 890ec3ffd94..0a10ce8f260 100644
--- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/buffer/ChunkCacheTest.java
+++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/buffer/ChunkCacheTest.java
@@ -107,7 +107,8 @@ public class ChunkCacheTest {
               new ChunkCache.ChunkCacheKey(
                   tsFileResource.getTsFilePath(),
                   tsFileResource.getTsFileID(),
-                  firstChunkMetadata.getOffsetOfChunkHeader()),
+                  firstChunkMetadata.getOffsetOfChunkHeader(),
+                  true),
               firstChunkMetadata.getDeleteIntervalList(),
               firstChunkMetadata.getStatistics(),
               false);
@@ -122,7 +123,8 @@ public class ChunkCacheTest {
               new ChunkCache.ChunkCacheKey(
                   tsFileResource.getTsFilePath(),
                   tsFileResource.getTsFileID(),
-                  chunkMetadataKey.getOffsetOfChunkHeader()),
+                  chunkMetadataKey.getOffsetOfChunkHeader(),
+                  true),
               chunkMetadataKey.getDeleteIntervalList(),
               chunkMetadataKey.getStatistics(),
               false);