On Fri, 11 Apr 2025 18:05:00 GMT, Daniel Fuchs <dfu...@openjdk.org> wrote:

>> test/jdk/java/net/httpclient/HttpResponseConnectionLabelTest.java line 188:
>> 
>>> 186:         private static HttpTestServer createServer(Version version, 
>>> SSLContext sslContext) {
>>> 187:             try {
>>> 188:                 return HttpTestServer.create(version, sslContext, 
>>> ForkJoinPool.commonPool());
>> 
>> OK - we definitely MUST NOT use the common FJP here. 
>> 
>> 1. our HTTP/2 servers start their dispatching thread, which blocks on 
>> accept(), in the executor. 
>> 2. the tests will block (CountDownLatch) in the exchange, which is a thread 
>> in the executor.
>> 3. the test creates at least two HTTP/2 servers (maybe more) upfront.
>> 
>> If you run this test on a machine that has a low number of processors - say 
>> 4 - then the FJP will maybe have 3 threads at most. You can see where that 
>> goes...
>
> If no executor is provided the HTTP/2 server will create its own. The 
> HTTP/1.1 server however will run the exchange in the dispacher thread - so 
> you need to at least provide an executor for the HTTP/1.1 server if you don't 
> want to wedge when making parallel requests. But not the common FJP ;-)

In a0859c7c68614e8c3f531b1d4d9357f3f48cf5ab,

- Used a dedicated executor (!= FJP) only for HTTP/1.1 servers (also documented 
the rationale in the sources)
- Added `SystemDiagnosticsCollector` to aid with troubleshooting

Verified that test passes on Windows, Linux, and macOS hosts with 30 
repetitions.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/24154#discussion_r2043850831

Reply via email to