Hi Dan,

The utility function Utils.getFreePort gets free port by creating server socket with port 0. Instead of getting a free port before hand (via Utils.getFreePort), I am letting the JMX agent choose the free port. The risks associated with choosing free port has moved from test lib to the product.

Do you think this is something that should be handled at test-level? Maybe refactor the test library (Utils.getFreePort)?

Thanks
Harsha

On Thursday 21 June 2018 07:28 PM, Daniel D. Daugherty wrote:
> Port number of 0 is not handled at JMX or RMI layer. The given port number is passed onto the ServerSocket.
>
> https://docs.oracle.com/javase/10/docs/api/java/net/ServerSocket.html#%3Cinit%3E(int)

Using a port number of 0 to get a free port has to be done very carefully
to avoid running into other, more difficult to find issues.

Jerry T. fix a few of these before he left us:

    JDK-8182757 JDWP: Socket Transport handshake hangs on Solaris
    https://bugs.openjdk.java.net/browse/JDK-8182757

    JDK-8178676 nsk/jvmti/AttachOnDemand/attach045 fails with Exception
    https://bugs.openjdk.java.net/browse/JDK-8178676

    JDK-8188867 nsk/jdi/VirtualMachineManager/createVirtualMachine/createVM004
                (and other tests) timeout do to socket problem
    https://bugs.openjdk.java.net/browse/JDK-8188867


As an example of the difficulty, I tried to fix this bug:

    JDK-8182307 Error during JRMP connection establishment
    https://bugs.openjdk.java.net/browse/JDK-8182307

and had to back out my fix because it caused a couple of tests to fail.
I'm tracking the redo here:

    JDK-8193227 [REDO] 8182307 Error during JRMP connection establishment
    https://bugs.openjdk.java.net/browse/JDK-8193227

and I haven't had an epiphany for how to fix it without breaking
other tests (yet) so I just decommitted it from JDK11.


I'm not saying that your current fix will be susceptible to very
intermittent hangs on Solaris. I would have to take a very close
look at it and I haven't done that yet.

Dan


On 6/21/18 2:47 AM, Harsha Wardhana B wrote:


On Thursday 21 June 2018 10:30 AM, mandy chung wrote:


On 6/20/18 1:14 AM, Harsha Wardhana B wrote:
Hi,

Please find the fix below for the bug

JDK-8204661 : Show error 'Port already in use' in HashedPasswordFileTest.java

having webrev at,

http://cr.openjdk.java.net/~hb/8204661/webrev.00/

The problem root-cause is discussed in the comments section of the bug.

The fix above lets the default agent pick a free port by passing 'port=0' value and then reads the JMX Connector URL from Perf Counters.

This looks fine.  Please add this issue number to @bug.

This is interesting.  I was not aware of setting port=0 will auto-assign a free port.  Do you know if it was added for testing purpose (which I assume so)?
Port number of 0 is not handled at JMX or RMI layer. The given port number is passed onto the ServerSocket.

https://docs.oracle.com/javase/10/docs/api/java/net/ServerSocket.html#%3Cinit%3E(int)


For example test/jdk/sun/management/jmxremote/bootstrap/RmiBootstrapTest.java uses jdk.testlibrary.Utils.getFreePort() to get a free port number.

Mandy
Harsha



Reply via email to