RFR(XL): 8157957 - ClassNotFoundException: jdk.test.lib.JDKToolFinder

Daniel D. Daugherty daniel.daugherty at oracle.com
Wed Aug 17 00:36:42 UTC 2016


 > I think these changes should absolutely not wait.  If we need 
modifications
 > to a few tests, we can do them in a small changeset.

I'm very much in agreement that this needs to be done now.

Dan

On 8/16/16 1:51 PM, George Triantafillou wrote:
> +1!
>
> -George
>
> On 8/15/2016 8:06 PM, Coleen Phillimore wrote:
>>
>> I Reviewed these changes (via patchfiles mostly).   They're an 
>> enormous amount of work but they'll make our jobs writing and running 
>> tests easier and less time consuming.  There shouldn't be compilcated 
>> @build rules which are barriers to writing correct tests.
>>
>> The new rules are really simple.  In addition, we have tests with 
>> .jcod or .jasm files which would require a @build directive but that 
>> makes sense.
>>
>> I think these changes should absolutely not wait.  If we need 
>> modifications to a few tests, we can do them in a small changeset. 
>> This change will make testing more reliable, ie. less random 
>> ClassNotFoundException bugs that are difficult and time consuming to 
>> figure out, and we're going to need this as we get closer to the JDK9 
>> deadline!
>>
>> Thanks,
>> Coleen
>>
>>
>> On 8/15/16 5:51 PM, Christian Tornqvist wrote:
>>> Hi Igor,
>>>
>>>> 1. why have you put InfiniteLoop and TimeLimitedRunner into apps 
>>>> package? it looks like this package contained classes which are 
>>>> application: LingeredApp and LingeredAppWithDeadlock, neither 
>>>> TimeLimitedRunner >nor InfiniteLoop is an application. 
>>>> ClassFileInstaller, on contrary, is an application, but it’s in 
>>>> default package.
>>> But they're wrappers for other things, we could place them in 
>>> jdk.test.lib.wrappers if that makes you happier. ClassFileInstaller 
>>> is a utility used by @run, so putting this in a package would just 
>>> make it noisier to write tests using this (all the Whitebox tests 
>>> right now). In the future, we may be able to change how we use 
>>> Whitebox in jtreg to get rid of the whole @build/@run/@run chain.
>>>
>>>> 2. AYK, we have tests for our testlibraries, I think those tests 
>>>> should be moved from hotspot/test/testlibrary_tests/ to 
>>>> root/test/testlibrary_tests/ together w/ libraries. btw, 
>>>> RedefineClassHelper has a reference to 
>>>> >test/testlibrary_tests/RedefineClassTest.java
>>> This requires creating a new Test root in /test, I was looking at 
>>> doing this but then decided not to.
>>>
>>>> 1. in some tests you haven’t replaced @build <test> w/ @buid 
>>>> s.h.WhiteBox, e.g. 
>>>> test/compiler/calls/fromInterpreted/InterpretedInvokeSpecial2NativeTest.java 
>>>> still has '@build compiler.calls.common.InvokeSpecial' >however the 
>>>> test uses the same code as 
>>>> test/compiler/calls/fromInterpreted/InterpretedInvokeSpecial2InterpretedTest 
>>>> and you made replacement in latter.
>>> I most likely just missed replacing that @build, I'll look at it 
>>> tomorrow.
>>>
>>>> 2. in some tests you haven’t removed ‘@build s.h.WhiteBox’ when it 
>>>> should be possible, e.g. 
>>>> test/compiler/jsr292/NonInlinedCall/InvokeTest.java. the test 
>>>> doesn’t use ClassFileInstaller or reflection to get s.h.WhiteBox, 
>>>> >so its dependency on WhiteBox class is statically computable and 
>>>> hence there is no need to have s.h.WhiteBox in @build action.
>>> The problem is that as soon as someone starts @build:ing a class, it 
>>> gets really tricky, especially when there are inheritance and 
>>> different classpaths (@library) involved. So the safest way to 
>>> resolve this is to make sure everyone @build sun.hotspot.Whitebox
>>>
>>>> what I’m saying is it’s hard to correct all @build in all our tests 
>>>> and I don’t think it’s safe to do it now given the size, 
>>>> intermittent nature of possible bugs and how close we are to RDP. 
>>>> so I’d prefer to postpone @build >part of change till jdk 10.
>>> The @build are in most cases the cause of the issue, so not fixing 
>>> this would mean not fixing this issue.
>>>
>>> Thanks,
>>> Christian
>>> -----Original Message-----
>>> From: Igor Ignatyev [mailto:igor.ignatyev at oracle.com]
>>> Sent: Monday, August 15, 2016 5:13 PM
>>> To: Christian Tornqvist <christian.tornqvist at oracle.com>
>>> Cc: hotspot-dev at openjdk.java.net
>>> Subject: Re: RFR(XL): 8157957 - ClassNotFoundException: 
>>> jdk.test.lib.JDKToolFinder
>>>
>>> Hi Christian,
>>>
>>> thank you for your tremendous work and sorry that you had to redo it 
>>> ‘cuz of me )
>>>
>>> I’ve not finished review yet, but in order to speed up things a 
>>> little bit, here is my questions/comments so far:
>>>
>>> - http://cr.openjdk.java.net/~ctornqvi/webrev/8157957/webrev.00/root
>>> 1. why have you put InfiniteLoop and TimeLimitedRunner into apps 
>>> package? it looks like this package contained classes which are 
>>> application: LingeredApp and LingeredAppWithDeadlock, neither 
>>> TimeLimitedRunner nor InfiniteLoop is an application. 
>>> ClassFileInstaller, on contrary, is an application, but it’s in 
>>> default package.
>>> 2. AYK, we have tests for our testlibraries, I think those tests 
>>> should be moved from hotspot/test/testlibrary_tests/ to 
>>> root/test/testlibrary_tests/ together w/ libraries. btw, 
>>> RedefineClassHelper has a reference to 
>>> test/testlibrary_tests/RedefineClassTest.java
>>>
>>> - http://cr.openjdk.java.net/~ctornqvi/webrev/8157957/webrev.00/hotspot
>>> while I was looking thru the changeset I've noticed that 1. in some 
>>> tests you haven’t replaced @build <test> w/ @buid s.h.WhiteBox, e.g. 
>>> test/compiler/calls/fromInterpreted/InterpretedInvokeSpecial2NativeTest.java 
>>> still has '@build compiler.calls.common.InvokeSpecial' however the 
>>> test uses the same code as 
>>> test/compiler/calls/fromInterpreted/InterpretedInvokeSpecial2InterpretedTest 
>>> and you made replacement in latter.
>>> 2. in some tests you haven’t removed ‘@build s.h.WhiteBox’ when it 
>>> should be possible, e.g. 
>>> test/compiler/jsr292/NonInlinedCall/InvokeTest.java. the test 
>>> doesn’t use ClassFileInstaller or reflection to get s.h.WhiteBox, so 
>>> its dependency on WhiteBox class is statically computable and hence 
>>> there is no need to have s.h.WhiteBox in @build action.
>>>
>>> what I’m saying is it’s hard to correct all @build in all our tests 
>>> and I don’t think it’s safe to do it now given the size, 
>>> intermittent nature of possible bugs and how close we are to RDP. so 
>>> I’d prefer to postpone @build part of change till jdk 10.
>>>
>>> Thanks,
>>> — Igor
>>>
>>>> On Aug 12, 2016, at 6:32 PM, Christian Tornqvist 
>>>> <christian.tornqvist at oracle.com> wrote:
>>>>
>>>> Hi everyone,
>>>>
>>>>
>>>>
>>>> Please review this fix for the CNFE issue we've had in the Hotspot
>>>> jtreg tests. The two big culprits for the intermittent CNFE are:
>>>> Duplicate classes on classpath with different content and @build tags
>>>> causing class files to be written in bad places.
>>>>
>>>>
>>>>
>>>> There has been a lot of confusion around when there's a need to add
>>>> @build to a test. In general it turns out it has been overused, which
>>>> can lead to side effects. Here's an easy rule:
>>>>
>>>>
>>>>
>>>> If you run only that test in a clean jtwork folder and it passes, then
>>>> there's no need for @build.
>>>>
>>>>
>>>>
>>>> If it doesn't pass, then it might need an explicit @build, here are
>>>> some examples when it might be needed:
>>>>
>>>>
>>>>
>>>> * If the class is used by ClassFileInstaller and this is invoked by
>>>> @run main ClassFileInstaller (sun.hotspot.Whitebox is an example of
>>>> this)
>>>>
>>>> * If it's a class that that doesn't have reference from the Test
>>>> itself (if "javac Test" wouldn't compile it, you might need to
>>>> explicitly @build it)
>>>>
>>>>
>>>>
>>>> The change includes:
>>>>
>>>>
>>>>
>>>> * Removing all unnecessary @build tags, some of the CNFE was due to
>>>> use of it to compile classes in /test/lib or /testlibrary when having
>>>> different classpath (@library) set.
>>>>
>>>> * Changed @build <testname> to @build sun.hotspot.Whitebox
>>>>
>>>> * Moved /test/lib/share/classes/jdk/test/lib to /test/lib/jdk/test/lib
>>>>
>>>> * Some of the classes in /hotspot/test/testlibrary was only used by
>>>> one or two tests, these classes shouldn't be part of the shared
>>>> testlibrary code and they were moved to the location of the test
>>>>
>>>> * Merged/moved the classes in /hotspot/test/testlibrary to /test/lib
>>>>
>>>> * Moved some of the /test/lib classes into packages
>>>>
>>>> * Changed @library /testlibrary to @library /test/lib
>>>>
>>>> * Changed imports from jdk.test.lib.* to explicit imports to help in
>>>> future refactoring
>>>>
>>>>
>>>>
>>>> Almost all of the changes in here are in the jtreg @build and @library
>>>> tags, very little code has been touched. Copyright headers will be
>>>> updated before push.
>>>>
>>>>
>>>>
>>>> Testing done: Ran the entire hotspot/test/ folder multiple times
>>>> locally and in RBT
>>>>
>>>>
>>>>
>>>> Webrev:
>>>>
>>>> http://cr.openjdk.java.net/~ctornqvi/webrev/8157957/webrev.00/
>>>>
>>>>
>>>>
>>>> A recently added test required me to fix that as well, generating and
>>>> uploading a new webrev of the Hotspot repo changes takes about 3h
>>>> though, so here's the diff for that file:
>>>>
>>>>
>>>>
>>>> diff -r f37577c20a6b test/serviceability/sa/sadebugd/SADebugDTest.java
>>>>
>>>> --- a/test/serviceability/sa/sadebugd/SADebugDTest.java Wed Aug 10
>>>> 21:02:14
>>>> 2016 -0400
>>>>
>>>> +++ b/test/serviceability/sa/sadebugd/SADebugDTest.java Fri Aug 12
>>>> +++ 11:25:54
>>>> 2016 -0400
>>>>
>>>> @@ -26,7 +26,7 @@
>>>>
>>>>   * @summary Checks that the jshdb debugd utility sucessfully starts
>>>>
>>>>   *          and tries to attach to a running process
>>>>
>>>>   * @modules java.base/jdk.internal.misc
>>>>
>>>> - * @library /test/lib/share/classes
>>>>
>>>> + * @library /test/lib
>>>>
>>>>   *
>>>>
>>>>   * @run main/othervm SADebugDTest
>>>>
>>>>   */
>>>>
>>>>
>>>>
>>>> Bug:
>>>>
>>>> https://bugs.openjdk.java.net/browse/JDK-8157957
>>>>
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Christian
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>
>



More information about the hotspot-dev mailing list