So it seems like a cloned reader would share everything with the
previous reader, but these rules would be enforced:

  * If the old reader had pending changes (held the write lock) when
    it was cloned, it 1) transfers the write lock to the clone, 2)
    refuses any further changes to itself (freezes itself), 3)
    continues to reflect the pending changes, and 4) will not commit
    its changes to disk when it's closed.  Ie it freezes itself into
    a "point in time" snapshot, just not via an on-disk index.

  * If any changes (to deletions or norms) are done with the new
    reader, it then makes a private copy ("copy on write").  This
    would apply to reopen too, since clone & reopen share the same
    code; so this is an "improvement" over the current reopen
    semantics and we should fix the javadocs saying so.

It seems like the only reason to clone would be if you intend to
[further] change deletions or norms but still want to use the previous
reader w/ the unchanged deletions and norms, ie "snapshot" the
previous reader without going through disk as intermediary, right?

I think this is a reasonable use case.  Since an IndexReader can still
make changes (something I think we should eventually move away from,
but cannot, yet, because of the immediacy of deletions that
IndexReader offers), cloning is an important tool to let you make an
efficient "point in time" snapshot (without having to go through the
Directory).

If this makes sense, can you update the patch on LUCENE-1314 to
enforce these semantics?  I think we should get this in for 2.9?

Mike

Jason Rutherglen wrote:

Mike,

> needing a fast way to swap in your own deleted docs?

Yes, however it is necessary to have a new IndexReader as well from a "reopened" reader. So clone seems the best approach (unless there's a way I'm not seeing). The clone code is coming along, the norms test seems to pass. As long as similar rules as reopen are followed such as from the javadoc "The re-opened reader instance and the old instance might share the same resources. For this reason no index modification operations (e. g. deleteDocument(int), setNorm(int, String, byte)) should be performed using one of the readers until the old reader instance is closed. Otherwise, the behavior of the readers is undefined.".

I think the clone method javadoc should read "After cloning a reader, the original reader will throw exceptions on index modification operations (e. g. deleteDocument(int), setNorm(int, String, byte))". This way one may read from the original, but the cloned reader (new reader) may accept updates. This happens by way to automatically releasing a lock on clone (does this cause any unforseen problems?).

Jason

On Tue, Dec 16, 2008 at 7:00 AM, Michael McCandless <luc...@mikemccandless.com > wrote:

Jason,

Is your need for IndexReader.clone entirely driven by needing a fast way to swap in your own deleted docs?

Meaning, if you could plug in your own deleted docs to a reader (somehow), would you not use clone anymore?

Mike


Jason Rutherglen wrote:

Hello,

In trying to figure out the best way to have a system for realtime whereby the deletedDocs do not need to be saved there are two possible methods, 1) setting the DocIdBitSet manually (which breaks the saving and things, but does not require doing norms cloning), or 2) implementing IndexReader.clone
which requires deletedDocs and norms "copy on write".

The discussion about reopen (https://issues.apache.org/jira/browse/LUCENE-743 ) was lengthy and I can see from the code and the discussion why no one wants to revisit IndexReader.reopen in the form of IndexReader.clone and possibly mess things up.

Is some alternative easier API possible that I'm missing?

-J


---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-dev-h...@lucene.apache.org




---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-dev-h...@lucene.apache.org

Reply via email to