[
https://issues.apache.org/jira/browse/SOLR-5850?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13932308#comment-13932308
]
Devansh Dhutia commented on SOLR-5850:
--------------------------------------
{code:java title=ConcurrentUpdateSolrServer.java}
SolrParams currentParams = new ModifiableSolrParams(req.getParams());
if (!origParams.toNamedList().equals(currentParams.toNamedList())) {
queue.add(req); // params are different, push back to queue
break;
}
{code}
Shouldn't that be a blocking operation? or even an offer with retry logic?
further down, the queue is polled, and by the time the params are compared,
another request may have already been added to the queue.
> Race condition in ConcurrentUpdateSolrServer
> --------------------------------------------
>
> Key: SOLR-5850
> URL: https://issues.apache.org/jira/browse/SOLR-5850
> Project: Solr
> Issue Type: Bug
> Components: clients - java, search, SolrCloud, update
> Affects Versions: 4.6
> Reporter: Devansh Dhutia
> Priority: Critical
> Labels: 500, cloud, error, update
>
> Possibly related to SOLR-2308, we are seeing a Queue Full error message when
> issuing writes to Solr Cloud
> Each Update has 200 documents, and a commit is issued after 2000 documents
> have been added.
> The writes are spread out to all the servers in the cloud (2 in this case)
> and following is the stack trace from Solr:
> {code:xml}
> <?xml version="1.0" encoding="UTF-8"?>
> <response>
> <lst name="responseHeader"><int name="status">500</int><int
> name="QTime">101</int></lst><lst name="error"><str name="msg">Queue
> full</str><str name="t
> race">java.lang.IllegalStateException: Queue full
> at java.util.AbstractQueue.add(Unknown Source)
> at
> org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrServer$Runner$1.writeTo(ConcurrentUpdateSolrServer.java:181)
> at
> org.apache.http.entity.EntityTemplate.writeTo(EntityTemplate.java:72)
> at
> org.apache.http.entity.HttpEntityWrapper.writeTo(HttpEntityWrapper.java:98)
> at
> org.apache.http.impl.client.EntityEnclosingRequestWrapper$EntityWrapper.writeTo(EntityEnclosingRequestWrapper.java:108)
> at
> org.apache.http.impl.entity.EntitySerializer.serialize(EntitySerializer.java:122)
> at
> org.apache.http.impl.AbstractHttpClientConnection.sendRequestEntity(AbstractHttpClientConnection.java:271)
> at
> org.apache.http.impl.conn.ManagedClientConnectionImpl.sendRequestEntity(ManagedClientConnectionImpl.java:197)
> at
> org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:257)
> at
> org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
> at
> org.apache.http.impl.client.DefaultRequestDirector.tryExecute(DefaultRequestDirector.java:715)
> at
> org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:520)
> at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)
> at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:805)
> at
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:784)
> at
> org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrServer$Runner.run(ConcurrentUpdateSolrServer.java:232)
> at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
> at java.lang.Thread.run(Unknown Source)
> </str><int name="code">500</int></lst>
> </response>
> {code}
--
This message was sent by Atlassian JIRA
(v6.2#6252)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]