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]

Reply via email to