Ryan Schmitt created HTTPCLIENT-1944:
----------------------------------------
Summary: Async request aborts working on HTTP/2, but not HTTP/1.1
Key: HTTPCLIENT-1944
URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1944
Project: HttpComponents HttpClient
Issue Type: Bug
Affects Versions: 5.0 Beta1
Reporter: Ryan Schmitt
I have some test code that looks approximately like the following:
{code:java}
client = useHttp2 ? HttpAsyncClients.createHttp2Default() :
HttpAsyncClients.createDefault();
client.start();
AsyncEntityProducer requestBody = ...; // A slow, endless stream of data
AsyncRequestProducer post = AsyncRequestBuilder.create("POST")
.setUri(endpoint)
.setEntity(requestBody)
.build();
Future<SimpleHttpResponse> future = client.execute(post,
SimpleResponseConsumer.create(), new FutureCallback<SimpleHttpResponse>() {
@Override
public void completed(SimpleHttpResponse result) {
System.out.println("Request future completed");
}
@Override
public void failed(Exception ex) {
System.out.println("Request future failed");
}
@Override
public void cancelled() {
System.out.println("Request future cancelled");
}
});
Thread.sleep(5_000);
future.cancel(true);
{code}
What I'm observing is that request cancellation works immediately with the
HTTP/2 request, but doesn't work at all with the HTTP/1.1 request, which runs
until it times out. My own FutureCallback gets notified of the cancellation of
the request, but nothing else takes place within the client itself; the
Cancellable associated with the request at the time of cancellation is a
NOOP_CANCELLABLE, whereas the HTTP/2 request has a callback installed that
aborts the underlying h2 stream.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]