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

Michael Busch commented on LUCENE-743:
--------------------------------------

>   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

So if 'b' in your example is a MultiSegmentReader, then the reopen() call 
triggered from MultiReader.reopen() would close old readers, because it owns 
them, 
thus 'bc' wouldn't work anymore. So it depends on the caller of 
MultiSegmentReader.reopen() whether or not to close the subreaders. I think 
this 
is kind of messy. Well instead of reopen() we could add 
reopen(boolean closeOldReaders), but then...

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

... is actually easy enough as you pointed out, so that the extra complexity is 
not 
really worth it IMO.

> In general i think the safest thing to do is for reopen to never close.  

So yes, I agree.

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

I'm not sure if the code would become cleaner if we did that. Sometimes a 
SegmentReader would then have to return a MultiSegmentReader instance and vice
versa. So we'd probably have to duplicate some of the code in these two classes.


> 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