commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pascal Schumacher (JIRA)" <j...@apache.org>
Subject [jira] [Closed] (IO-398) listener.fileRotated() will be invoked more than one time in a real rotate activity
Date Sun, 23 Apr 2017 09:35:04 GMT

     [ 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)

Mime
View raw message