On Thu, 20 Oct 2022 10:01:19 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. > > Jaikiran Pai has updated the pull request with a new target base due to a > merge or a rebase. The incremental webrev excludes the unrelated changes > brought in by the merge/rebase. The pull request contains three additional > commits since the last revision: > > - Merge latest from master branch > - remove unintentionally committed file > - 8030616: sun/management/jmxremote/bootstrap/RmiBootstrapTest fails > intermittently with cannot find a free port Thank you again Serguei for the review. > Two reviews are required in the Serviceability area. So, please, wait for one more. I wasn't aware of that. Will certainly wait. I have triggered some tests in our internal CI system too to make sure the latest runs too are clean. ------------- PR: https://git.openjdk.org/jdk/pull/10322