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