RFR: 8062537: [TESTBUG] Conflicting GC combinations in hotspot tests

Bengt Rutisson bengt.rutisson at oracle.com
Thu Oct 30 21:09:11 UTC 2014


Hi Evgeniya,

On 10/30/14 3:05 PM, Evgeniya Stepanova wrote:
> Hi,
>
> Please review changes for 8062537, the OpenJDK/hotspot part of the 
> JDK-8019361 <https://bugs.openjdk.java.net/browse/JDK-8019361>
>
> bug: https://bugs.openjdk.java.net/browse/JDK-8062537
> fix: http://cr.openjdk.java.net/~eistepan/8062537/webrev.00/
>
> Problem: Some tests explicitly set GC and fail when jtreg set another GC.
> Solution: Such tests marked with the jtreg tag "requires" to skip test 
> if there is a conflict

Thanks for fixing this! It is really great that we finally start sorting 
this out.

First a general comment. The @requires tag has been developed without 
much cooperation with the GC team. We did have a lot of feedback when it 
was first presented a year ago, but it does not seem like this feedback 
was incorporated into the @requires that was eventually built.

I think this change that gets proposed now is a big step forward and I 
won't object to it. But I am pretty convinced that we will soon run in 
to the limitations of the current @requires implementation and we will 
have to redo this work.

Some of the points I don't really like about the @requires tag are:

- the "vm.gc" abstraction is more limiting than helping. It would have 
been better to just "require" any command line flag.
- the requirement should be per @run tag. Right now we have to do what 
you did in this change and use vm.gc=null even when some tests could 
actually have been run when a GC was specified.
- there are many tests that require more than just a specific GC. Often 
there are other flags that can't be changed either for the test to work 
properly.

Maybe this is not the right place to discuss the current implementation 
of the @requires tag. I just want to say that I'm not too happy about 
how the @requires tag turned out. But assuming we have to use it the way 
it is now I guess the proposed changeset looks good.

> Tested locally with different GC flags (-XX:+UseG1GC, 
> -XX:+UseParallelGC, -XX:+UseSerialGC, -XX:+UseConcMarkSweep and 
> without any GC flag). Tests are being excluded as expected. No tests 
> failed because of the conflict.
Have you tested with -Xconcgc too? It's an alias for 
-XX:+UseConcMarkSweepGC.

I think some of the test, like 
test/gc/startup_warnings/TestDefNewCMS.java, will fail if you run with 
-XX:+UseParNewGC. Others, like 
test/gc/startup_warnings/TestParNewCMS.java, will fail if you run with 
-XX:-UseParNewGC. Could you test these two cases too?

Similarly it looks to me like there are tests that will fail if you run 
them with -XX:-UseParallelOldGC or -XX:+UseParallelOldGC.

Just a heads up. These two tests will soon be removed. I'm about to push 
a changeset that removes them:

test/gc/startup_warnings/TestCMSIncrementalMode.java
test/gc/startup_warnings/TestCMSNoIncrementalMode.java

Is there some way of making sure that all tests are run at one time or 
another. With this change there is a risk that some tests are never run 
and always skipped. Will we somehow be tracking what gets skipped and 
make sure that all tests are at least run once with the correct GC so 
that it is not skipped all the time?

Thanks,
Bengt

>
> Thanks,
> Evgeniya Stepanova
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20141030/b390b20b/attachment.html>


More information about the hotspot-compiler-dev mailing list