paulirwin opened a new issue, #1233:
URL: https://github.com/apache/lucenenet/issues/1233

   ### Is there an existing issue for this?
   
   - [x] I have searched the existing issues
   
   ### Describe the bug
   
   ## Description
   
   `TestDirectoryReaderReopen.TestThreadSafety` intermittently fails with a 
`FileNotFoundException` when concurrent reader threads attempt to open segment 
files that have been deleted by concurrent index modifications.
   
   ## Failure Details
   
   **Test:** `Lucene.Net.Index.TestDirectoryReaderReopen.TestThreadSafety`
   
   ## Root Cause
   
   The test spawns 20-40 threads that concurrently:
   1. Call `DirectoryReader.OpenIfChanged()` to refresh readers
   2. Modify the index by adding documents (which triggers merges)
   
   A race condition occurs when:
   1. Thread A reads segment info and discovers segment file `_8.cfe` exists
   2. Thread B's merge/commit operation deletes that segment
   3. Thread A attempts to open `_8.cfe` and gets `FileNotFoundException`
   
   ## Observed In
   
   - GitHub Actions run: 
https://github.com/apache/lucenenet/actions/runs/20665128917/job/59335657279
   - Platform: Ubuntu 24.04, .NET 10.0, x64, Release
   - Note: The same test passed on Windows in the same CI run
   
   ### Expected Behavior
   
   _No response_
   
   ### Steps To Reproduce
   
   _No response_
   
   ### Exceptions (if any)
   
   _No response_
   
   ### Lucene.NET Version
   
   _No response_
   
   ### .NET Version
   
   _No response_
   
   ### Operating System
   
   _No response_
   
   ### Anything else?
   
   Raw error log:
   
   ```
     Failed Lucene.Net.Index.TestDirectoryReaderReopen.TestThreadSafety [1 s]
     Error Message:
      Error occurred in thread :
   _8.cfe in dir=RAMDirectory@247c787 
lockFactory=Lucene.Net.Store.SingleInstanceLockFactory
   (Test: Lucene.Net.Index.TestDirectoryReaderReopen.TestThreadSafety)
   
   To reproduce this test result:
   
   Option 1:
   
    Apply the following assembly-level attributes:
   
   [assembly: 
Lucene.Net.Util.RandomSeed("0xee1e2c83dd9ff3e5:0x8a5316feb9c2a929")]
   [assembly: NUnit.Framework.SetCulture("en-FK")]
   
   Option 2:
   
    Use the following .runsettings file:
   
   <RunSettings>
     <TestRunParameters>
       <Parameter name="tests:seed" 
value="0xee1e2c83dd9ff3e5:0x8a5316feb9c2a929" />
       <Parameter name="tests:culture" value="en-FK" />
     </TestRunParameters>
   </RunSettings>
   
   Option 3:
   
    Create the following lucene.testsettings.json file somewhere between the 
test assembly and the root of your drive:
   
   {
     "tests": {
        "seed": "0xee1e2c83dd9ff3e5:0x8a5316feb9c2a929",
        "culture": "en-FK"
     }
   }
   
   Fixture Test Values
   =================
   
    Random Seed:           0xee1e2c83dd9ff3e5:0x8a5316feb9c2a929
    Culture:               en-FK
    Time Zone:             (UTC-06:00) Central Time (Tegucigalpa)
    Default Codec:         Lucene42 (Lucene42RWCodec)
    Default Similarity:    RandomSimilarityProvider(queryNorm=True,coord=yes): 
{id=DFR I(n)L3(800), field1=DFR I(ne)B2, field2=DFR I(F)L2, field3=DFR I(n)B1, 
field4=DFR I(ne)B1}
   
   System Properties
   =================
   
    Nightly:               False
    Weekly:                False
    Slow:                  False
    Awaits Fix:            False
    Directory:             random
    Verbose:               False
    Random Multiplier:     1
   
     Stack Trace:
        at Lucene.Net.Index.TestDirectoryReaderReopen.TestThreadSafety() in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net.Tests/Index/TestDirectoryReaderReopen.cs:line
 313
   
   1)    at Lucene.Net.Index.TestDirectoryReaderReopen.TestThreadSafety() in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net.Tests/Index/TestDirectoryReaderReopen.cs:line
 313
   
   
     Standard Output Messages:
    System.IO.FileNotFoundException: _8.cfe in dir=RAMDirectory@247c787 
lockFactory=Lucene.Net.Store.SingleInstanceLockFactory
       at Lucene.Net.Store.MockDirectoryWrapper.OpenInput(String name, 
IOContext context) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net.TestFramework/Store/MockDirectoryWrapper.cs:line
 802
       at Lucene.Net.Store.CompoundFileDirectory.ReadEntries(IndexInputSlicer 
handle, Directory dir, String name) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Store/CompoundFileDirectory.cs:line
 170
    --- End of stack trace from previous location ---
       at Lucene.Net.Store.CompoundFileDirectory.ReadEntries(IndexInputSlicer 
handle, Directory dir, String name) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Store/CompoundFileDirectory.cs:line
 143
       at Lucene.Net.Index.StandardDirectoryReader.DoOpenFromCommit(IndexCommit 
commit) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Index/StandardDirectoryReader.cs:line
 402
       at Lucene.Net.Index.StandardDirectoryReader.DoOpenNoWriter(IndexCommit 
commit) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Index/StandardDirectoryReader.cs:line
 397
       at Lucene.Net.Index.StandardDirectoryReader.DoOpenIfChanged(IndexCommit 
commit) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Index/StandardDirectoryReader.cs:line
 335
       at Lucene.Net.Index.StandardDirectoryReader.DoOpenIfChanged() in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Index/StandardDirectoryReader.cs:line
 320
       at Lucene.Net.Index.DirectoryReader.OpenIfChanged(DirectoryReader 
oldReader) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Index/DirectoryReader.cs:line
 174
       at 
Lucene.Net.Index.TestDirectoryReaderReopen.ReaderThreadTaskAnonymousClass.Run() 
in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net.Tests/Index/TestDirectoryReaderReopen.cs:line
 397
       at Lucene.Net.Index.TestDirectoryReaderReopen.ReaderThread.Run() in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net.Tests/Index/TestDirectoryReaderReopen.cs:line
 504
    System.IO.DirectoryNotFoundException: _5.cfe in dir=RAMDirectory@247c787 
lockFactory=Lucene.Net.Store.SingleInstanceLockFactory
       at Lucene.Net.Store.MockDirectoryWrapper.OpenInput(String name, 
IOContext context) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net.TestFramework/Store/MockDirectoryWrapper.cs:line
 802
       at Lucene.Net.Store.CompoundFileDirectory.ReadEntries(IndexInputSlicer 
handle, Directory dir, String name) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Store/CompoundFileDirectory.cs:line
 170
    --- End of stack trace from previous location ---
       at Lucene.Net.Store.CompoundFileDirectory.ReadEntries(IndexInputSlicer 
handle, Directory dir, String name) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Store/CompoundFileDirectory.cs:line
 143
       at Lucene.Net.Index.StandardDirectoryReader.DoOpenFromCommit(IndexCommit 
commit) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Index/StandardDirectoryReader.cs:line
 402
       at Lucene.Net.Index.StandardDirectoryReader.DoOpenNoWriter(IndexCommit 
commit) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Index/StandardDirectoryReader.cs:line
 397
       at Lucene.Net.Index.StandardDirectoryReader.DoOpenIfChanged(IndexCommit 
commit) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Index/StandardDirectoryReader.cs:line
 335
       at Lucene.Net.Index.StandardDirectoryReader.DoOpenIfChanged() in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Index/StandardDirectoryReader.cs:line
 320
       at Lucene.Net.Index.DirectoryReader.OpenIfChanged(DirectoryReader 
oldReader) in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net/Index/DirectoryReader.cs:line
 174
       at 
Lucene.Net.Index.TestDirectoryReaderReopen.ReaderThreadTaskAnonymousClass.Run() 
in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net.Tests/Index/TestDirectoryReaderReopen.cs:line
 397
       at Lucene.Net.Index.TestDirectoryReaderReopen.ReaderThread.Run() in 
/home/runner/work/lucenenet/lucenenet/src/Lucene.Net.Tests/Index/TestDirectoryReaderReopen.cs:line
 504
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to