lucene-solr-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Shawn Heisey <apa...@elyograg.org>
Subject Re: Is CloudSolrClient thread-safe?
Date Tue, 28 Mar 2017 14:26:13 GMT
On 3/28/2017 8:13 AM, Mikhail Ibraheem wrote:
> I have a project with solr and spring. I am have only one instance of CloudSolrClient
at the context (singleton).
>
> This is because I believe that it should be only one instance to load balance between
the nodes.

Yes, the intent is to be fully threadsafe.  You should know that
HttpClient, the class which the SolrClient implementations use under the
hood, has a default limitation of only allowing two simultaneous
connections to a given route, which I believe means a host/port combination.

Increasing this is possible, but it must be done by creating a custom
HttpClient object.  Here's some code that I use to build such a client,
then use that client to create an HttpSolrClient.  The same thing can be
done with CloudSolrClient:

  RequestConfig rc = RequestConfig.custom().setConnectTimeout(15000)
      .setSocketTimeout(Const.SOCKET_TIMEOUT).build();
  httpClient = HttpClients.custom().setDefaultRequestConfig(rc)
     
.setMaxConnPerRoute(300).setMaxConnTotal(5000).disableAutomaticRetries()
      .build();
  client = new HttpSolrClient(serverBaseUrl, httpClient);

> I have big issue which doesn't occur all the times, it is intermittent:
>
> java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.solr.common.SolrDocumentList

That is odd.  What is the exact version of SolrJ that you are using, and
the version of the SolrCloud cluster that it is talking to?  Can you
share your SolrJ code?

Thanks,
Shawn


Mime
View raw message