On Mon, 21 Nov 2022 15:12:02 GMT, Daniel Fuchs <[email protected]> wrote:
> Please find here a test fix for the
> sun/net/www/http/HttpClient/MultiThreadTest.
>
> This test makes concurrent connections to a server using multiple threads,
> and due to keep-alive, expects that there should not be more connections than
> concurrent threads. However, the test has been seen occasionally and
> intermittently failing because it observed more connections than threads. The
> test has some built-in logic to exclude connections that do not come from the
> test itself, so external interference should not be the cause.
>
> The suspicion is that occasionally some connection might remain idle for more
> than the keep-alive timeout, which then causes it to be closed, and allows
> the client to open a new connection.
>
> This fix works this way:
>
> - first it adds some logic to figure out whether a Worker thread might have
> remained idle for more than the keep-alive timeout
> - then it takes this information into account when matching the number of
> actual connections with the number of expected connection,
> - additionally it reduces the keep-alive timeout to one second, and forces
> some sleep on the client side after half the requests have been sent to
> increase the probability that some connections will be idle long enough to
> trigger the idle-time detection logic (as a means to test the fix itself).
>
> Finally it improves logging by adding more diagnosis (including human
> readable time stamps), so that future failures, if any, will be easier to
> diagnose. Note that reducing the keep-alive time to 1 second makes the test
> run much faster even with the 1500ms sleep on the client side.
>
> With this fix I no longer observe the test failing.
test/jdk/sun/net/www/http/HttpClient/MultiThreadTest.java line 448:
> 446: while (!done) {
> 447: int c = in.read();
> 448: last = System.nanoTime();
Suggestion:
last = System.nanoTime();
test/jdk/sun/net/www/http/HttpClient/MultiThreadTest.java line 544:
> 542: s.close();
> 543: } catch (Exception e) { }
> 544: MultiThreadTest.debug("worker: " + id + " end at " +
Nit:
Suggestion:
MultiThreadTest.debug("worker: " + id + " end at " +
-------------
PR: https://git.openjdk.org/jdk/pull/11268