RFR: 7945: Avoid throwing NoSuchFieldException in ValueReaders$ReflectiveReader [v2]

Jaroslav Bachorik jbachorik at openjdk.org
Tue Oct 25 11:53:43 UTC 2022


On Tue, 25 Oct 2022 11:17:25 GMT, Richard Startin <duke at openjdk.org> wrote:

>> When using jmc-common in a backend process we throw the following swallowed exception millions of times a day:
>> 
>> 
>> java.lang.NoSuchFieldException: package
>> 	at java.base/java.lang.Class.getField(Class.java:2149)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.ValueReaders$ReflectiveReader.addField(ValueReaders.java:593)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager$TypeEntry.getReader(TypeManager.java:200)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager.createFieldReader(TypeManager.java:493)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager.access$000(TypeManager.java:86)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager$TypeEntry.getReader(TypeManager.java:198)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager.createFieldReader(TypeManager.java:493)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager.access$000(TypeManager.java:86)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager$TypeEntry.getReader(TypeManager.java:198)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager.createFieldReader(TypeManager.java:493)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager.access$000(TypeManager.java:86)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager$TypeEntry.getReader(TypeManager.java:198)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager.createFieldReader(TypeManager.java:493)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager.access$000(TypeManager.java:86)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager$EventTypeEntry.init(TypeManager.java:357)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.TypeManager.<init>(TypeManager.java:432)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.ChunkLoaderV1.call(ChunkLoaderV1.java:70)
>> 	at org.openjdk.jmc.flightrecorder.internal.parser.v1.ChunkLoaderV1.call(ChunkLoaderV1.java:48)
>> 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
>> 	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
>> 	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
>> 	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
>> 	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
>> 	at java.base/java.lang.Thread.run(Thread.java:833)
>> 
>> 
>> This adds a simple memoization to store the identifier to field mapping, with size bounded by the number of classes used in JFR events.
>> 
>> ---------
>> ### Progress
>> - [ ] Commit message must refer to an issue
>> - [ ] Change must be properly reviewed (1 review required, with at least 1 [Committer](https://openjdk.org/bylaws#committer))
>> 
>> ### Error
>>  ⚠️ The pull request body must not be empty.
>> 
>> ### Reviewing
>> <details><summary>Using <code>git</code></summary>
>> 
>> Checkout this PR locally: \
>> `$ git fetch https://git.openjdk.org/jmc pull/447/head:pull/447` \
>> `$ git checkout pull/447`
>> 
>> Update a local copy of the PR: \
>> `$ git checkout pull/447` \
>> `$ git pull https://git.openjdk.org/jmc pull/447/head`
>> 
>> </details>
>> <details><summary>Using Skara CLI tools</summary>
>> 
>> Checkout this PR locally: \
>> `$ git pr checkout 447`
>> 
>> View PR using the GUI difftool: \
>> `$ git pr show -t 447`
>> 
>> </details>
>> <details><summary>Using diff file</summary>
>> 
>> Download this PR as a diff file: \
>> <a href="https://git.openjdk.org/jmc/pull/447.diff">https://git.openjdk.org/jmc/pull/447.diff</a>
>> 
>> </details>
>
> Richard Startin has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains one additional commit since the last revision:
> 
>   7945: Avoid throwing NoSuchFieldException in ValueReaders$ReflectiveReader

Marked as reviewed by jbachorik (Author).

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

PR: https://git.openjdk.org/jmc/pull/447


More information about the jmc-dev mailing list