Re: Detecting an empty index during start-up

2011-03-25 Thread David McLaughlin
Thanks Chris. I dug into the SolrCore code and after reading some of the
code I ended up going with core.getNewestSearcher(true) and this fixed the
problem.


David

On Thu, Mar 24, 2011 at 7:20 PM, Chris Hostetter
hossman_luc...@fucit.orgwrote:

 : I am not familiar with Solr internals, so the approach I wanted to take
 was
 : to basically check the numDocs property of the index during start-up and
 set
 : a READABLE state in the ZooKeeper node if it's greater than 0. I also
 : planned to create a commit hook for replication and updating which
 : controlled the READABLE property based on numDocs also.
 :
 : This just leaves the problem of finding out the number of documents
 during
 : start-up. I planned to have something like:

 Most of the ZK stuff you mentioned is over my head, but i get the general
 gist of what you want:

  * a hook on startup that checks numDocs
  * if not empty, trigger some logic

 My suggestion would be to implement this as a firstSearcher
 SolrEventListener.  when that runs, you'll have easy access to a
 SOlrIndexSearcher (and you won't even have to refcount it) and you can
 fire whatever logic you want based on what you find when looking at it.


 -Hoss



Re: Detecting an empty index during start-up

2011-03-25 Thread Andrzej Bialecki

On 3/25/11 11:25 AM, David McLaughlin wrote:

Thanks Chris. I dug into the SolrCore code and after reading some of the
code I ended up going with core.getNewestSearcher(true) and this fixed the
problem.


FYI, openNew=true is not implemented and can result in an 
UnsupportedOperationException. For now it's better to pass openNew=false 
and be prepared to get a null.


--
Best regards,
Andrzej Bialecki 
 ___. ___ ___ ___ _ _   __
[__ || __|__/|__||\/|  Information Retrieval, Semantic Web
___|||__||  \|  ||  |  Embedded Unix, System Integration
http://www.sigram.com  Contact: info at sigram dot com



Detecting an empty index during start-up

2011-03-24 Thread David McLaughlin
Hi,

In our Solr deployment we have a cluster of replicated Solr cores, with the
small change that we have dynamic master look-up using ZooKeeper. The
problem I am trying to solve is to make sure that when a new Solr core joins
the cluster it isn't made available to any search services until it has been
filled with data.

I am not familiar with Solr internals, so the approach I wanted to take was
to basically check the numDocs property of the index during start-up and set
a READABLE state in the ZooKeeper node if it's greater than 0. I also
planned to create a commit hook for replication and updating which
controlled the READABLE property based on numDocs also.

This just leaves the problem of finding out the number of documents during
start-up. I planned to have something like:

int numDocs = 0;
RefCountedSolrIndexSearcher searcher = core.getSearcher();
try {
   numDocs = searcher.get().getIndexReader().numDocs();
} finally {
searcher.decref();
}

but getSearcher's documentation specifically says don't use it from the
inform method. I missed this at first and of course I got a deadlock
(although only when I had more than one core on the same Solr instance).

Is there a simpler way to do what I want? Or will I just need to have a
thread which waits until the Searcher is available before setting the
state?

Thanks,
David


Re: Detecting an empty index during start-up

2011-03-24 Thread Chris Hostetter
: I am not familiar with Solr internals, so the approach I wanted to take was
: to basically check the numDocs property of the index during start-up and set
: a READABLE state in the ZooKeeper node if it's greater than 0. I also
: planned to create a commit hook for replication and updating which
: controlled the READABLE property based on numDocs also.
: 
: This just leaves the problem of finding out the number of documents during
: start-up. I planned to have something like:

Most of the ZK stuff you mentioned is over my head, but i get the general 
gist of what you want:

 * a hook on startup that checks numDocs
 * if not empty, trigger some logic

My suggestion would be to implement this as a firstSearcher 
SolrEventListener.  when that runs, you'll have easy access to a 
SOlrIndexSearcher (and you won't even have to refcount it) and you can 
fire whatever logic you want based on what you find when looking at it.


-Hoss