-
Improvement
-
Resolution: Fixed
-
Critical
-
4.3.0
-
None
-
4.3 RC1
Some projects have a lot of data and Solr indexation can be very long (on optimize for example).
By default, the socket timeout is set to 2 minutes (maybe it depends on the system configuration).
If we have the following error if the timeout is exceeded:
2020-02-18 00:31:58,335 ERROR [org.ametys.core.schedule.AmetysJob$org.ametys.cms.indexing.GlobalWorkspaceIndexerSchedulable] (AmetysRuntimeScheduler_Worker-4;) An exception occured during the execution of the Schedulable 'org.ametys.cms.indexing.GlobalWorkspaceIndexerSchedulable' org.ametys.cms.indexing.IndexingException: Error indexing the workspace 'default'. at org.ametys.cms.indexing.solr.SolrWorkspaceIndexer.doIndex(SolrWorkspaceIndexer.java:226) at org.ametys.cms.indexing.solr.SolrWorkspaceIndexer._forceWorkspaceAndDoIndex(SolrWorkspaceIndexer.java:185) at org.ametys.cms.indexing.solr.SolrWorkspaceIndexer._index(SolrWorkspaceIndexer.java:155) at org.ametys.cms.indexing.solr.SolrWorkspaceIndexer.indexAllWorkspaces(SolrWorkspaceIndexer.java:111) at org.ametys.cms.indexing.GlobalWorkspaceIndexerSchedulable.execute(GlobalWorkspaceIndexerSchedulable.java:43) at org.ametys.core.schedule.AmetysJob.execute(AmetysJob.java:151) at org.quartz.core.JobRunShell.run(JobRunShell.java:202) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573) Caused by: org.apache.solr.client.solrj.SolrServerException: Timeout occurred while waiting response from server at: http://localhost:8983/solr at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:676) at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:265) at org.apache.solr.client.solrj.impl.HttpSolrClient.request(HttpSolrClient.java:248) at org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient.request(ConcurrentUpdateSolrClient.java:497) at org.ametys.cms.search.solr.NoAutoCommitUpdateClient.request(NoAutoCommitUpdateClient.java:52) at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:211) at org.apache.solr.client.solrj.SolrClient.optimize(SolrClient.java:675) at org.ametys.cms.search.solr.AbstractAmetysConcurrentUpdateClient.optimize(AbstractAmetysConcurrentUpdateClient.java:325) at org.apache.solr.client.solrj.SolrClient.optimize(SolrClient.java:595) at org.ametys.cms.search.solr.AbstractAmetysConcurrentUpdateClient.optimize(AbstractAmetysConcurrentUpdateClient.java:297) at org.ametys.cms.content.indexing.solr.SolrIndexer.optimize(SolrIndexer.java:2010) at org.ametys.cms.indexing.solr.SolrWorkspaceIndexer.doIndex(SolrWorkspaceIndexer.java:221) ... 7 more Caused by: java.net.SocketTimeoutException: Read timed out at java.base/java.net.SocketInputStream.socketRead0(Native Method) at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140) at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137) at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153) at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:280) at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138) at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163) at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157) at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) at org.apache.solr.client.solrj.impl.HttpSolrClient.executeMethod(HttpSolrClient.java:564) ... 18 more
The solution could be to add a configuration parameter to set the socket timeout duration.
For that we have to modify two calls of SolrClient:
- DefaultSolrClientProvider#initialize()
_solrReadClient = new HttpSolrClient.Builder(url).build(); become _solrReadClient = new HttpSolrClient.Builder(url).withSocketTimeout(timeout).build(); - AbstractAmetysConcurrentUpdateClient#constructor
Add .withSocketTimeout(timeout) to the Builder while calling the super constructor.
But for this solution, it can't work for now because there is the following issue: SOLR-12550.
- Est référencé par
-
SOLR-60 Upgrade to Solr 8.5
-
- Closed
-
- links to