[ 
https://issues.apache.org/jira/browse/LUCENE-6745?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Michael McCandless reopened LUCENE-6745:
----------------------------------------

Reopening this, I think we should revert it:

I dug into this test failure: 
http://jenkins.thetaphi.de/job/Lucene-Solr-5.x-MacOSX/2604/

{noformat}
[junit4] Suite: org.apache.lucene.store.TestMultiMMap
   [junit4]   2> aug 21, 2015 9:50:09 AM 
com.carrotsearch.randomizedtesting.RandomizedRunner$QueueUncaughtExceptionsHandler
 uncaughtException
   [junit4]   2> WARNING: Uncaught exception in thread: 
Thread[Thread-428,5,TGRP-TestMultiMMap]
   [junit4]   2> java.lang.AssertionError: java.io.EOFException: seek past EOF: 
MMapIndexInput(path="/Users/jenkins/workspace/Lucene-Solr-5.x-MacOSX/lucene/build/core/test/J1/temp/lucene.store.TestMultiMMap_F4E5EB2F2F531D5D-001/tempDir-005/randombytes")
   [junit4]   2>        at 
__randomizedtesting.SeedInfo.seed([F4E5EB2F2F531D5D]:0)
   [junit4]   2>        at 
org.apache.lucene.store.ByteBufferIndexInput.clone(ByteBufferIndexInput.java:259)
   [junit4]   2>        at 
org.apache.lucene.store.ByteBufferIndexInput$MultiBufferImpl.clone(ByteBufferIndexInput.java:487)
   [junit4]   2>        at 
org.apache.lucene.store.BaseDirectoryTestCase$1.run(BaseDirectoryTestCase.java:1200)
   [junit4]   2> Caused by: java.io.EOFException: seek past EOF: 
MMapIndexInput(path="/Users/jenkins/workspace/Lucene-Solr-5.x-MacOSX/lucene/build/core/test/J1/temp/lucene.store.TestMultiMMap_F4E5EB2F2F531D5D-001/tempDir-005/randombytes")
   [junit4]   2>        at 
org.apache.lucene.store.ByteBufferIndexInput.seek(ByteBufferIndexInput.java:174)
   [junit4]   2>        at 
org.apache.lucene.store.ByteBufferIndexInput$MultiBufferImpl.seek(ByteBufferIndexInput.java:504)
   [junit4]   2>        at 
org.apache.lucene.store.ByteBufferIndexInput.clone(ByteBufferIndexInput.java:257)
   [junit4]   2>        ... 2 more
   [junit4]   2> 
   [junit4]   2> NOTE: reproduce with: ant test  -Dtestcase=TestMultiMMap 
-Dtests.method=testCloneThreadSafety -Dtests.seed=F4E5EB2F2F531D5D 
-Dtests.slow=true -Dtests.locale=da -Dtests.timezone=Europe/Zurich 
-Dtests.asserts=true -Dtests.file.encoding=UTF-8
{noformat}

The failure is easy to reproduce, and indeed MMap's IndexInput.clone is not 
thread safe.

But thinking about it more ... I think this is too much to expect from 
Directory impls.

Instead, I think the bug is in BKDDVFormat, because it's doing "real stuff" 
with the original IndexInput it opened, instead of always using clones to do so 
...

> RAMInputStream.clone is not thread safe
> ---------------------------------------
>
>                 Key: LUCENE-6745
>                 URL: https://issues.apache.org/jira/browse/LUCENE-6745
>             Project: Lucene - Core
>          Issue Type: Bug
>            Reporter: Michael McCandless
>            Assignee: Michael McCandless
>             Fix For: Trunk, 5.4
>
>         Attachments: LUCENE-6745.patch
>
>
> This took some time to track down ... it's the root cause of the RangeTree 
> failures that [~steve_rowe] found at 
> https://issues.apache.org/jira/browse/LUCENE-6697?focusedCommentId=14696999&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14696999
> The problem happens when one thread is using the original IndexInput 
> (RAMInputStream) from a RAMDirectory, but other threads are also cloning  
> that IndexInput at the same time.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to