Uploaded image for project: 'Flume'
  1. Flume
  2. FLUME-3308

TailDirSource will write an empty position json file

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Critical
    • Resolution: Unresolved
    • 1.8.0
    • None
    • Sinks+Sources
    • None
    • Flume 1.8, TailDirSource

    Description

      We found TailDirSource has a critical issue  while writing position json file:

      1.In the "process" method, existingInodes.clear() then  existingInodes.addAll() is not  safe, in positionWriter thread will read an empty existingInodes  with no lock ( just after clear() executed and addAll() method not called yet), this will cause an empty json string.

      2.The FileWriter is not atomic, the position json file is over 5M in our case(which is big), after we fix the above issue, we still read an empty position json file occasionally.

      If flume was restarted and read an empty position json file, flume will tail all files from begining, which is critical!

      So we make a little change : 

      1. Add lock for existingInodes list,  and in positionWriter thread  we make a copy of existingInodes everytime.
      2. We replace FileWriter with an AtomicFileWriter.

      Later i will make a PR to share this.

       

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              dixingxing@yeah.net Xingxing Di
              Votes:
              1 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 20m
                  20m