[ 
https://issues.apache.org/jira/browse/FLUME-2978?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Attila Simon resolved FLUME-2978.
---------------------------------
    Resolution: Duplicate

> File descriptor leaks in TaildirSource
> --------------------------------------
>
>                 Key: FLUME-2978
>                 URL: https://issues.apache.org/jira/browse/FLUME-2978
>             Project: Flume
>          Issue Type: Bug
>          Components: Sinks+Sources
>    Affects Versions: v1.7.0
>            Reporter: Kun Liu
>
> TaildirSource creates ReliableTaildirEventReader object in start() method,  
> and the constructor of ReliableTaildirEventReader will try to open matched 
> files in updateTailFiles(). However, If the flume process has no permission 
> to some matched files, then the updateTailFiles() method throws IOException 
> and interrupts the creation of ReliableTaildirEventReader object. The 
> following logs show the opening of some matched files and the exception 
> thrown when try to open file with no permission.
> ------------logs--------------
> 25 Aug 2016 12:50:28,337 INFO  [lifecycleSupervisor-1-0] 
> (org.apache.flume.source.taildir.ReliableTaildirEventReader.openFile:294)  - 
> Opening file: /home/work/quota/test.2016-06-27-121958, inode: 91668538, pos: 0
> 25 Aug 2016 12:50:28,337 INFO  [lifecycleSupervisor-1-0] 
> (org.apache.flume.source.taildir.ReliableTaildirEventReader.openFile:294)  - 
> Opening file: /home/work/quota/test.2016-06-27-111458, inode: 91668558, pos: 0
> 25 Aug 2016 12:50:28,337 INFO  [lifecycleSupervisor-1-0] 
> (org.apache.flume.source.taildir.ReliableTaildirEventReader.openFile:294)  - 
> Opening file: /home/work/quota/test.2016-06-27-080458, inode: 91668536, pos: 0
> 25 Aug 2016 12:50:28,338 INFO  [lifecycleSupervisor-1-0] 
> (org.apache.flume.source.taildir.ReliableTaildirEventReader.openFile:294)  - 
> Opening file: /home/work/quota/test.2016-06-27-140958, inode: 91668655, pos: 0
> 25 Aug 2016 12:50:28,338 ERROR [lifecycleSupervisor-1-0] 
> (org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run:253)  - 
> Unable to start PollableSourceRunner: { source:Taildir source: { 
> positionFile: /home/work/taildir_position.json, skipToEnd: false, 
> byteOffsetHeader: false, idleTimeout: 120000, writePosInterval: 3000 } 
> counterGroup:{ name:null counters:{} } } - Exception follows.
> org.apache.flume.FlumeException: Failed opening file: 
> /home/work/quota/test.2016-06-27-140958
>         at 
> org.apache.flume.source.taildir.ReliableTaildirEventReader.openFile(ReliableTaildirEventReader.java:297)
>         at 
> org.apache.flume.source.taildir.ReliableTaildirEventReader.updateTailFiles(ReliableTaildirEventReader.java:260)
>         at 
> org.apache.flume.source.taildir.ReliableTaildirEventReader.<init>(ReliableTaildirEventReader.java:94)
>         at 
> org.apache.flume.source.taildir.ReliableTaildirEventReader.<init>(ReliableTaildirEventReader.java:48)
>         at 
> org.apache.flume.source.taildir.ReliableTaildirEventReader$Builder.build(ReliableTaildirEventReader.java:361)
>         at 
> org.apache.flume.source.taildir.TaildirSource.start(TaildirSource.java:100)
>         at 
> org.apache.flume.source.PollableSourceRunner.start(PollableSourceRunner.java:72)
>         at 
> org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:251)
>         at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
>         at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
>         at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown
>  Source)
>         at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown
>  Source)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
>         at java.lang.Thread.run(Unknown Source)
> Caused by: java.io.FileNotFoundException: 
> /home/work/quota/test.2016-06-27-140958 (Permission denied)
>         at java.io.RandomAccessFile.open(Native Method)
>         at java.io.RandomAccessFile.<init>(Unknown Source)
>         at org.apache.flume.source.taildir.TailFile.<init>(TailFile.java:60)
>         at 
> org.apache.flume.source.taildir.ReliableTaildirEventReader.openFile(ReliableTaildirEventReader.java:295)
>         ... 14 more
> ------------logs--------------
> As the creation of ReliableTaildirEventReader is interrupted, the 
> TaildirSource catches the IOException and throws FlumeException in start() 
> method, but the opened files are not closed, which leads to the leak of file 
> descriptors. As time goes by,  the PollableSourceRunner keeps starting 
> TaildirSource, and the number of opened files in flume process exceeds the 
> upper limit, then the 'Too many open files' error occurs.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to