[ https://issues.apache.org/jira/browse/LUCENE-743?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12533186 ]
Michael McCandless commented on LUCENE-743: ------------------------------------------- > > Actually if we went back to the sharing (not cloning) approach, > > could we insert a check for any writing operation against the > > re-opened reader that throws an exception if the original reader > > is not yet closed? > > Interesting, yes that should work in case we have two readers (the > original one and the re-opened one). But what happens if the user > calls reopen twice to get two re-opened instances back? Then there > would be three instances, and without cloning the two re-opened ones > would also share the same resources. Is this a desirable use case or > would it be okay to restrict reopen() so that it can only create one > new instance? Hmmm good point. Actually, we could allow more then one re-open call if we take the following approach: every time a cloned Reader "borrows" a reference to a sub-reader, it increments a counter (call it the "referrer count"). When the Reader is closed, it decrements the count (by 1) for each of the sub-readers. Then, any reader should refuse to do a writing operation if its "referrer" count is greater than 1, because it's being shared across more than one referrer. This way if you have a reader X and you did reopen to get Y and did reopen again to get Z then the shared sub-readers between X, Y and Z would not allow any write operations until 2 of the three had been closed. I think that would work? BTW this would also allow for very efficient "snapshots" during searching: keeping multiple readers "alive", each searching a different point-in-time commit of the index, because they would all share the underlying segment readers that they have in common. Vs cloning which would have to make many copies of each segment reader. > 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-take2.patch, > lucene-743.patch, lucene-743.patch, lucene-743.patch, MyMultiReader.java, > MySegmentReader.java, varient-no-isCloneSupported.BROKEN.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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]