Skip to content

Commit 904a043

Browse files
committed
fix: Add proper compression level handling to ZstdCompressor
Signed-off-by: ddukbg <wowrebong@gmail.com>
1 parent 7e28a32 commit 904a043

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

lib/fluent/plugin/out_s3.rb

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -632,20 +632,32 @@ def compress(chunk, tmp)
632632
end
633633

634634
class ZstdCompressor < Compressor
635+
require 'zstd-ruby'
636+
637+
DEFAULT_LEVEL = 3
638+
639+
def initialize(options = {})
640+
@level = (options.is_a?(Hash) && options[:level]) || DEFAULT_LEVEL
641+
end
642+
635643
def ext
636644
'zst'.freeze
637645
end
638-
646+
639647
def content_type
640648
'application/x-zst'.freeze
641649
end
642-
650+
643651
def compress(chunk, tmp)
644-
compressed_data = Zstd.compress(chunk.read, level: @level)
645-
tmp.write(compressed_data)
646-
rescue => e
647-
log.warn "zstd compression failed: #{e.message}"
648-
raise e
652+
begin
653+
data = chunk.read.gsub(/\r\n/, "\n").force_encoding('UTF-8')
654+
compressed = Zstd.compress(data, level: @level)
655+
tmp.binmode
656+
tmp.write(compressed)
657+
rescue => e
658+
log.warn "zstd compression failed: #{e.message}"
659+
raise e
660+
end
649661
end
650662
end
651663

0 commit comments

Comments
 (0)