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