On Sun, 18 Sep 2022 11:52:28 GMT, Jaikiran Pai <j...@openjdk.org> wrote:

> Can I please get a review of this test only change which proposes to fix the 
> recent intermittent failures in `RmiBootstrapTest` reported in 
> https://bugs.openjdk.org/browse/JDK-8030616?
> 
> The test has been intermittently failing with `cannot find a free port after 
> 10 tries`.  The tests uses the `jdk.test.lib.Utils.getFreePort()` utility 
> method to get a free port to use in the tests. That port is then used to 
> create and bind a JMX connector server. The issue resides in the fact that 
> the `getFreePort` utility uses loopback address to identify a free port, 
> whereas the JMX connector server uses that identified port to bind to a 
> non-loopback address - there's logic in `sun.rmi.transport.tcp.TCPEndpoint` 
> line 117 which calls `InetAddress.getLocalHost()` which can and does return a 
> non-loopback address. This effectively means that the port that was 
> identified as free (on loopback) may not really be free on (some other 
> address) and a subsequent attempt to bind against it by the connector server 
> will end up with a `BindException`.
> 
> Data collected in failures on the CI system has shown that this is indeed the 
> case and the port that was chosen (for loopback) as free was already used by 
> another process on a different address. The test additionally has logic to 
> attempt retries upto a maximum of 10 times to find a new free port on such 
> `BindException`. Turns out the next free port (on loopback) returned by 
> `jdk.test.lib.Utils.getFreePort()` is incremental and it so happens that the 
> systems where this failed had a process listening on a range of 10 to 12 
> ports, so these too ended up with `BindException` when the JMX connector 
> server used that port for a different address.
> 
> The commit here makes sure that the JMX connector server in the test is now 
> configured to loopback address as the address to bind to. That way the test 
> uses the correct address (loopback) on which the port was free.
> 
> The commit also has a change to the javadoc of the test utility 
> `jdk.test.lib.Utils.getFreePort()` to clarify that it returns a free port on 
> loopback address. This now matches what the implementation of that method 
> does.
> 
> Multiple test runs after this change hasn't yet run into the failure.

This pull request has now been integrated.

Changeset: 8b010e01
Author:    Jaikiran Pai <j...@openjdk.org>
URL:       
https://git.openjdk.org/jdk/commit/8b010e014c44ffb728b7a8343d3298466f5252fa
Stats:     7 lines in 2 files changed: 5 ins; 0 del; 2 mod

8030616: sun/management/jmxremote/bootstrap/RmiBootstrapTest fails 
intermittently with cannot find a free port

Reviewed-by: sspitsyn, msheppar

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

PR: https://git.openjdk.org/jdk/pull/10322

Reply via email to