Sha256: 41d827cd1a3ef500271338181657cbc4691004c9835aa91db69df0b15e809b09

Contents?: true

Size: 1007 Bytes

Versions: 3

Compression:

Stored size: 1007 Bytes

Contents

module Fluent::Plugin
  class S3Output
    class ZstdCompressor < Compressor
      S3Output.register_compressor('zstd', self)

      config_section :compress, param_name: :compress_config, init: true, multi: false do
        desc "Compression level for zstd (1-22)"
        config_param :level, :integer, default: 3
      end

      def initialize(opts = {})
        super
        require 'zstd-ruby'
      rescue LoadError => e
        log.error "failed to load zstd-ruby gem. You need to manually install 'zstd-ruby' gem to use 'zstd'.", error: e.message
        raise Fluent::ConfigError, "failed to load 'zstd-ruby' gem"
      end

      def ext
        'zst'.freeze
      end

      def content_type
        'application/x-zst'.freeze
      end

      def compress(chunk, tmp)
        compressed = Zstd.compress(chunk.read, level: @compress_config.level)
        tmp.write(compressed)
      rescue => e
        log.warn "zstd compression failed: #{e.message}"
        raise
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
fluent-plugin-s3-1.8.3 lib/fluent/plugin/s3_compressor_zstd.rb
fluent-plugin-s3-1.8.2 lib/fluent/plugin/s3_compressor_zstd.rb
fluent-plugin-s3-1.8.1 lib/fluent/plugin/s3_compressor_zstd.rb