The request close() method decrements the reference count on the searcher.
public abstract class SolrQueryRequestBase implements SolrQueryRequest,
Closeable {
// The index searcher associated with this request
protected RefCounted<SolrIndexSearcher> searcherHolder;
public void close() {
if(this.searcherHolder != null) {
this.searcherHolder.decref();
this.searcherHolder = null;
}
}
}
RefCounted keeps track of a reference count on the searcher and closes
it when the count hits zero.
public abstract class RefCounted<Type> {
...
public void decref() {
if (refcount.decrementAndGet() == 0) {
close();
}
}
}
We asume that when we call req.getSearcher() - this increases the
reference count, after we are done with the searcher, we have to call
close() to call decref() to decrease the reference count.
But it does not seem enough or maybe there is a bug in Solr in this case ?
Elodie
On 03/14/2017 03:02 PM, Shawn Heisey wrote:
On 3/14/2017 3:08 AM, Gerald Reinhart wrote:
Hi,
The custom code we have is something like this :
public class MySearchHandlerextends SearchHandler {
@Override public void handleRequestBody(SolrQueryRequest req,
SolrQueryResponse rsp)throws Exception {
SolrIndexSearcher searcher =req.getSearcher();
try{
// Do stuff with the searcher....
}finally {
req.close();
}
<snip>
Despite the fact that we always close the request each time we get
a SolrIndexSearcher from the request, the number of SolrIndexSearcher
instances is increasing. Each time a new commit is done on the index, a
new Searcher is created (this is normal) but the old one remains. Is
there something wrong with this custom code ?
My understanding of Solr and Lucene internals is rudimentary, but I
might know what's happening here.
The code closes the request, but never closes the searcher. Searcher
objects include a Lucene object that holds onto the index files that
pertain to that view of the index. The searcher must be closed.
It does look like if you close the searcher and then close the request,
that might be enough to fully decrement all the reference counters
involved, but I do not know the code well enough to be sure of that.
Thanks,
Shawn
Kelkoo SAS
Société par Actions Simplifiée
Au capital de € 4.168.964,30
Siège social : 158 Ter Rue du Temple 75003 Paris
425 093 069 RCS Paris
Ce message et les pièces jointes sont confidentiels et établis à l'attention
exclusive de leurs destinataires. Si vous n'êtes pas le destinataire de ce
message, merci de le détruire et d'en avertir l'expéditeur.