[ 
https://issues.apache.org/jira/browse/LUCENE-743?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12519377
 ] 

Hoss Man commented on LUCENE-743:
---------------------------------


(note: i haven't looked at the latest patch in detail, just commenting on the 
comments)

One key problem i see with automatically closing things in reopen is 
MultiReader: it's perfectly legal to do something like this psuedocode...

   IndexReader a, b, c = ...
   MultiReader ab = new MultiReader({a, b})
   MultiReader bc = new MultiReader({b, c})
   ...b changes on disk...
   ab.reopen(); // this shouldn't affect bc;

one possibility would be for the semantics of reopen to close old readers only 
if it completely owns them; ie: MultiReader should never close anything in 
reopen, MultiSegmentReader should close all of the subreaders since it opened 
them in the first place ... things get into a grey area with SegementReader 
though.

In general i think the safest thing to do is for reopen to never close.  
Yonik's comment showcases one of the most compelling reasons why it can be 
important for clients to be able to keep using an old IndexReader instance, and 
it's easy enough for clients that want the old one closed to do something 
like...

   IndexReader r = ...
   ...
   IndexReader tmp = r.reopen();
   if (tmp != r) r.close(); 
   r = tmp;
   ...


(one question that did jump out at me while greping the patch for the where old 
readers were being closed: why is the meat of reopen still in "IndexReader" 
with a "if (reader instanceof SegmentReader)" style logic in it?  can't the 
different reopen mechanisms be refactored down into SegmentReader and 
MultiSegmentReader respectively?  shouldn't the default impl of IndexReader 
throw an UnsuppportedOperationException?)

> IndexReader.reopen()
> --------------------
>
>                 Key: LUCENE-743
>                 URL: https://issues.apache.org/jira/browse/LUCENE-743
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: Index
>            Reporter: Otis Gospodnetic
>            Assignee: Michael Busch
>            Priority: Minor
>             Fix For: 2.3
>
>         Attachments: IndexReaderUtils.java, lucene-743.patch, 
> lucene-743.patch, lucene-743.patch, MyMultiReader.java, MySegmentReader.java
>
>
> This is Robert Engels' implementation of IndexReader.reopen() functionality, 
> as a set of 3 new classes (this was easier for him to implement, but should 
> probably be folded into the core, if this looks good).

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