[
https://issues.apache.org/jira/browse/HTTPCORE-599?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16926693#comment-16926693
]
Roy Hashimoto commented on HTTPCORE-599:
----------------------------------------
The fix branch looks much better to me. It doesn't look quite as good with
https as it does with http. I changed this line in
Http1IntegrationTest.testSlowResponseConsumer():
[https://github.com/apache/httpcomponents-core/blob/6614b42f35e7511e9e582314c77ce0e5032cf44f/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/Http1IntegrationTest.java#L992]
to:
{{client.start(Http1Config.custom().setBufferSize(256).setInitialWindowSize(256).build());}}
to set the initial window size. Tracking the capacity at
AbstractHttp1StreamDuplexer.java:313 when running this test looks like this for
http:
{{capacity = 5}}
{{capacity = -251}}
{{capacity = -16}}
{{capacity = -37}}
{{capacity = 221}}
{{capacity = -35}}
{{capacity = -104}}
and like this for https:
{{capacity = 5}}
{{capacity = -251}}
{{capacity = -507}}
{{capacity = -763}}
{{capacity = -768}}
{{capacity = -11}}
{{capacity = 490}}
{{capacity = 421}}
I would expect the capacity to stay between -256 and +256 as it does for http.
Maybe there is extra buffering for the TLS socket? It is throttling with https,
just not as rigidly, so maybe that's okay.
Aside from that the fixed behavior looks as expected.
> Capacity feedback does not throttle AsyncDataConsumer.consume() for Http1
> -------------------------------------------------------------------------
>
> Key: HTTPCORE-599
> URL: https://issues.apache.org/jira/browse/HTTPCORE-599
> Project: HttpComponents HttpCore
> Issue Type: Bug
> Components: HttpCore NIO
> Affects Versions: 5.0-beta8
> Environment: macOS Mojave using the IntelliJ CE 2019.2.1 runtime
> Reporter: Roy Hashimoto
> Priority: Blocker
> Fix For: 5.0-beta9
>
> Attachments: SlowConsumerTest.java
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> The capacity window mechanism in AbstractHttp1StreamDuplexer does not appear
> to be throttling calls to AsyncDataConsumer.consume(). This affects both
> client and server asynchronous entity consumers.
> The attached test program implements a simple 5.0 asynchronous HTTP/1.1
> server. Aside from boilerplate code, the significant parts are:
> # Set the HTTP1 initial window size to 8192.
> # Add an AsyncExchangeHandler that creates an empty response and logs the
> AsyncDataConsumer method calls to the console.
> # Updating the capacity channel is intentionally omitted, effectively
> providing an infinitely slow consumer.
> To test, post data of more than 8 KB to the server (e.g. using curl). I
> expect to see in the log consume() calls totaling at least 8192 and nothing
> after that until the socket times out. Instead, what I see is consume() calls
> delivering all the data and then streamEnd().
> Here is sample output for uploading almost 32 KB. I have used my IDE to add a
> logging breakpoint to show the capacity window on this line:
> [https://github.com/apache/httpcomponents-core/blob/a60528ea58877d55dab266bd2813e065aac6ff2c/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java#L313]
> so those are also included in the output below.
> {{Mon Sep 09, 2019 10:27:18.893 AM SlowConsumerTest main FINE: Listening on
> /0:0:0:0:0:0:0:0:8080}}
> {{Mon Sep 09, 2019 10:27:31.294 AM SlowConsumerTest$MyExchangeHandler
> handleRequest FINEST: handleRequest called}}
> {{Mon Sep 09, 2019 10:27:31.332 AM SlowConsumerTest$MyExchangeHandler
> consume FINEST: consume 8192 total 8192}}
> {{AbstractHttp1StreamDuplexer:313 capacity=0}}
> {{Mon Sep 09, 2019 10:27:31.341 AM SlowConsumerTest$MyExchangeHandler
> updateCapacity FINEST: updateCapacity called}}
> {{Mon Sep 09, 2019 10:27:31.342 AM SlowConsumerTest$MyExchangeHandler
> consume FINEST: consume 8192 total 16384}}
> {{AbstractHttp1StreamDuplexer:313 capacity=-8192}}
> {{Mon Sep 09, 2019 10:27:31.346 AM SlowConsumerTest$MyExchangeHandler
> updateCapacity FINEST: updateCapacity called}}
> {{Mon Sep 09, 2019 10:27:31.348 AM SlowConsumerTest$MyExchangeHandler
> consume FINEST: consume 8192 total 24576}}
> {{AbstractHttp1StreamDuplexer:313 capacity=-16384}}
> {{Mon Sep 09, 2019 10:27:31.352 AM SlowConsumerTest$MyExchangeHandler
> updateCapacity FINEST: updateCapacity called}}
> {{Mon Sep 09, 2019 10:27:31.354 AM SlowConsumerTest$MyExchangeHandler
> consume FINEST: consume 8150 total 32726}}
> {{AbstractHttp1StreamDuplexer:313 capacity=-24534}}
> {{Mon Sep 09, 2019 10:27:31.357 AM SlowConsumerTest$MyExchangeHandler
> streamEnd FINEST: streamEnd called}}
--
This message was sent by Atlassian Jira
(v8.3.2#803003)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]