Is there a document that tells how to create multiple threads? Search
returns many hits which orbit this idea, but I haven't spotted one
which tells how.

Thanks
Jack

On Fri, Mar 15, 2013 at 1:01 PM, Mark Miller <markrmil...@gmail.com> wrote:
> You def have to use multiple threads with it for it to be fast, but 3 or 4 
> docs a second still sounds absurdly slow.
>
> - Mark
>
> On Mar 15, 2013, at 2:58 PM, Luis Cappa Banda <luisca...@gmail.com> wrote:
>
>> 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
>>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>

Reply via email to