[ 
https://issues.apache.org/jira/browse/LUCENE-2637?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12907569#action_12907569
 ] 

Michael McCandless commented on LUCENE-2637:
--------------------------------------------

For the record, the problem w/ the opto is that it pulls the "unique" 
FileChannel from the RandomAccessFile, positions it, and does non-positional 
reads.  This is not safe, because SimpleFSDir also does non-positional reads.  
So eg if a BG merge is running, invoking .copyBytes when merging the fields, 
and at the same time another thread is eg loading a stored doc from the same 
open file w/ SimpleFSDIr, they conflict because they are both relying on the 
stateful position of RAF.

NIOFSDir always does positional reads so it doesn't hit this.

But I agree we should pull the opto from 3x & trunk, open new issue to re-add 
it, only add it back to trunk once we have solid tests.  EG the new 
TestCopyBytes I added does not catch this thread-safety issue (but I think, 
though I didn't test, should catch the original corruption issue w/ the opto).

And, yes, we must now notify 3x/trunk users, who uses SimpleFSDir (because they 
are on windows or because they explicitly instantiated it) that they may have 
latent index corruption and should run CheckIndex.

> FSDirectory.copyBytes isn't safe for SimpleFSDirectory
> ------------------------------------------------------
>
>                 Key: LUCENE-2637
>                 URL: https://issues.apache.org/jira/browse/LUCENE-2637
>             Project: Lucene - Java
>          Issue Type: Bug
>          Components: Tests
>    Affects Versions: 3.1, 4.0
>            Reporter: Robert Muir
>            Assignee: Robert Muir
>         Attachments: LUCENE-2637.patch, LUCENE-2637.patch
>
>
> the copyBytes optimization from LUCENE-2574 is not safe for 
> SimpleFSDirectory, but works fine for NIOFSDirectory.
> With SimpleFSDirectory, the copyBytes optimization causes index corruption.
> see 
> http://www.lucidimagination.com/search/document/36d2dbfc691909d5/bug_triggered_by_testindexwriter_testrandomstoredfields
>  for background
> here are my steps to reproduce (most of the time, at least on windows):
> {noformat}
> 1. edit line 87 of TestIndexWriter to plugin the seed:
>     random = newRandom(3312389322103990899L);
> 2. edit line 5138 of TestIndexWriter to force SimpleFSDirectory:
>     Directory dir = new SimpleFSDirectory(index);
> 3. run this command:
>     ant clean test-core -Dtestcase=TestIndexWriter
> -Dtestmethod=testRandomStoredFields -Dtests.iter=10
> -Dtests.codec="MockVariableIntBlock(29)"
> {noformat}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


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

Reply via email to