RFR: JDK-8192057: com/sun/jdi/BadHandshakeTest.java fails with java.net.ConnectException
Alex Menkov
alexey.menkov at oracle.com
Tue Sep 10 20:33:29 UTC 2019
Hi Richard,
Updated webrev:
http://cr.openjdk.java.net/~amenkov/jdk14/BadHandshakeTest/webrev.2/
added delay between retries & moved error clearing to the beginning of
the cycle.
--alex
On 09/09/2019 02:07, Reingruber, Richard wrote:
> Hi Alex,
>
> > Of course error can be cleared before each try - there is not functional
> > difference.
>
> It is just a little confusing, as you can get an exception in L. 95, too. But I'm ok with it, if you
> prefer it like this.
>
> I would suggest, though, to sleep some ms before a retry and double the sleep time in each
> following retry.
>
> Best regards,
> Richard.
>
> -----Original Message-----
> From: Alex Menkov <alexey.menkov at oracle.com>
> Sent: Freitag, 6. September 2019 22:52
> To: Reingruber, Richard <richard.reingruber at sap.com>; serguei.spitsyn at oracle.com; OpenJDK Serviceability <serviceability-dev at openjdk.java.net>
> Subject: Re: RFR: JDK-8192057: com/sun/jdi/BadHandshakeTest.java fails with java.net.ConnectException
>
> Hi Richard,
>
> On 09/06/2019 09:28, Reingruber, Richard wrote:
>> Hi Alex,
>>
>> that's a good fix for the issue.
>>
>> One minor thing:
>>
>> 89 Exception error = null;
>> 90 for (int retry = 0; retry < 5; retry++) {
>> 91 try {
>> 92 log("retry: " + retry);
>> 93 s = new Socket("localhost", port);
>> 94 error = null;
>> 95 s.getOutputStream().write("JDWP-".getBytes("UTF-8"));
>> 96 break;
>> 97 } catch (ConnectException ex) {
>> 98 log("got exception: " + ex.toString());
>> 99 error = ex;
>> 100 }
>> 101 }
>> 102 if (error != null) {
>> 103 throw error;
>> 104 }
>>
>> Is there a reason to clear the local variable error in line 94 instead of clearing it
>> in line 91 where each new attempt begins?
>
> The logic here is:
> The cycle has 2 exits:
> - error (max retry attempts reached, error is set by last "catch")
> - success ("break" statement at line 96, error should be null)
> So error is cleared only after the socket is connected (this is the
> problematic operation which can cause ConnectException).
>
> Of course error can be cleared before each try - there is not functional
> difference.
>
> --alex
>
>>
>> Cheers, Richard.
>>
>> -----Original Message-----
>> From: serviceability-dev <serviceability-dev-bounces at openjdk.java.net> On Behalf Of serguei.spitsyn at oracle.com
>> Sent: Mittwoch, 4. September 2019 22:11
>> To: Alex Menkov <alexey.menkov at oracle.com>; OpenJDK Serviceability <serviceability-dev at openjdk.java.net>
>> Subject: Re: RFR: JDK-8192057: com/sun/jdi/BadHandshakeTest.java fails with java.net.ConnectException
>>
>> Hi Alex,
>>
>> The fix looks good.
>> Good simplification!
>>
>> Thanks,
>> Serguei
>>
>>
>> On 9/4/19 12:19, Alex Menkov wrote:
>>> Hi all,
>>>
>>> Please review the fix for BadHandshakeTest test.
>>> The problem is the test connects to the server twice and if debuggee
>>> hasn't yet handled disconnection, the next connect gets "connection
>>> refused" error.
>>> Instead of adding delay before 2nd connect (we never know "good" value
>>> for the delay and big delay can cause "accept timeout"), the test
>>> re-tries connect in case of ConnectException.
>>> Also improved/simplified the test slightly - debuggee is now run with
>>> auto port assignment (used lib.jdb.Debuggee test class which
>>> implements required functionality).
>>>
>>> jira:
>>> https://bugs.openjdk.java.net/browse/JDK-8192057
>>> webrev:
>>> http://cr.openjdk.java.net/~amenkov/jdk14/BadHandshakeTest/webrev/
>>>
>>> --alex
>>
More information about the serviceability-dev
mailing list