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