> I use SolrJ 6.4.0 and SolrCloud 6.4.0 Please upgrade to 6.4.2 immediately. 6.4.0 has major performance problems.
On Wed, Mar 29, 2017 at 12:12 AM, Mikhail Ibraheem < mikhail.ibrah...@oracle.com> wrote: > Thanks Shawn so much. > I use SolrJ 6.4.0 and SolrCloud 6.4.0 > The code is very simple: > I have Spring singleton bean to get one and only one instance of > solrCloudClient as: > > @Value("${zkHost.url:rws00dtr.us.oracle.com:2181,rws00dtr. > us.oracle.com:2182,rws00dtr.us.oracle.com:2183}") > private String zkHost; > @Bean > public CloudSolrClient solrClient() { > Builder builder = new CloudSolrClient.Builder().withZkHost(zkHost); > CloudSolrClient solrClient = builder.build(); > return solrClient; > } > > And I use this code for all functionalities, pivot, faceting, queries, > indexing and so on. > The exception is intermittent and that is why I think it is related to > thread-safe issue with the class. > > Thanks > Mikhail > > -----Original Message----- > From: Shawn Heisey [mailto:apa...@elyograg.org] > Sent: 28 مارس, 2017 04:26 م > To: solr-user@lucene.apache.org > Subject: Re: Is CloudSolrClient thread-safe? > > 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 > >