RFR: 7945: Avoid throwing NoSuchFieldException in ValueReaders$ReflectiveReader
Richard Startin
duke at openjdk.org
Tue Oct 25 09:13:29 UTC 2022
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>
-------------
Commit messages:
- 7945: Avoid throwing NoSuchFieldException in ValueReaders$ReflectiveReader
Changes: https://git.openjdk.org/jmc/pull/447/files
Webrev: https://webrevs.openjdk.org/?repo=jmc&pr=447&range=00
Issue: https://bugs.openjdk.org/browse/JMC-7945
Stats: 29 lines in 1 file changed: 21 ins; 3 del; 5 mod
Patch: https://git.openjdk.org/jmc/pull/447.diff
Fetch: git fetch https://git.openjdk.org/jmc pull/447/head:pull/447
PR: https://git.openjdk.org/jmc/pull/447
More information about the jmc-dev
mailing list