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

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

commit 6575e6edfe376b9f123c47af6579eb061ed7d7cc
Author: shuwenwei <[email protected]>
AuthorDate: Mon Jan 19 16:28:24 2026 +0800

    fix
---
 .../utils/tableDiskUsageCache/TableDiskUsageCache.java        |  2 +-
 .../utils/tableDiskUsageCache/TableDiskUsageCacheReader.java  |  2 ++
 .../utils/tableDiskUsageCache/TableDiskUsageCacheWriter.java  |  2 +-
 .../utils/tableDiskUsageCache/TsFileTableSizeCacheReader.java | 11 +++++++----
 4 files changed, 11 insertions(+), 6 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCache.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCache.java
index e804030a614..225a4629fde 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCache.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCache.java
@@ -52,7 +52,7 @@ public class TableDiskUsageCache {
     try {
       while (!Thread.currentThread().isInterrupted()) {
         try {
-          Operation operation = queue.poll(1, TimeUnit.SECONDS);
+          Operation operation = queue.poll(10, TimeUnit.MILLISECONDS);
           if (operation == null) {
             checkAndMayCloseIdleWriter();
             checkAndMayCompact(TimeUnit.SECONDS.toMillis(1));
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheReader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheReader.java
index 7e7e459e95f..a7f910583ca 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheReader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheReader.java
@@ -77,6 +77,8 @@ public class TableDiskUsageCacheReader implements Closeable {
           if (future.isDone()) {
             this.cacheFileReader = future.get();
             this.cacheFileReader.openKeyFile();
+          } else {
+            Thread.sleep(1);
           }
         } catch (InterruptedException e) {
           Thread.currentThread().interrupt();
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheWriter.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheWriter.java
index d0e719fb65e..dd6bd887111 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheWriter.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TableDiskUsageCacheWriter.java
@@ -93,7 +93,6 @@ public class TableDiskUsageCacheWriter {
         int version;
         try {
           version = 
Integer.parseInt(fileName.substring(TSFILE_CACHE_KEY_FILENAME_PREFIX.length()));
-          currentTsFileIndexFileVersion = 
Math.max(currentTsFileIndexFileVersion, version);
         } catch (NumberFormatException ignored) {
           continue;
         }
@@ -114,6 +113,7 @@ public class TableDiskUsageCacheWriter {
             continue;
           }
         }
+        currentTsFileIndexFileVersion = 
Math.max(currentTsFileIndexFileVersion, version);
         keyFiles.add(file);
       }
       if (keyFiles.size() > 1) {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheReader.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheReader.java
index 04c416e02db..7895cee705a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheReader.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/utils/tableDiskUsageCache/TsFileTableSizeCacheReader.java
@@ -76,6 +76,7 @@ public class TsFileTableSizeCacheReader {
       return new Pair<>(0L, 0L);
     }
     List<Long> offsetsInKeyFile = new ArrayList<>();
+    List<Long> lastCompleteKeyOffsets = new ArrayList<>();
     long lastCompleteEntryEndOffsetInKeyFile = 0;
     try {
       openKeyFile();
@@ -83,9 +84,14 @@ public class TsFileTableSizeCacheReader {
         KeyFileEntry keyFileEntry = readOneEntryFromKeyFile();
         lastCompleteEntryEndOffsetInKeyFile = inputStream.position();
         if (keyFileEntry.originTsFileID != null) {
+          if (!lastCompleteKeyOffsets.isEmpty()) {
+            lastCompleteKeyOffsets.set(
+                lastCompleteKeyOffsets.size() - 1, 
lastCompleteEntryEndOffsetInKeyFile);
+          }
           continue;
         }
         offsetsInKeyFile.add(keyFileEntry.offset);
+        lastCompleteKeyOffsets.add(lastCompleteEntryEndOffsetInKeyFile);
       }
     } catch (Exception ignored) {
     } finally {
@@ -104,10 +110,7 @@ public class TsFileTableSizeCacheReader {
       openValueFile();
       while (inputStream.position() < valueFileLength && keyIterIndex < 
offsetsInKeyFile.size()) {
         long startOffsetInKeyFile = offsetsInKeyFile.get(keyIterIndex);
-        long endOffsetInKeyFile =
-            keyIterIndex == offsetsInKeyFile.size() - 1
-                ? lastCompleteEntryEndOffsetInKeyFile
-                : offsetsInKeyFile.get(keyIterIndex + 1);
+        long endOffsetInKeyFile = lastCompleteKeyOffsets.get(keyIterIndex);
         keyIterIndex++;
         long startOffset = inputStream.position();
         if (startOffset != startOffsetInKeyFile) {

Reply via email to