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