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 7fdd16e48e607..56c534c01e5d0 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); } 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 cffc16f22ac0d..53363b8fa110e 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 { 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 1a8a85ec37015..b5d95234aa73a 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); }