RFR for JDK-7168267: TEST_BUG: Cleanup of rmi regression tests (activation and others)
Tristan Yan
tristan.yan at oracle.com
Fri Dec 20 04:08:42 UTC 2013
Thanks Stuart
I changed ReadTimeoutTest.java only apply CountdownLatch part. Please
review.
http://cr.openjdk.java.net/~tyan/JDK-7168267/webrev.02/
Thank you
Tristan
On 12/20/2013 10:47 AM, Stuart Marks wrote:
> Hi Tristan,
>
> Changes mostly look good.
>
> There is an ignored InterruptedException in both versions of
> UseCustomSocketFactory.java, but that was there already; it's not
> clear what should be done in this case anyway. This is something to
> keep in mind for a future cleanup. Hm, some duplicate code here as
> well, again something to think about for the future.
>
> There is a serious problem with the change to ReadTimeoutTest.java,
> however. The change removes the (old) line 72, which is
> TestIface stub = impl.export();
> probably because there was an IDE warning that the variable "stub" is
> unused. This much is true, but it's essential for impl.export() to be
> called, because that exports the object, which creates a socket using
> the socket factory, which eventually results in the fac.whichPort()
> call below returning the port that was open. In the absence of the
> export() call, whichPort() returns zero which causes the test to abort
> immediately.
>
> In addition, the refactoring to use try-with-resources changes the
> order of execution of certain code, and it changes the scope of things
> handled by the finally-block.
>
> One purpose of the finally-block is to unexport the remote object so
> it makes sense to begin the try-block immediately following the
> export. The original code did this (well, only after a benign local
> variable declaration). The change moves the try-block few lines down,
> which means there is a larger window of time within which the
> finally-block won't be executed. This isn't obviously a problem, but
> it's a change nonetheless.
>
> Also, the change alters the order of opening the client socket and the
> "connecting to listening port" message, so the message comes after the
> port is opened, instead of before. Again, an apparently small change,
> but if there's an exception opening the port, the port number being
> opened won't be printed out.
>
> The main point of the changes to this file, however, is good, which is
> to replace the unsafe use of multi-thread access to a boolean array
> and polling of that value, with a CountDownLatch. So that part of the
> change should go in. The problem is the apparently innocuous code
> cleanups (use of try-with-resources, removal of apparently unused
> local variable) which cause the test to break or otherwise change its
> behavior.
>
> I could go ahead and push this changeset, omitting the changes to
> ReadTimeoutTest.java. Or, you could update the changeset to revert all
> of the changes to ReadTimeoutTest.java except for those necessary to
> implement the use of CountDownLatch. Either way is fine with me.
>
> Which would you prefer?
>
> s'marks
>
>
> On 12/18/13 6:51 AM, Tristan Yan wrote:
>> Hi Everyone
>> Please review the code fix for bug JDK-7168267
>>
>> http://cr.openjdk.java.net/~tyan/JDK-7168267/webrev.01/
>> <http://cr.openjdk.java.net/%7Etyan/JDK-7168267/webrev.01/>
>>
>> This is a cleanup for RMI tests. trying to use real timeout to
>> replace a fixed number of loop.
>> Thank you
>>
>> Tristan
>>
>>
>> On 12/12/2013 05:33 AM, Stuart Marks wrote:
>>> On 12/10/13 6:10 PM, Tristan Yan wrote:
>>>> /Hi everyone
>>>> I am working on bug JDK-7168267
>>>>
>>>
>>> Correct link is
>>>
>>> https://bugs.openjdk.java.net/browse/JDK-7168267
>>>
>>>> Root Cause:
>>>> - Per Stuart's comment, this is a clean up bug.
>>>>
>>>> Suggested Fix:
>>>> - Will use timeout to replace loop.
>>>
>>> We should probably look at specific cases for this. There are places
>>> where the test is waiting for some external service to become ready
>>> (e.g., rmiregistry). There's no notification for things like this so
>>> wait-with-timeout cannot be used. Pretty much the only thing that
>>> can be done is to poll reasonably often until the service is ready,
>>> or until the timeout is exceeded.
>>>
>>>> - Also I am fixing two test's performance
>>>> java/rmi/activation/Activatable/forceLogSnapshot - method
>>>> waitAllStarted is
>>>> using sleep to poll 50 restartedObject to be true, we can use modern
>>>> CountDownLatch to implement blocking-time wait.
>>>> java/rmi/activation/Activatable/checkAnnotations - We can subclass
>>>> ByteArrayOutputStream which support notification when data was
>>>> written. Also use
>>>> two thread wait output string and error string to be not null.
>>>
>>> These sound reasonble. Go ahead and file sub-tasks for these and
>>> then choose one to work on first. (I think it will get too confusing
>>> if we try to work on them all simultaneously.) Either post a
>>> detailed description of what you intend to do, or if it's simple
>>> enough, just post a webrev.
>>>
>>> s'marks
>>>
>>>>
>>>> Please let me know if you have any comments or suggestions.
>>>> / /
>>>> Thank you
>>>> Tristan
>>>>
>>>> On 12/05/2013 09:02 AM, Stuart Marks wrote:
>>>> /
>>>>> /On 12/3/13 11:05 PM, Tristan Yan wrote:
>>>>> /
>>>>>> /I am working on
>>>>>> https://bugs.openjdk.java.net/browse/JDK-7168267. This bug is
>>>>>> asking performance improvement for RMI test. Because this would
>>>>>> involve
>>>>>> different RMI tests. I’d like to use this cr as an umbrella bug,
>>>>>> create sub-cr
>>>>>> for different test. Then I can make progress on sub-cr. Please
>>>>>> let me know your
>>>>>> opinion on this.
>>>>>> /
>>>>> /
>>>>> Actually JDK-7168267 is more about various test cleanups, and
>>>>> JDK-8005436 is
>>>>> more about performance. Both bugs, though, make general statements
>>>>> about "the
>>>>> RMI tests" and don't have much information about specific actions
>>>>> that need to
>>>>> be taken. I've added some notes to JDK-7168267 about some cleanups
>>>>> that could
>>>>> be done.
>>>>> / /
>>>>> If there are specific actions for either of these bugs, then yes,
>>>>> creating
>>>>> Sub-Tasks of these bugs and fixing them individually is the right
>>>>> thing to do.
>>>>> / /
>>>>> s'marks
>>>>> /
>>>> /
>>>> /
>>
>
More information about the core-libs-dev
mailing list