And up! :-) I´ve been wondering if using CloudSolrServer has something to do here. Does it have a bad performance when a CloudSolrServer singletong receives multiple queries? Is it recommended to have a CloudSolrServer instances list and select one of them with a Round Robin criteria?
2013/3/14 Luis Cappa Banda <luisca...@gmail.com> > Hello! > > Thanks a lot, Erick! I've attached some stack traces during a normal > 'engine' running. > > Cheers, > > - Luis Cappa > > > 2013/3/13 Erick Erickson <erickerick...@gmail.com> > >> Stack traces.. >> >> First, >> jps -l >> >> that will give you a the process IDs of your running Java processes. Then: >> >> jstack <pid from above> >> >> Usually I pipe the output from jstack into a text file... >> >> Best >> Erick >> >> >> On Wed, Mar 13, 2013 at 1:48 PM, Luis Cappa Banda <luisca...@gmail.com >> >wrote: >> >> > Uhm, how can I do that... 'cleanly'? I know that with JConsole it´s >> posible >> > to output this traces, but with a .war application built on top of >> Spring I >> > don´t know how can I do that. In any case, here is my CloudSolrServer >> > wrapper that is used by other classes. There is no sync method or piece >> of >> > code: >> > >> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >> - - >> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >> > >> > *public class BinaryLBHttpSolrServer extends LBHttpSolrServer {* >> > >> > private static final long serialVersionUID = 3905956120804659445L; >> > public BinaryLBHttpSolrServer(String[] endpoints) throws >> > MalformedURLException { >> > super(endpoints); >> > } >> > >> > @Override >> > protected HttpSolrServer makeServer(String server) throws >> > MalformedURLException { >> > HttpSolrServer solrServer = super.makeServer(server); >> > solrServer.setRequestWriter(new BinaryRequestWriter()); >> > return solrServer; >> > } >> > } >> > >> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >> - - >> > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - >> > >> > *public class CloudSolrHttpServerImpl implements CloudSolrHttpServer {* >> > private CloudSolrServer cloudSolrServer; >> > >> > private Logger log = Logger.getLogger(CloudSolrHttpServerImpl.class); >> > >> > public CloudSolrHttpServerImpl(String zookeeperEndpoints, String[] >> > endpoints, int clientTimeout, >> > int connectTimeout, String cloudCollection) { >> > try { >> > BinaryLBHttpSolrServer lbSolrServer = new *BinaryLBHttpSolrServer* >> > (endpoints); >> > this.cloudSolrServer = new CloudSolrServer(zookeeperEndpoints, >> > lbSolrServer); >> > this.cloudSolrServer.setZkConnectTimeout(connectTimeout); >> > this.cloudSolrServer.setZkClientTimeout(clientTimeout); >> > this.cloudSolrServer.setDefaultCollection(cloudCollection); >> > } catch (MalformedURLException e) { >> > log.error(e); >> > } >> > } >> > >> > @Override >> > public QueryResponse *search*(SolrQuery query) throws >> SolrServerException { >> > return cloudSolrServer.query(query, METHOD.POST); >> > } >> > >> > @Override >> > public boolean *index*(DocumentBean user) { >> > boolean indexed = false; >> > int retries = 0; >> > do { >> > indexed = addBean(user); >> > retries++; >> > } while(!indexed && retries<4); >> > return indexed; >> > } >> > @Override >> > public boolean *update*(SolrInputDocument updateDoc) { >> > boolean update = false; >> > int retries = 0; >> > >> > do { >> > update = addSolrInputDocument(updateDoc); >> > retries++; >> > } while(!update && retries<4); >> > return update; >> > } >> > @Override >> > public void commit() { >> > try { >> > cloudSolrServer.commit(); >> > } catch (SolrServerException e) { >> > log.error(e); >> > } catch (IOException e) { >> > log.error(e); >> > } >> > } >> > >> > @Override >> > public boolean *delete*(String ... ids) { >> > boolean deleted = false; >> > List<String> idList = Arrays.asList(ids); >> > try { >> > this.cloudSolrServer.deleteById(idList); >> > this.cloudSolrServer.commit(true, true); >> > deleted = true; >> > >> > } catch (SolrServerException e) { >> > log.error(e); >> > >> > } catch (IOException e) { >> > log.error(e); >> > } >> > return deleted; >> > } >> > >> > @Override >> > public void *optimize*() { >> > try { >> > this.cloudSolrServer.optimize(); >> > } catch (SolrServerException e) { >> > log.error(e); >> > } catch (IOException e) { >> > log.error(e); >> > } >> > } >> > /* >> > * ******************** >> > * Getters & setters * >> > * ******************** >> > * */ >> > public CloudSolrServer getSolrServer() { >> > return cloudSolrServer; >> > } >> > >> > public void setSolrServer(CloudSolrServer solrServer) { >> > this.cloudSolrServer = solrServer; >> > } >> > >> > private boolean addBean(DocumentBean user) { >> > boolean added = false; >> > try { >> > this.cloudSolrServer.addBean(user, 100); >> > this.commit(); >> > >> > } catch (IOException e) { >> > log.error(e); >> > >> > } catch (SolrServerException e) { >> > log.error(e); >> > }catch(SolrException e) { >> > log.error(e); >> > } >> > return added; >> > } >> > private boolean addSolrInputDocument(SolrInputDocument updateDoc) { >> > boolean added = false; >> > try { >> > this.cloudSolrServer.add(updateDoc, 100); >> > this.commit(); >> > added = true; >> > } catch (IOException e) { >> > log.error(e); >> > >> > } catch (SolrServerException e) { >> > log.error(e); >> > }catch(SolrException e) { >> > log.error(e); >> > } >> > return added; >> > } >> > } >> > >> > Thank you very much, Mark. >> > >> > >> > - Luis Cappa >> > >> > >> > >> > And >> > 2013/3/13 Mark Miller <markrmil...@gmail.com> >> > >> > > >> > > Could you capture some thread stack traces in the 'engine' and see if >> > > there are any blocking methods? >> > > >> > > - Mark >> > > >> > > On Mar 13, 2013, at 1:34 PM, Luis Cappa Banda <luisca...@gmail.com> >> > wrote: >> > > >> > > > Just one correction: >> > > > >> > > > When I said: >> > > > >> > > > - I´ve checked SolrCloud via Solr Admin interface and it´s OK: >> > > > everything is green, and I cant execute queries directly into >> Solr. >> > > > >> > > > I mean: >> > > > >> > > > >> > > > - I´ve checked SolrCloud via Solr Admin interface and it´s OK: >> > > > everything is green, and *I can* execute queries directly into >> Solr. >> > > > >> > > > >> > > > Thanks! >> > > > >> > > > >> > > > - Luis Cappa >> > > > >> > > > >> > > > 2013/3/13 Luis Cappa Banda <luisca...@gmail.com> >> > > > >> > > >> Hello, guys! >> > > >> >> > > >> I´ve been experiencing some annoying behavior with my current >> > production >> > > >> scenario. Here is the snapshot: >> > > >> >> > > >> >> > > >> - SolrCloud: 2 shards >> > > >> - Zookeeper ensemble: 3 nodes in *different machines *(most of >> the >> > > >> tutorials installs 3 Zookeeper nodes in the same machine). >> > > >> - This is the zoo.cfg from every >> > > >> >> > > >> tickTime=2000 // I´ve also tried with 60000 >> > > >> >> > > >> initLimit=10 >> > > >> >> > > >> syncLimit=5 >> > > >> >> > > >> dataDir=/var/lib/zookeeper >> > > >> >> > > >> clientPort=9000 >> > > >> >> > > >> server.1=zoohost1:2888:3888 >> > > >> >> > > >> server.2=zoohost1:2888:3888 >> > > >> >> > > >> server.3=zoohost1:2888:3888 >> > > >> >> > > >> >> > > >> >> > > >> - I´ve developed a Java Application with a REST API (let´s call >> it * >> > > >> engine*) that dispatches queries into SolrCloud. It´s a wrapper >> > around >> > > >> CloudSolrServer, so it´s mandatory to specify some Zookeeper >> > > configuration >> > > >> params too. They are loaded dynamically when the application is >> > > deployed in >> > > >> a Tomcat server, but the current values that I´m using are as >> > follows: >> > > >> >> > > >> cloudSolrServer.*setZkConnectTimeout(60000)* >> > > >> >> > > >> cloudSolrServer.*setZkClientTimeout(60000)* >> > > >> * >> > > >> * >> > > >> * >> > > >> * >> > > >> >> > > >> *THE PROBLEM* >> > > >> * >> > > >> * >> > > >> Everything goes OK, but after two days more or less (yes, I´ve >> checked >> > > >> that this behavior occurrs periodically, more or less) the *engine >> > > blocks >> > > >> * and cannot dispatch any query to SolrCloud. >> > > >> >> > > >> - The *engine *log only outputs "updating Zookeeper..." one last >> > time, >> > > >> but never updates. >> > > >> - I´ve checked SolrCloud via Solr Admin interface and it´s OK: >> > > >> everything is green, and I cant execute queries directly into >> Solr. >> > > >> - So then Solr appears to be OK, so the next step is to restart >> > > *engine >> > > >> but *it again appears "updating Zookeeper...". Unfortunately >> switch >> > > >> off + switch on doesn´t work here, :-( >> > > >> - I´ve checked too Zookeeper logs and it appears some connection >> log >> > > >> outs, but the ensemble appears to be OK too. >> > > >> - *The end: *If I restart Zookeeper one by one, and I restart >> > > >> SolrCloud, plus I restart the engine, the problem is solved. I´m >> > using >> > > >> Amazon AWS as hostage, so I discard connection problems between >> > > instances. >> > > >> >> > > >> >> > > >> Does anyone experienced something similar? Can anybody shed some >> light >> > > on >> > > >> this problem? >> > > >> >> > > >> Thank you very much. >> > > >> >> > > >> >> > > >> Regards, >> > > >> >> > > >> >> > > >> - Luis Cappa >> > > >> >> > > >> > > >> > >> > >