Fluentd

How to Write Buffer Plugin

TODO: Write

Methods

evacuate_chunk

You can override this method to add feature to evacuate chunks before clearing the queue when reaching the retry limit. See Buffer - Handling Successive Failures for details.

def evacuate_chunk(chunk)
  unless chunk.is_a?(Fluent::Plugin::Buffer::FileChunk)
    raise ArgumentError, "The chunk must be FileChunk, but it was #{chunk.class}."
  end

  backup_dir = File.join(backup_base_dir, 'buffer', safe_owner_id)
  FileUtils.mkdir_p(backup_dir, mode: system_config.dir_permission || Fluent::DEFAULT_DIR_PERMISSION) unless Dir.exist?(backup_dir)

  FileUtils.copy([chunk.path, chunk.meta_path], backup_dir)
  log.warn "chunk files are evacuated to #{backup_dir}.", chunk_id: dump_unique_id_hex(chunk.unique_id)
rescue => e
  log.error "unexpected error while evacuating chunk files.", error: e
end

Since v1.20.0, the base class decides which chunks to pass to this method by evacuate_limit_size. It counts the files directly under the directory used in the sample code above, so evacuate the chunk files to this directory. Since v1.20.0, evacuate_dir returns this directory. The base class subtracts only chunk.bytesize from the remaining capacity, so other files written by this method are not counted until the next evacuation. The base class ignores evacuate_limit_size if persistent? of the buffer plugin returns false.

results matching ""

    No results matching ""