You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by Jose Dillet <jo...@gmail.com> on 2014/03/05 13:57:03 UTC
Pending requests not cancelled when async client is closed (http
async client 4.0.1)
I have observed some differences between httpasyncclient 4.0-beta3 and
4.0.1 when the client is closed / shutdown and there are still pending
requests.
This can be observed by running AsyncClientHttpExchange and closing the
client while the request is not yet completed.
a) httpasyncclient-4.0-beta3.jar, httpclient-4.2.3.jar, httpcore-4.2.3.jar,
uses DefaultHttpAsyncClient implementation:
HttpAsyncClient httpclient = new DefaultHttpAsyncClient();
httpclient.start();
final HttpGet request = new HttpGet("http://www.apache.org/");
Future<HttpResponse> future = httpclient.execute(request, myCallback);
httpclient.shutdown(); // maybe done by some other thread
HttpResponse response = future.get();
b) httpasyncclient-4.0.1.jar, httpclient-4.3.2.jar, httpcore-4.3.2.jar,
uses InternalHttpAsyncClient implementation:
CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
httpclient.start();
final HttpGet request = new HttpGet("http://www.apache.org/");
Future<HttpResponse> future = httpclient.execute(request, myCallback);
httpclient.close(); // maybe done by some other thread
HttpResponse response = future.get();
Generally it makes no sense to close the client in the same thread before
getting the response, but that might happen in our application on a
different thread.
In case a) cancelled is invoked on myCallback. In case b) cancelled is not
invoked, and the request hangs in future.get()
Is this change in the behavior expected, a bug or just some not documented
behavior in a corner case?
Regards,
Jose
Re: Pending requests not cancelled when async client is closed
(http async client 4.0.1)
Posted by Oleg Kalnichevski <ol...@apache.org>.
On Wed, 2014-03-05 at 14:57 +0200, Jose Dillet wrote:
> I have observed some differences between httpasyncclient 4.0-beta3 and
> 4.0.1 when the client is closed / shutdown and there are still pending
> requests.
> This can be observed by running AsyncClientHttpExchange and closing the
> client while the request is not yet completed.
>
> a) httpasyncclient-4.0-beta3.jar, httpclient-4.2.3.jar, httpcore-4.2.3.jar,
> uses DefaultHttpAsyncClient implementation:
> HttpAsyncClient httpclient = new DefaultHttpAsyncClient();
> httpclient.start();
> final HttpGet request = new HttpGet("http://www.apache.org/");
> Future<HttpResponse> future = httpclient.execute(request, myCallback);
> httpclient.shutdown(); // maybe done by some other thread
> HttpResponse response = future.get();
>
> b) httpasyncclient-4.0.1.jar, httpclient-4.3.2.jar, httpcore-4.3.2.jar,
> uses InternalHttpAsyncClient implementation:
> CloseableHttpAsyncClient httpclient = HttpAsyncClients.createDefault();
> httpclient.start();
> final HttpGet request = new HttpGet("http://www.apache.org/");
> Future<HttpResponse> future = httpclient.execute(request, myCallback);
> httpclient.close(); // maybe done by some other thread
> HttpResponse response = future.get();
>
> Generally it makes no sense to close the client in the same thread before
> getting the response, but that might happen in our application on a
> different thread.
>
> In case a) cancelled is invoked on myCallback. In case b) cancelled is not
> invoked, and the request hangs in future.get()
>
> Is this change in the behavior expected, a bug or just some not documented
> behavior in a corner case?
>
Jose
It was a conscious decision to remove this feature from 4.0 GA. Keeping
track of all pending requests required a non-trivial amount of code and
a non-negligible performance overhead due to having to maintain an extra
queue with synchronized access. I was not sure it was worth it for what
was essentially a fringe case.
We could re-visit this issue for 4.1, though.
Oleg
---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org