Ilya Basin created IO-889:
-----------------------------

             Summary: Tailer.close() does not guarantee file close
                 Key: IO-889
                 URL: https://issues.apache.org/jira/browse/IO-889
             Project: Commons IO
          Issue Type: Bug
          Components: Utilities
    Affects Versions: 2.21.0
         Environment: Windows
            Reporter: Ilya Basin
         Attachments: TailerCloseTest.java

On Windows after Tailer.close() the watched file cannot be moved or deleted 
immediately and Tailer does not provide any additional means to wait for the 
submitted executor task. I believe that when no custom executor or thread is 
used there still should be a way to wait with desired timeout. I understand 
that close() isn't the perfect method for waiting.

My current workaround is to avoid using executors and just create 
java.lang.Thread and call Thread.join() afterwards.

Attached a test case: [^TailerCloseTest.java]

^Expected: test succeeds^

^Actual: Files.delete() fails^

 
{code:java}
java.nio.file.FileSystemException: 
C:\Users\basin\AppData\Local\Temp\TailerTestFile551954280413046718.log: The 
process cannot access the file because it is being used by another process.
        at 
java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:92)
       at 
java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)
        at 
java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:108)
        at 
java.base/sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:274)
        at 
java.base/sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:105)
  at java.base/java.nio.file.Files.delete(Files.java:1142)        at 
org.apache.commons.io.input.TailerCloseTest.testCloseTailer(TailerCloseTest.java:60)
 at java.base/java.lang.reflect.Method.invoke(Method.java:566)   at 
java.base/java.util.ArrayList.forEach(ArrayList.java:1541)   at 
java.base/java.util.ArrayList.forEach(ArrayList.java:1541) {code}
 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to