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.

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

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

Changes: https://git.openjdk.org/jdk/pull/10322/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=10322&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8030616
  Stats: 7 lines in 3 files changed: 5 ins; 0 del; 2 mod
  Patch: https://git.openjdk.org/jdk/pull/10322.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/10322/head:pull/10322

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

Reply via email to