[
https://issues.apache.org/jira/browse/HTTPCLIENT-1944?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16584131#comment-16584131
]
Ryan Schmitt commented on HTTPCLIENT-1944:
------------------------------------------
[~olegk] Yes, I would absolutely like to be able to opt in to that behavior, as
it is the only way the client can signal to the server to stop working on the
request, or to not start (if the request is only buffered), or to stop
streaming data to the client that it has to simply swallow. Is there a way to
do this?
> 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
> Priority: Major
>
> 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]