Dawid Weiss created LUCENE-8663:
-----------------------------------

             Summary: NRTCachingDirectory.slowFileExists may open a file while 
it's inaccessible
                 Key: LUCENE-8663
                 URL: https://issues.apache.org/jira/browse/LUCENE-8663
             Project: Lucene - Core
          Issue Type: Bug
            Reporter: Dawid Weiss
            Assignee: Dawid Weiss
             Fix For: master (9.0)


This build:
https://builds.apache.org/job/Lucene-Solr-NightlyTests-master/1761/consoleText

failed with the following stack trace:
{code}
FAILED:  org.apache.lucene.util.TestOfflineSorter.testThreadSafety

Error Message:
Captured an uncaught exception in thread: Thread[id=2665, name=Thread-2493, 
state=RUNNABLE, group=TGRP-TestOfflineSorter]

Stack Trace:
com.carrotsearch.randomizedtesting.UncaughtExceptionError: Captured an uncaught 
exception in thread: Thread[id=2665, name=Thread-2493, state=RUNNABLE, 
group=TGRP-TestOfflineSorter]
Caused by: java.lang.RuntimeException: java.nio.file.AccessDeniedException: 
Can't open a file still open for writing: unsorted_tmp_0.tmp
        at __randomizedtesting.SeedInfo.seed([972EEC94E272C842]:0)
        at 
org.apache.lucene.util.TestOfflineSorter$2.run(TestOfflineSorter.java:271)
Caused by: java.nio.file.AccessDeniedException: Can't open a file still open 
for writing: unsorted_tmp_0.tmp
        at 
org.apache.lucene.store.ByteBuffersDirectory$FileEntry.openInput(ByteBuffersDirectory.java:250)
        at 
org.apache.lucene.store.ByteBuffersDirectory.openInput(ByteBuffersDirectory.java:222)
        at 
org.apache.lucene.store.NRTCachingDirectory.slowFileExists(NRTCachingDirectory.java:292)
        at 
org.apache.lucene.store.NRTCachingDirectory.createTempOutput(NRTCachingDirectory.java:266)
        at 
org.apache.lucene.store.MockDirectoryWrapper.createTempOutput(MockDirectoryWrapper.java:697)
        at 
org.apache.lucene.util.TestOfflineSorter.checkSort(TestOfflineSorter.java:183)
        at 
org.apache.lucene.util.TestOfflineSorter.access$100(TestOfflineSorter.java:49)
        at 
org.apache.lucene.util.TestOfflineSorter$2.run(TestOfflineSorter.java:267)
{code}

The problem in slowFileExists is that it probes for file existence by trying to 
open it in a directory. We don't allow opening files that are still open by 
another thread (for writing), hence the exception thrown is 
AccessDeniedException. 

I couldn't reproduce the problem with the same seed. Takes some luck to hit the 
right scenario in a multi-threaded run.

The contract for {{Directory.fileLength}} is less strict so a straightforward 
patch is to use that instead. 





--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to