Method: Fluent::Plugin::TailInput::PositionFile#load

Defined in:
lib/fluent/plugin/in_tail/position_file.rb

#load(existing_targets = nil) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/fluent/plugin/in_tail/position_file.rb', line 68

def load(existing_targets = nil)
  compact(existing_targets)

  map = {}
  @file_mutex.synchronize do
    @file.pos = 0

    @file.each_line do |line|
      m = POSITION_FILE_ENTRY_REGEX.match(line)
      next if m.nil?

      path = m[1]
      pos = m[2].to_i(16)
      ino = m[3].to_i(16)
      seek = @file.pos - line.bytesize + path.bytesize + 1
      if @follow_inodes
        map[ino] = FilePositionEntry.new(@file, @file_mutex, seek, pos, ino)
      else
        map[path] = FilePositionEntry.new(@file, @file_mutex, seek, pos, ino)
      end
    end
  end

  @map = map
end