class Fluent::Plugin::FileOutput
def find_filepath_available(path_with_placeholder, with_lock: false) # for non-append
def find_filepath_available(path_with_placeholder, with_lock: false) # for non-append raise "BUG: index placeholder not found in path: #{path_with_placeholder}" unless path_with_placeholder.index('_**') i = 0 dir_path = locked = nil while true path = path_with_placeholder.sub('_**', "_#{i}") i += 1 next if File.exist?(path) if with_lock dir_path = path + '.lock' locked = Dir.mkdir(dir_path) rescue false next unless locked # ensure that other worker doesn't create a file (and release lock) # between previous File.exist? and Dir.mkdir next if File.exist?(path) end break end yield path ensure if dir_path && locked && Dir.exist?(dir_path) Dir.rmdir(dir_path) rescue nil end end