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) {
