Skip to content

Commit

Permalink
Merge pull request #15088 from vbotbuildovich/backport-pr-15059-v23.2…
Browse files Browse the repository at this point in the history
….x-567

[v23.2.x] compression: correctly compute the output buffer size for lz4
  • Loading branch information
piyushredpanda committed Nov 22, 2023
2 parents 2a3781a + 11c585f commit ae9a71b
Showing 1 changed file with 11 additions and 14 deletions.
25 changes: 11 additions & 14 deletions src/v/compression/internal/lz4_frame_compressor.cc
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,17 @@ iobuf lz4_frame_compressor::compress(const iobuf& b) {

size_t input_chunk_size = std::min(
input_sz - input_cursor, max_input_chunk_size);
size_t next_output_size = LZ4F_compressBound(input_chunk_size, &prefs);

if (output_sz - output_cursor < next_output_size) {
obuf.trim(output_cursor);
ret.append(std::move(obuf));
output_chunk_size = std::min(max_chunk_size, output_chunk_size * 2);
obuf = ss::temporary_buffer<char>(output_chunk_size);
output = obuf.get_write();
output_sz = obuf.size();
output_cursor = 0;
}

code = LZ4F_compressUpdate(
ctx,
Expand All @@ -132,20 +143,6 @@ iobuf lz4_frame_compressor::compress(const iobuf& b) {

// Advance by how many bytes we consumed
output_cursor += code;

input_chunk_size = std::min(
input_sz - input_cursor, max_input_chunk_size);
size_t next_output_size = LZ4F_compressBound(input_chunk_size, &prefs);

if (output_sz - output_cursor < next_output_size) {
obuf.trim(output_cursor);
ret.append(std::move(obuf));
output_chunk_size = std::min(max_chunk_size, output_chunk_size * 2);
obuf = ss::temporary_buffer<char>(output_chunk_size);
output = obuf.get_write();
output_sz = obuf.size();
output_cursor = 0;
}
}

code = LZ4F_compressEnd(
Expand Down

0 comments on commit ae9a71b

Please sign in to comment.