Integrated: 7945: Avoid throwing NoSuchFieldException in ValueReaders$ReflectiveReader

Richard Startin duke at openjdk.org
Wed Oct 26 17:38:33 UTC 2022


On Tue, 25 Oct 2022 09:01:22 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>

This pull request has now been integrated.

Changeset: a4ee5584
Author:    Richard Startin <richard.startin at datadoghq.com>
Committer: Marcus Hirt <hirt at openjdk.org>
URL:       https://git.openjdk.org/jmc/commit/a4ee55842d14d04d37f7245f752c78c13eb1d60b
Stats:     30 lines in 1 file changed: 21 ins; 3 del; 6 mod

7945: Avoid throwing NoSuchFieldException in ValueReaders$ReflectiveReader

Reviewed-by: hirt, jbachorik

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

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


More information about the jmc-dev mailing list