[ 
https://issues.apache.org/jira/browse/SOLR-8453?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15081423#comment-15081423
 ] 

Mark Miller commented on SOLR-8453:
-----------------------------------

bq. I thought we caught all exceptions in the SolrDispatchFilter and never let 
any bubble up to Jetty.

The problem is not about whether the exception comes out of the 
SolrDispatchFilter - it's a matter of managing the connection.

We want the client to handle the connection, so everything can be done cleanly. 
So the client needs to be able to fully send the request and then fully receive 
the response - that is the goal for all but really exceptional cases. If we let 
an exception bubble out and stop the server thread (whether the dispatch filter 
swallows it or not), the request thread can still be wrapping up - but if it 
tries to do any communication, it will get a connection reset as the server has 
closed the connection. We are not properly letting the client finish its 
request in these cases - so there is a race. We need to make sure the server 
does not close the connection until the request is fully done.

> Local exceptions in DistributedUpdateProcessor should not cut off an ongoing 
> request.
> -------------------------------------------------------------------------------------
>
>                 Key: SOLR-8453
>                 URL: https://issues.apache.org/jira/browse/SOLR-8453
>             Project: Solr
>          Issue Type: Bug
>            Reporter: Mark Miller
>            Assignee: Mark Miller
>         Attachments: SOLR-8453.patch, SOLR-8453.patch, SOLR-8453.patch, 
> SOLR-8453.patch, SOLR-8453.patch, SOLR-8453.patch, SOLR-8453.patch
>
>
> The basic problem is that when we are streaming in updates via a client, an 
> update can fail in a way that further updates in the request will not be 
> processed, but not in a way that causes the client to stop and finish up the 
> request before the server does something else with that connection.
> This seems to mean that even after the server stops processing the request, 
> the concurrent update client is still in the process of sending the request. 
> It seems previously, Jetty would not go after the connection very quickly 
> after the server processing thread was stopped via exception, and the client 
> (usually?) had time to clean up properly. But after the Jetty upgrade from 
> 9.2 to 9.3, Jetty closes the connection on the server sooner than previous 
> versions (?), and the client does not end up getting notified of the original 
> exception at all and instead hits a connection reset exception. The result 
> was random fails due to connection reset throughout our tests and one 
> particular test failing consistently. Even before this update, it does not 
> seem like we are acting in a safe or 'behaved' manner, but our version of 
> Jetty was relaxed enough (or a bug was fixed?) for our tests to work out.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to