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

Reply via email to