[
https://issues.apache.org/jira/browse/LUCENE-743?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12532990
]
Hoss Man commented on LUCENE-743:
---------------------------------
Okay, read the patch. I'm on board with the need for Clonable now ... it's all
about isolation. if "r.reopen(false) == r" then the client is responsible for
recognizing that it's got the same instance and can make the judgement call
about reusing the instance or cloning depending on it's needs ... internally in
things like MultiReader we have to assume we need a clone for isolation.
Questions and comments...
1. CompoundFileReader, FieldsReader, IndexReader, and BitVector all have clone
methods where they silently catch and ignore CloneNotSupportedExceptions from
super.clone()... if we don't expect the exception to ever happen, we should
just let the exception propogate up the stack (there is no down side to
declaring that clone() throws CloneNotSupportedException). If we think the
exception might happen, but it's not a big deal if it does and we can ignore
it, then we should put a comment in the catch block to that effect. i'm not
clear which are the cases here.
2. i don't remember if the old patches had this issue as well, but having
"return new FilterIndexReader(reopened);" in FilterIndexReader doesn't really
help anyone using FilterIndexReader -- they're going to want an instance of
their own subclass. to meet the contract of FilterIndexReader, we should
implement all "abstract" methods and delegate to the inner reader - so in
theory do don't need a new instance of FIlterIndexReader, we could just return
in.reopen(closeold) ... my gut says it would be better to leave the method out
entirely so that the default impl which throws UnSupOpEx is used --- that way
subclasses who want to use reopen *must* define their own (instead of getting
confused when their filtering logic stops working after they reopen for the
first time)
3. instead of having an isClonable() method, why don't we just remove the
"implements Clonable" declaration from IndexReader and put it on the concrete
subclasses -- then use "instanceof Cloneable" to determine if something is
clonable? ... for that matter, the only place isCloneSupported is really used
is in IndexReader.clone where an exception is thrown if Clone is not supported
... subclasses which know they are Clonable don't need this from the base
class, subclasses which don't implement Clonable but are used in combination
with core classes whose reopen method requires it could be skiped by the caller
(since they don't implement Clonable) ..
4. javadocs frequently refer to "reopened successfully" and "refreshed
successfully" when what it really means is "reopen() returned a newer/fresher
reader" ... this may confuse people who are use to thinking of "successfully" a
"without error"
5. random thought: are their any synchronization issues we're missing here?
I'm wondering about the case where once thread calls reopen while another
thread is updating norms or deleting docs. is there any chance for
inconsistent state?
> 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
>
>
> 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]