RFR: 7231: JMC createReport for JMC8 Automated Analysis fails to evaluate several rules
Alex Macdonald
aptmac at openjdk.java.net
Fri Sep 24 21:38:04 UTC 2021
This PR addresses JMC-7231 [[0]](https://bugs.openjdk.java.net/browse/JMC-7231), in which using `JfrHtmlRulesReport` throws a number of exceptions and fails to evaluate a handful of rules.
I used some of the review comments [[1]](https://github.com/openjdk/jmc/pull/302#pullrequestreview-726780649) that I made in the other open PR to address the same issue.
As far as I can tell, there are two main issues here.
The first is some rules now (after the Rules 2.0 update) have dependencies, these are (4) `GcLockerRule`, `GcStallRule`, `HeapInspectionRule`, and `SystemGcRule` which depend on `GarbageCollectionInfoRule`. The problem here is that if `GarbageCollectionInfoRule` isn't evaluated then the other four rules end up throwing an NPE while trying to evaluate.
The second issue is that as of Rules 2.0, on the jmc.ui Automated Analysis page we use `RulesToolkit.matchesEventAvailabilityMap()` to verify is an event is is available and if the rule should be evaluated. This check wasn't replicated on the `core` implementation, so I've added it in. What's interesting here is that in the test jfr I was using, `GarbageCollectionInfoRule` was filtered out by `matchesEventAvailabilityMap()`, which was causing the above 4 Gc rules to explode.
The solution I've put together uses two lists to track 1). rules that are unavailable due to being filtered out by `matchesEventAvailabilityMap()`, and 2). rules that have dependencies. It later loops through the list of rules with dependencies, and checks to see if they exist in the list with unavailable rules. If a rule is not able to be evaluated by either 1). not being available or 2). by having a dependency that is not available, it returns a completed future `IResult` containing "not available", similar to how on this is handled on the jmc.ui side. Then the rest of the rules report proceeds as usual.
I think the easiest way to verify/try this fix is by creating a run configuration for JfrHtmlRulesReport in Eclipse, and feeding it a jfr file.
[0] https://bugs.openjdk.java.net/browse/JMC-7231
[1] https://github.com/openjdk/jmc/pull/302#pullrequestreview-726780649
-------------
Commit messages:
- 7231: JMC createReport for JMC8 Automated Analysis fails to evaluate several rules
Changes: https://git.openjdk.java.net/jmc/pull/311/files
Webrev: https://webrevs.openjdk.java.net/?repo=jmc&pr=311&range=00
Issue: https://bugs.openjdk.java.net/browse/JMC-7231
Stats: 84 lines in 6 files changed: 80 ins; 0 del; 4 mod
Patch: https://git.openjdk.java.net/jmc/pull/311.diff
Fetch: git fetch https://git.openjdk.java.net/jmc pull/311/head:pull/311
PR: https://git.openjdk.java.net/jmc/pull/311
More information about the jmc-dev
mailing list