Skip to content

Commit 1970ed5

Browse files
committed
out_s3: stop unnecessary re-compression when chunk is already compressed
Signed-off-by: Shizuo Fujita <fujita@clear-code.com>
1 parent 7a6a91b commit 1970ed5

3 files changed

Lines changed: 20 additions & 2 deletions

File tree

lib/fluent/plugin/out_s3.rb

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ def configure(conf)
203203

204204
begin
205205
buffer_type = @buffer_config[:@type]
206-
@compressor = COMPRESSOR_REGISTRY.lookup(@store_as).new(buffer_type: buffer_type, log: log)
206+
@compressor = COMPRESSOR_REGISTRY.lookup(@store_as).new(buffer_type: buffer_type, buffer_compressed_type: @buffer.compress, log: log)
207207
rescue => e
208208
log.warn "'#{@store_as}' not supported. Use 'text' instead: error = #{e.message}"
209209
@compressor = TextCompressor.new
@@ -600,6 +600,7 @@ class Compressor
600600
def initialize(opts = {})
601601
super()
602602
@buffer_type = opts[:buffer_type]
603+
@buffer_compressed_type = opts[:buffer_compressed_type]
603604
@log = opts[:log]
604605
end
605606

@@ -642,11 +643,18 @@ def content_type
642643
end
643644

644645
def compress(chunk, tmp)
646+
if @buffer_compressed_type == :gzip
647+
chunk.write_to(tmp, compressed: @buffer_compressed_type)
648+
return
649+
end
650+
645651
w = Zlib::GzipWriter.new(tmp)
646652
chunk.write_to(w)
647653
w.finish
648654
ensure
649-
w.finish rescue nil
655+
if w
656+
w.finish rescue nil
657+
end
650658
end
651659
end
652660

lib/fluent/plugin/s3_compressor_gzip_command.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ def content_type
1919
end
2020

2121
def compress(chunk, tmp)
22+
if @buffer_compressed_type == :gzip
23+
chunk.write_to(tmp, compressed: @buffer_compressed_type)
24+
return
25+
end
26+
2227
chunk_is_file = @buffer_type == 'file'
2328
path = if chunk_is_file
2429
chunk.path

lib/fluent/plugin/s3_compressor_zstd.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ def content_type
2525
end
2626

2727
def compress(chunk, tmp)
28+
if @buffer_compressed_type == :zstd
29+
chunk.write_to(tmp, compressed: @buffer_compressed_type)
30+
return
31+
end
32+
2833
compressed = Zstd.compress(chunk.read, level: @compress_config.level)
2934
tmp.write(compressed)
3035
rescue => e

0 commit comments

Comments
 (0)