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

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


The following commit(s) were added to refs/heads/master by this push:
     new ac110bce20b Use max bytes to allocate WAL compressed buffer (#12928)
ac110bce20b is described below

commit ac110bce20b85ee1677252c8aeb2d3aa6b4ffc6c
Author: shuwenwei <[email protected]>
AuthorDate: Mon Jul 15 19:21:14 2024 +0800

    Use max bytes to allocate WAL compressed buffer (#12928)
    
    * use max bytes to allocate WAL compressed buffer
    
    * calculate max bytes with lz4 compressor
---
 .../db/storageengine/dataregion/wal/buffer/WALBuffer.java     | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALBuffer.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALBuffer.java
index 304b182d923..d2b14597c50 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALBuffer.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/wal/buffer/WALBuffer.java
@@ -38,6 +38,8 @@ import 
org.apache.iotdb.db.storageengine.dataregion.wal.utils.WALMode;
 import 
org.apache.iotdb.db.storageengine.dataregion.wal.utils.listener.WALFlushListener;
 import org.apache.iotdb.db.utils.MmapUtil;
 
+import org.apache.tsfile.compress.ICompressor;
+import org.apache.tsfile.file.metadata.enums.CompressionType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -149,7 +151,8 @@ public class WALBuffer extends AbstractWALBuffer {
     try {
       workingBuffer = ByteBuffer.allocateDirect(ONE_THIRD_WAL_BUFFER_SIZE);
       idleBuffer = ByteBuffer.allocateDirect(ONE_THIRD_WAL_BUFFER_SIZE);
-      compressedByteBuffer = 
ByteBuffer.allocateDirect(ONE_THIRD_WAL_BUFFER_SIZE);
+      compressedByteBuffer =
+          
ByteBuffer.allocateDirect(getCompressedByteBufferSize(ONE_THIRD_WAL_BUFFER_SIZE));
     } catch (OutOfMemoryError e) {
       logger.error("Fail to allocate wal node-{}'s buffer because out of 
memory.", identifier, e);
       close();
@@ -157,6 +160,10 @@ public class WALBuffer extends AbstractWALBuffer {
     }
   }
 
+  private int getCompressedByteBufferSize(int size) {
+    return 
ICompressor.getCompressor(CompressionType.LZ4).getMaxBytesForCompression(size);
+  }
+
   @Override
   protected File rollLogWriter(long searchIndex, WALFileStatus fileStatus) 
throws IOException {
     File file = super.rollLogWriter(searchIndex, fileStatus);
@@ -175,7 +182,7 @@ public class WALBuffer extends AbstractWALBuffer {
       MmapUtil.clean(compressedByteBuffer);
       workingBuffer = ByteBuffer.allocateDirect(capacity);
       idleBuffer = ByteBuffer.allocateDirect(capacity);
-      compressedByteBuffer = ByteBuffer.allocateDirect(capacity);
+      compressedByteBuffer = 
ByteBuffer.allocateDirect(getCompressedByteBufferSize(capacity));
       currentWALFileWriter.setCompressedByteBuffer(compressedByteBuffer);
     } catch (OutOfMemoryError e) {
       logger.error("Fail to allocate wal node-{}'s buffer because out of 
memory.", identifier, e);

Reply via email to