Lantao Jin created IO-398:
-----------------------------
Summary: 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
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 is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira