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