Sounds great!

Mike

On Wed, Jan 20, 2010 at 10:25 AM, Shai Erera <ser...@gmail.com> wrote:
> Ok, I haven't reached that part in LIA2 yet :-).
>
> This module is useful for a single node as well, when one IndexSearcher is
> shared between several threads. The communication part is just an extension
> of that case.
>
> I'll review the SearcherManager in LIA2, and compare to our code. If it'll
> make sense, I'll patch it up !
>
> Shai
>
> On Wed, Jan 20, 2010 at 5:17 PM, Michael McCandless <
> luc...@mikemccandless.com> wrote:
>
>> I think this would be useful!
>>
>> The 2nd edition Lucene in Action sources also have something similar,
>> a SearcherManager class that handles multiple threads doing searching
>> while a reopen (normal or NRT) and warming is taking place.  (NOTE:
>> I'm one of the authors on Lucene in Action 2nd edition!).  But it
>> doesn't do the communication part, to know when it's time to reopen.
>>
>> Mike
>>
>> On Wed, Jan 20, 2010 at 9:32 AM, Shai Erera <ser...@gmail.com> wrote:
>> > We've worked around that problem by doing two things:
>> > 1) We notify all nodes in the cluster when the index has committed (we
>> use
>> > JMS for that).
>> > 2) On each node there is a daemon which waits on this JMS queue, and once
>> > the index has committed it reopens an IR, w/o checking isCurrent(). I
>> think
>> > that the isCurrent call is the problematic one, since that's the one that
>> > checks the segments file (but I admit I forgot the details).
>> > 2.1) After the reopen is finished (we do some warm up queries as well),
>> we
>> > 'release' this reader to search threads.
>> >
>> > So no search thread suffers any overhead from opening a reader, because
>> to
>> > them the readers are always open. Calling reopen means calling isCurrent,
>> so
>> > you can protect that code and call it until it succeeds, or if it fails
>> call
>> > IndexReader.open instead. Anyway, that's done on the daemon side, and
>> > therefore does not incur any overhead for searchers. In the worse case,
>> > they'll use a slightly older index than your application intended for.
>> >
>> > I don't know if something like that interests the community, to get a
>> module
>> > that provides IndexSearcher instances, and taking care of their refresh
>> w/o
>> > the application needing to worry about it, or write custom code (which
>> I'm
>> > sure a lot of us write .. and probably the same code). If it does, I
>> don't
>> > mind to patch something.
>> >
>> > Shai
>> >
>> > On Wed, Jan 20, 2010 at 4:05 PM, Sertic Mirko, Bedag
>> > <mirko.ser...@bedag.ch>wrote:
>> >
>> >> Hi Mike
>> >>
>> >> Thank you for your feedback!
>> >>
>> >> So I would need the following setup:
>> >>
>> >> a) Machine A with custom IndexDeletionPolicy and single IndexReader
>> >> instance
>> >> b) Machine B with custom IndexDeletionPolicy and single IndexReader
>> >> instance
>> >> c) Machine A and B periodically check if the index needs to be reopened,
>> at
>> >> least at 12 o'clock
>> >> d) Machine A runs an Index update and optimization at 8 o'clock, using
>> the
>> >> IndexDeletionPolicy. The IndexDeletionPolicy keeps track of the files to
>> be
>> >> deleted.
>> >> e) On Machine A, the no longer needed files are taken from the
>> >> IndexDeletionPolicy, and deleted at 12:30. At this point the files to be
>> >> deleted should no longer be required by any IndexReader and can be
>> safely
>> >> deleted.
>> >>
>> >> So the IndexDeletionPolicy should be a kind of Singleton, and in fact
>> would
>> >> only be needed on Machine A, as only here index modifications are made.
>> >> Machine B has read only access.
>> >>
>> >> Would this be a valid setup? The only limitation is there is only ONE
>> >> IndexWriter box, and multiple IndexReader boxes. Based on our
>> requirements,
>> >> this should fix very well. I really want to avoid some kind of index
>> >> replication between the boxes...
>> >>
>> >> Regards
>> >> Mirko
>> >>
>> >>
>> >>
>> >> -----Ursprüngliche Nachricht-----
>> >> Von: Michael McCandless [mailto:luc...@mikemccandless.com]
>> >> Gesendet: Mittwoch, 20. Januar 2010 14:45
>> >> An: java-user@lucene.apache.org
>> >> Betreff: Re: NFS, Stale File Handle Problem and my thoughts....
>> >>
>> >> Right, you just need to make a custom IndexDeletionPolicy.  NFS makes
>> >> no effort to protect deletion of still-open files.
>> >>
>> >> A simple approach is one that only deletes a commit if it's more than
>> >> XXX minutes/hours old, such that XXX is set higher than the frequency
>> >> that IndexReaders are guaranteed to have reopened.
>> >>
>> >> The TestDeletionPolicy unit test in Lucene's sources has the
>> >> ExperiationTimeDeletionPolicy that you can use (but scrutinize!).
>> >>
>> >> Another alternative is to simply reopen the reader whenever you hit
>> >> Stale file handle (think of it as NFS's means of notifying you that
>> >> your reader is no longer current ;) ).  But, if reopen time is
>> >> potentially long for your app, it's no good to make queries pay that
>> >> cost and the deletion policy is better.
>> >>
>> >> Mike
>> >>
>> >> On Wed, Jan 20, 2010 at 8:29 AM, Sertic Mirko, Bedag
>> >> <mirko.ser...@bedag.ch> wrote:
>> >> > h...@all
>> >> >
>> >> >
>> >> >
>> >> > We are using Lucene 2.4.1 on Debian Linux with 2 boxes. The index is
>> >> > stored on a common NFS share. Every box has a single IndexReader
>> >> > instance, and one Box has an IndexWriter instance, adding new
>> documents
>> >> > or deleting existing documents at a given point in time. After adding
>> or
>> >> > deleting the documents, a IndexWriter.optimize() is called. Every box
>> >> > checks periodically with IndexReader.isCurrent if the index needs to
>> be
>> >> > reopened.
>> >> >
>> >> >
>> >> >
>> >> > Now, we are encountering a "Stale file handle" error on box b after
>> the
>> >> > index was modified and optimized by box a.
>> >> >
>> >> >
>> >> >
>> >> > As far as i understand the problem with NFS is that box b tries to
>> >> > open/access a file that was deleted by box a on the NFS share.
>> >> >
>> >> >
>> >> >
>> >> > The question is now, when are files deleted? Does only the index
>> >> > optimization delete files, or can files be deleted just by adding or
>> >> > removing documents from an existing index?
>> >> >
>> >> >
>> >> >
>> >> > I now that there might be a better setup with Lucene and index
>> >> > replication, but this is an existing application and we cannot change
>> >> > the architecture now. So what would be the best solution?
>> >> >
>> >> >
>> >> >
>> >> > Can I just "change" the way Lucene deletes files? I think that just
>> >> > renaming no longer needed files would be good on NFS. After every
>> >> > IndexReader has reopened the index, the renamed files can be safely
>> >> > deleted, as they are definitely no longer needed. Where would be the
>> >> > hook point? I heard something about IndexDeletionPolicy....
>> >> >
>> >> >
>> >> >
>> >> > Thanks in advance!
>> >> >
>> >> >
>> >> >
>> >> > Mirko
>> >> >
>> >> >
>> >> >
>> >> >
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
>> >> For additional commands, e-mail: java-user-h...@lucene.apache.org
>> >>
>> >>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
>> >> For additional commands, e-mail: java-user-h...@lucene.apache.org
>> >>
>> >>
>> >
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
>> For additional commands, e-mail: java-user-h...@lucene.apache.org
>>
>>
>

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

Reply via email to