RFR: 8317802: jmh tests fail with Unable to find the resource: /META-INF/BenchmarkList after JDK-8306819

Jaikiran Pai jpai at openjdk.org
Tue Oct 10 14:42:39 UTC 2023


On Tue, 10 Oct 2023 14:21:40 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:

> Can I please get a review of this change which proposes to fix jmh test launch failures noted in https://bugs.openjdk.org/browse/JDK-8317802?
> 
> jmh apparently relies on annotation processors during compilation of a benchmark. When annotation processing is disabled, the generated benchmark jar is unusable when the benchmark is launched and fails with:
> 
> 
> Exception in thread "main" java.lang.RuntimeException: ERROR: Unable to find the resource: /META-INF/BenchmarkList
> 	at org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:98)
> 	at org.openjdk.jmh.runner.BenchmarkList.find(BenchmarkList.java:124)
> 	at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:252)
> 	at org.openjdk.jmh.runner.Runner.run(Runner.java:208)
> 	at org.openjdk.jmh.Main.main(Main.java:71)
> 
> After the integration of https://bugs.openjdk.org/browse/JDK-8306819 recently in JDK mainline, `javac` no longer runs annotation processors by default. These jmh tests that are compiled as part of the JDK build will now have to enable annotation processing explicitly.
> 
> The commit in this PR enables annotation processing by setting `-proc:full` (implying run annotation processors as well as compile the files) when compiling the benchmarks.
> 
> I tested this change locally. Without this change, the following command fails:
> 
> 
> make test TEST="micro:java.lang.ArraysSort"                                                               
> ...
> Test selection 'micro:java.lang.ArraysSort', will run:
> * micro:java.lang.ArraysSort
> 
> Running test 'micro:java.lang.ArraysSort'
> Exception in thread "main" java.lang.RuntimeException: ERROR: Unable to find the resource: /META-INF/BenchmarkList
> 	at org.openjdk.jmh.runner.AbstractResourceReader.getReaders(AbstractResourceReader.java:98)
> 	at org.openjdk.jmh.runner.BenchmarkList.find(BenchmarkList.java:124)
> 	at org.openjdk.jmh.runner.Runner.internalRun(Runner.java:252)
> 	at org.openjdk.jmh.runner.Runner.run(Runner.java:208)
> 	at org.openjdk.jmh.Main.main(Main.java:71)
> Finished running test 'micro:java.lang.ArraysSort'
> 
> 
> 
> After the change in this PR, the same command works fine and the jmh benchmark is run.

Magnus noted in the JBS issue that it would be good to enable only the specific JMH annotation processor instead of using `-proc:full`. I agree with Magnus.

I looked at the annotation processor that jmh jar ships with (in `META-INF/services`) and I see that it's `org.openjdk.jmh.generators.BenchmarkProcessor`. I've now updated this PR to use `-processor` option instead of `-proc:full`.

With this latest change, I cleaned up the local JDK build and rebuilt everything fresh and used the same command as previously to run the micro benchmark. It continues to pass with this new change.

-------------

PR Comment: https://git.openjdk.org/jdk/pull/16122#issuecomment-1755567425


More information about the build-dev mailing list