RFR of JDK-8188897: java/rmi/registry/reexport/Reexport.java failed with Port already in use
Roger Riggs
Roger.Riggs at Oracle.com
Tue Apr 10 15:38:14 UTC 2018
Hi Hamlin,
Looks good,
Thanks for the updates.
On 4/9/2018 10:49 PM, Hamlin Li wrote:
>
> On 10/04/2018 3:09 AM, Roger Riggs wrote:
>> Hi Hamlin,
> Hi Roger,
>
> Thank you for review.
>>
>> Great, the new busy port algorithm looks better.
>> The port assigned will always be one that was available and is now
>> busy to prevent the registry creation.
>>
>> As expected, there is a small window between the (try-with-finally)
>> close of the server socket channel
>> and the 2nd createReg. But that can't be avoided. If the port is
>> re-used in that gap
>> the test will fail. (And the exception handler at 77 will see an
>> in-use and retry).
> Yes, you're right.
>>
>> 67: The exception being caught is already one thrown by
>> TestLibrary.bomb so it would be
>> cleaner to just re-throw e; or better yet, just don't bother to
>> catch the exception.
>> That exception should cause the test to fail.
> It's to catch IOException by ServerSocketChannel.open, bind. Seems
> it's a little confusing, so I declare at main function to throw
> IOException.
>>
>> It may be personal coding style but the createReg method with a
>> boolean flag to suppress
>> the exception is just more confusing that putting the code in-line in
>> the two places it is used.
> I think it's mainly because of original parameter name remoteOK, so
> rename it as expectException, and move it to the last parameter.
>
> new webrev is updated in place:
> http://cr.openjdk.java.net/~mli/8188897/webrev.02/
>
> Thank you
> -Hamlin
>>
>> Thanks, Roger
>>
>>
>> On 4/8/2018 4:10 AM, Hamlin Li wrote:
>>> Hi Roger,
>>>
>>> I have changed to not use RegistryVM at all, please review the
>>> patch: http://cr.openjdk.java.net/~mli/8188897/webrev.02/
>>>
>>> Thank you
>>>
>>> -Hamlin
>>>
>>>
>>> On 04/04/2018 10:15 PM, Roger Riggs wrote:
>>>> Hi Hamlin,
>>>>
>>>> Reexport.java:
>>>>
>>>> I think this change to use a separate process for the 2nd registry
>>>> changes the test so that it does not
>>>> address the original test case. The original problem was the
>>>> incorrect retention of an object in
>>>> the object table when the create of a registry in the same process
>>>> failed.
>>>> Finally being able to create the registry in the same process
>>>> assured that the object was not
>>>> retained in the object table.
>>>>
>>>> Go back to creating the 2nd registry in the test process.
>>>>
>>>>
>>>> RegistryVM.java: 2, the copyright update should be "2017, 2018,"
>>>> range.
>>>>
>>>> (I'm really not a fan of all the RegistryVM methods with the same
>>>> name and minimal and implicit
>>>> differences in their functions. When reading the test, you have to
>>>> go and read the RegistryVM method
>>>> to see what it does. I would have preferred that the full
>>>> createRegistryVM (out, err, options, port) method
>>>> was used directly in the tests. In the case of a method used once,
>>>> it is an inconvenience method, not a convenience).
>>>>
>>>> The new terminate() method is quite similar to the existing
>>>> cleanup() method which does not wait.
>>>> It would be a good cleanup to figure out if another method is
>>>> really needed.
>>>> The override is going to change the behavior of the existing uses
>>>> of terminate().
>>>> It should be checked that it does not break any existing uses.
>>>>
>>>> 178: 187: The method comments are not consistent, one says forcibly
>>>> and the other gracefully
>>>> but both call requestExit and both call destroy().
>>>>
>>>> Thanks, Roger
>>>>
>>>>
>>>> On 4/3/2018 11:35 PM, Hamlin Li wrote:
>>>>> Hi Joe, Roger,
>>>>>
>>>>> Thank you for reviewing, I have refactored the test more and fix
>>>>> as you suggested.
>>>>>
>>>>> please review http://cr.openjdk.java.net/~mli/8188897/webrev.01/
>>>>>
>>>>> Thank you
>>>>>
>>>>> -Hamlin
>>>>>
>>>>>
>>>>> On 04/04/2018 10:42 AM, Joseph D. Darcy wrote:
>>>>>> Hello,
>>>>>>
>>>>>> Some general comments on the coding for tests like this:
>>>>>>
>>>>>> * It is preferable to avoid sleep in tests to avoid increasing
>>>>>> the minimum amount of time a test takes to run. This helps limit
>>>>>> the overall time it takes the test suite to run.
>>>>>>
>>>>>> * If timeouts are used, it is recommend to factor the maximum
>>>>>> time waited with the jtreg timeout scaling factor; I don't recall
>>>>>> its exact name. In other words, many of our tests are run on
>>>>>> heavily loaded systems and the tests take longer than run than on
>>>>>> typical laptops and workstations so jtreg is invoked with an
>>>>>> timeout scaling factor. Individual tests should be sensitive to
>>>>>> this scaling factor for any internal timeout that need to be used.
>>>>>>
>>>>>> HTH,
>>>>>>
>>>>>> -Joe
>>>>>>
>>>>>> On 4/3/2018 7:48 AM, Roger Riggs wrote:
>>>>>>> Hi Hamlin,
>>>>>>>
>>>>>>> Instead of a simple time delay, it would be useful to wait for
>>>>>>> the RegistryVM to terminate.
>>>>>>> In killRegistry: 149, adding subreg.waitFor() should be
>>>>>>> sufficient.
>>>>>>>
>>>>>>> 58: If using a 'for' loop it would be easier to understand if it
>>>>>>> included the usual start, increment and termination.
>>>>>>> Instead of burying it in the exception handler.
>>>>>>>
>>>>>>> 59, 102, 104: the introduction of the kill boolean makes the
>>>>>>> test harder to understand and seems to be unnecessary.
>>>>>>> the killRegistry() method already will only kill the subprocess
>>>>>>> if it still is alive.
>>>>>>>
>>>>>>> Roger
>>>>>>>
>>>>>>> On 4/2/2018 6:33 AM, Hamlin Li wrote:
>>>>>>>> would you please review the following patch?
>>>>>>>>
>>>>>>>> bug: https://bugs.openjdk.java.net/browse/JDK-8188897
>>>>>>>>
>>>>>>>> webrev: http://cr.openjdk.java.net/~mli/8188897/webrev.00/
>>>>>>>>
>>>>>>>>
>>>>>>>> Thank you
>>>>>>>>
>>>>>>>> -Hamlin
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>
More information about the core-libs-dev
mailing list