Method: Fluent::Plugin::Buffer#backup

Defined in:
lib/fluent/plugin/buffer.rb

#backup(chunk_unique_id) ⇒ Object



911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
# File 'lib/fluent/plugin/buffer.rb', line 911

def backup(chunk_unique_id)
  unique_id = dump_unique_id_hex(chunk_unique_id)

  if @disable_chunk_backup
    log.warn "disable_chunk_backup is true. #{unique_id} chunk is not backed up."
    return
  end

  safe_owner_id = owner.plugin_id.gsub(/[ "\/\\:;|*<>?]/, '_')
  backup_base_dir = system_config.root_dir || DEFAULT_BACKUP_DIR
  backup_file = File.join(backup_base_dir, 'backup', "worker#{fluentd_worker_id}", safe_owner_id, "#{unique_id}.log")
  backup_dir = File.dirname(backup_file)

  log.warn "bad chunk is moved to #{backup_file}"
  FileUtils.mkdir_p(backup_dir, mode: system_config.dir_permission || Fluent::DEFAULT_DIR_PERMISSION) unless Dir.exist?(backup_dir)
  File.open(backup_file, 'ab', system_config.file_permission || Fluent::DEFAULT_FILE_PERMISSION) { |f| yield f }
end