You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by Chris Bamford <Ch...@scalix.com> on 2009/10/01 14:52:13 UTC

How to test if an IndexReader is still open?

Hi,

In an attempt to balance searching efficiency against the number of open file descriptors on my system, I cache IndexSearchers with a "last used" timestamp.  A background cache manager thread then periodically checks the cache for any that haven't been used in a while and removes them from the cache.  In so doing, it also closes their underlying IndexReaders to force the files to be released.  This works very well, but I have hit a very occasional race condition where search code grabs a searcher from the cache just as it is about to expire - causing an "AlreadyClosed" exception.  Rather than attempt to synchronize my code, I figured it might be less expensive if search() (I have extended IndexSearcher) were to check that the underlying IndexReader is still open - and reopen() if necessary.  However, I cannot find a way to detect this ...  is there a way?  Failing that, what is the cost of just issuing a reopen() anyway?

Thanks for any thoughts / ideas.

- Chris


Re: How to test if an IndexReader is still open?

Posted by Chris Hostetter <ho...@fucit.org>.
: I figured it might be less expensive if search() (I have extended 
: IndexSearcher) were to check that the underlying IndexReader is still 

if you're extending IndexSearcher anyway you can override the close() 
method to update a boolean and then add your own isClosed() method.

: open - and reopen() if necessary.  However, I cannot find a way to 

FWIW: I don't believe you can call the reopen() method on a close 
IndexReader ... but you can of course "re" open a new IndexReader 
instance.

: detect this ...  is there a way?  Failing that, what is the cost of just 
: issuing a reopen() anyway?

if the index hasn't changed, it's free.  If the index has changed 
a lot, it's as expensive as open() ... if there are minor changes then 
it's somewhere in between.



-Hoss


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