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

Uwe Schindler reopened LUCENE-1453:
-----------------------------------


After some testing, I found out, that this issue is not fixed. The test 
"TestIndexReaderReopen" fails very often, if all occurences of 
FSDirectory.getDirectory() are replaced by FSDirectory.open() in 
IndexReader/IndexWriter and DirectoryReader.
open() returns non refcounting single-use directorys that can be closed only 
one time. If readers on top of this (using the now-deprecated File/String 
IndexReader.open()) are reopened the directories are sometimes closed false.
I was hoping, LUCENE-1651 fixes this, but this is not so.

There are two possibilities to fix this:
For both, the first step is to remove the whole closeDir stuff from all 
IndexReaders and do not close it from within indexReader.
Then there are two solutions:
- As FSDir.open() only returns subclasses of FSDir that have a no-op close() 
method, no closing is required. So we can just leave them open
- Another possibility is to wrap all readers opened by IR.open() with 
File/String param by an (deprecated, package private) FilterIndexReader that 
handles closing the directory in close() and reopen() in a proper way. This is 
much simplier than doing it inside the DirectoryReader reopen stuff. The small 
overhead in passing through FilterIndexReader only affects people using the 
deprecated File/String open() methods. Users, directly using FSDir & Co. have 
no slowdown.

> When reopen returns a new IndexReader, both IndexReaders may now control the 
> lifecycle of the underlying Directory which is managed by reference counting
> ---------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: LUCENE-1453
>                 URL: https://issues.apache.org/jira/browse/LUCENE-1453
>             Project: Lucene - Java
>          Issue Type: Bug
>    Affects Versions: 2.4
>            Reporter: Mark Miller
>            Assignee: Michael McCandless
>            Priority: Minor
>             Fix For: 2.4.1, 2.9
>
>         Attachments: LUCENE-1453.patch, LUCENE-1453.patch, LUCENE-1453.patch
>
>
> Rough summary. Basically, FSDirectory tracks references to FSDirectory and 
> when IndexReader.reopen shares a Directory with a created IndexReader and 
> closeDirectory is true, FSDirectory's ref management will see two decrements 
> for one increment. You can end up getting an AlreadyClosed exception on the 
> Directory when the IndexReader is open.
> I have a test I'll put up. A solution seems fairly straightforward (at least 
> in what needs to be accomplished).

-- 
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