lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Hoss Man (JIRA)" <>
Subject [jira] Commented: (LUCENE-743) IndexReader.reopen()
Date Mon, 13 Aug 2007 06:17:43 GMT


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:
>             Project: Lucene - Java
>          Issue Type: Improvement
>          Components: Index
>            Reporter: Otis Gospodnetic
>            Assignee: Michael Busch
>            Priority: Minor
>             Fix For: 2.3
>         Attachments:, lucene-743.patch, lucene-743.patch, lucene-743.patch,,
> 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:
For additional commands, e-mail:

View raw message