From a73ac902555e602ef738aaf4617ecd7c9fdabf37 Mon Sep 17 00:00:00 2001 From: Tian Jiang Date: Wed, 28 Jan 2026 15:32:01 +0800 Subject: [PATCH 1/3] Fix that the last binary in BinaryAllocator may not be evicted --- .../apache/iotdb/commons/binaryallocator/arena/Arena.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/binaryallocator/arena/Arena.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/binaryallocator/arena/Arena.java index 1a8a85ec3701..b5d95234aa73 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/binaryallocator/arena/Arena.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/binaryallocator/arena/Arena.java @@ -216,7 +216,12 @@ private void updateSample() { private long resize() { average.update(); - int needRemain = (int) Math.ceil(average.average()) - getActiveSize(); + float averageActiveSize = average.average(); + if (averageActiveSize < 0.0001f) { + // avoid keeping the last binary forever + averageActiveSize = 0.0f; + } + int needRemain = (int) Math.ceil(averageActiveSize) - getActiveSize(); return evict(getQueueSize() - needRemain); } From ff454dd8eb56aa6deedba3c3ed15149f0734302d Mon Sep 17 00:00:00 2001 From: Tian Jiang Date: Wed, 28 Jan 2026 18:59:13 +0800 Subject: [PATCH 2/3] Fix that querying type-altered chunks in memory may affect the result of flush --- .../src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java index 7fdd16e48e60..56c534c01e5d 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/SchemaUtils.java @@ -406,9 +406,10 @@ public static void rewriteAlignedChunkMetadataStatistics( Statistics statistics = Statistics.getStatsByType(targetDataType); statistics = getNewStatistics(valueChunkMetadata, targetDataType, statistics); - ChunkMetadata newChunkMetadata = (ChunkMetadata) valueChunkMetadata; + ChunkMetadata newChunkMetadata = new ChunkMetadata((ChunkMetadata) valueChunkMetadata); newChunkMetadata.setTsDataType(targetDataType); newChunkMetadata.setStatistics(statistics); + alignedChunkMetadata.getValueChunkMetadataList().set(index, newChunkMetadata); } else { alignedChunkMetadata.getValueChunkMetadataList().set(index, null); } @@ -421,8 +422,10 @@ public static void rewriteNonAlignedChunkMetadataStatistics( Statistics statistics = Statistics.getStatsByType(targetDataType); statistics = getNewStatistics(chunkMetadata, targetDataType, statistics); + chunkMetadata = new ChunkMetadata(chunkMetadata); chunkMetadata.setTsDataType(targetDataType); chunkMetadata.setStatistics(statistics); + chunkMetadataList.set(index, chunkMetadata); } else { chunkMetadataList.set(index, null); } From 5e0297a93a871ace55c17205aba83b20487d026e Mon Sep 17 00:00:00 2001 From: JackieTien97 Date: Wed, 28 Jan 2026 20:02:24 +0800 Subject: [PATCH 3/3] Fix SchemaUtilsTest ut by changing unmodifiable singletonList to ArrayList --- .../apache/iotdb/db/utils/SchemaUtilsTest.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/SchemaUtilsTest.java b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/SchemaUtilsTest.java index cffc16f22ac0..53363b8fa110 100644 --- a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/SchemaUtilsTest.java +++ b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/SchemaUtilsTest.java @@ -96,15 +96,15 @@ public void rewriteAlignedChunkMetadataStatistics() { || tsDataType == TSDataType.OBJECT) { continue; } - List valueChunkMetadatas = - Collections.singletonList( - new ChunkMetadata( - "s0", - tsDataType, - TSEncoding.RLE, - CompressionType.LZ4, - 0, - Statistics.getStatsByType(tsDataType))); + List valueChunkMetadatas = new ArrayList<>(1); + valueChunkMetadatas.add( + new ChunkMetadata( + "s0", + tsDataType, + TSEncoding.RLE, + CompressionType.LZ4, + 0, + Statistics.getStatsByType(tsDataType))); AlignedChunkMetadata alignedChunkMetadata = new AlignedChunkMetadata(new ChunkMetadata(), valueChunkMetadatas); try {