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

Pascal Schumacher closed IO-398.
--------------------------------
    Resolution: Duplicate

> listener.fileRotated() will be invoked more than one time in a real rotate 
> activity
> -----------------------------------------------------------------------------------
>
>                 Key: IO-398
>                 URL: https://issues.apache.org/jira/browse/IO-398
>             Project: Commons IO
>          Issue Type: Bug
>    Affects Versions: 2.4
>            Reporter: Lantao Jin
>         Attachments: IO-398.patch, IO398_with_ut.patch
>
>
>        When Tailer considers file rotation is occurred, 
> listener.fileRotated() will be execute, and file will re-open by "reader = 
> new RandomAccessFile(file, RAF_MODE);". However, the new file may not be 
> created yet, FileNotFoundException would be caught and while loop would be 
> executed again and again until the new file is actually created, which cause 
> listener.fileRotated() triggered repeatedly. 
> This is the piece of code causing the problem:
> {noformat} 
> while (getRun()) {
>     final boolean newer = isFileNewer(file, last); // IO-279, must be done 
> first
>     // Check the file length to see if it was rotated
>     final long length = file.length();
>     if (length < position) {
>         // File was rotated
>         listener.fileRotated();
>         // Reopen the reader after rotation
>         try {
>             // Ensure that the old file is closed iff we re-open it 
> successfully
>             final RandomAccessFile save = reader;
>             reader = new RandomAccessFile(file, RAF_MODE);
>             /* some code */
>         } catch (final FileNotFoundException e) {
>             // in this case we continue to use the previous reader and 
> position values
>             listener.fileNotFound();
>         }
>         continue;
> {noformat}
>       While condition checkes can be deployed in listener.fileRotated() to 
> correct the sematic of fileRotate, it is better to prevent multiple 
> invocation of listener.fileRotated() on this issue.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to