Skip to content

Commit 6fc0a54

Browse files
authored
fix: Cannot build quick perf from sources (#224)
1 parent dbf5f71 commit 6fc0a54

File tree

12 files changed

+85
-53
lines changed

12 files changed

+85
-53
lines changed

.github/workflows/CI.yml

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,19 @@ jobs:
88
name: Java ${{ matrix.java }}
99
strategy:
1010
matrix:
11-
java: [8, 11, 12, 13, 14, 15, 16, 17]
11+
java: [8, 11, 17]
1212
env:
1313
REPO_SLUG: ${{ github.repository }}
1414
BRANCH: ${{ github.head_ref }}
1515
steps:
16-
- uses: actions/checkout@v2
16+
- uses: actions/checkout@v4
1717
- name: Set up JDK ${{ matrix.java }}
18-
uses: actions/setup-java@v1
18+
uses: actions/setup-java@v4
1919
with:
2020
java-version: ${{ matrix.java }}
21+
distribution: temurin
2122
- name: Cache Maven dependencies
22-
uses: actions/cache@v2
23+
uses: actions/cache@v4
2324
with:
2425
path: ~/.m2
2526
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
@@ -37,13 +38,14 @@ jobs:
3738
REPO_SLUG: ${{ github.repository }}
3839
BRANCH: ${{ github.head_ref }}
3940
steps:
40-
- uses: actions/checkout@v2
41+
- uses: actions/checkout@v4
4142
- name: Set up JDK ${{ matrix.java }}
42-
uses: actions/setup-java@v1
43+
uses: actions/setup-java@v4
4344
with:
4445
java-version: ${{ matrix.java }}
46+
distribution: temurin
4547
- name: Cache Maven dependencies
46-
uses: actions/cache@v2
48+
uses: actions/cache@v4
4749
with:
4850
path: ~/.m2
4951
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
@@ -61,13 +63,14 @@ jobs:
6163
REPO_SLUG: ${{ github.repository }}
6264
BRANCH: ${{ github.head_ref }}
6365
steps:
64-
- uses: actions/checkout@v2
66+
- uses: actions/checkout@v4
6567
- name: Set up JDK ${{ matrix.java }}
66-
uses: actions/setup-java@v1
68+
uses: actions/setup-java@v4
6769
with:
6870
java-version: ${{ matrix.java }}
71+
distribution: temurin
6972
- name: Cache Maven dependencies
70-
uses: actions/cache@v2
73+
uses: actions/cache@v4
7174
with:
7275
path: ~/.m2
7376
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
@@ -85,13 +88,14 @@ jobs:
8588
REPO_SLUG: ${{ github.repository }}
8689
BRANCH: ${{ github.head_ref }}
8790
steps:
88-
- uses: actions/checkout@v2
91+
- uses: actions/checkout@v4
8992
- name: Set up JDK ${{ matrix.java }}
90-
uses: actions/setup-java@v1
93+
uses: actions/setup-java@v4
9194
with:
9295
java-version: ${{ matrix.java }}
96+
distribution: temurin
9397
- name: Cache Maven dependencies
94-
uses: actions/cache@v2
98+
uses: actions/cache@v4
9599
with:
96100
path: ~/.m2
97101
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}

junit4/junit4-12-jvm-test/pom.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
<artifactId>quick-perf-junit4-12-jvm-test</artifactId>
2222

2323
<properties>
24-
<maven.compiler.source>1.7</maven.compiler.source>
25-
<maven.compiler.target>1.7</maven.compiler.target>
26-
<dependencies.max.jdk.version>1.7</dependencies.max.jdk.version>
24+
<maven.compiler.source>1.8</maven.compiler.source>
25+
<maven.compiler.target>1.8</maven.compiler.target>
26+
<dependencies.max.jdk.version>1.8</dependencies.max.jdk.version>
2727
<jar.skipIfEmpty>true</jar.skipIfEmpty>
2828
<gpg.skip>true</gpg.skip>
2929
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>

junit5/junit5-jvm-test/pom.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
<artifactId>quick-perf-junit5-jvm-test</artifactId>
2222

2323
<properties>
24+
<maven.compiler.source>1.8</maven.compiler.source>
25+
<maven.compiler.target>1.8</maven.compiler.target>
26+
<dependencies.max.jdk.version>1.8</dependencies.max.jdk.version>
2427
<jar.skipIfEmpty>true</jar.skipIfEmpty>
2528
<maven.install.skip>true</maven.install.skip>
2629
<maven.deploy.skip>true</maven.deploy.skip>

junit5/junit5-test-util/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<maven.deploy.skip>true</maven.deploy.skip>
2525
<gpg.skip>true</gpg.skip>
2626
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
27+
<allowIncompleteProjects>true</allowIncompleteProjects>
2728
</properties>
2829

2930
<build>

jvm/jfr-annotations/pom.xml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
<artifactId>quick-perf-jfr-annotations</artifactId>
2323

2424
<properties>
25+
<maven.compiler.source>1.8</maven.compiler.source>
26+
<maven.compiler.target>1.8</maven.compiler.target>
27+
<dependencies.max.jdk.version>1.8</dependencies.max.jdk.version>
2528
<javadoc-subpackages>org.quickperf.jvm.jfr.annotation</javadoc-subpackages>
2629
</properties>
2730

@@ -39,7 +42,7 @@
3942
<dependency>
4043
<groupId>org.openjdk.jmc</groupId>
4144
<artifactId>flightrecorder.rules.jdk</artifactId>
42-
<version>7.1.1</version>
45+
<version>8.3.1</version>
4346
</dependency>
4447
<dependency>
4548
<groupId>org.jsoup</groupId>

jvm/jfr-annotations/src/main/java/org/quickperf/jvm/jmcrule/JmcRuleCountMeasureExtractor.java

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,46 +13,62 @@
1313
package org.quickperf.jvm.jmcrule;
1414

1515
import org.openjdk.jmc.common.item.IItemCollection;
16+
import org.openjdk.jmc.common.unit.IQuantity;
1617
import org.openjdk.jmc.common.util.IPreferenceValueProvider;
17-
import org.openjdk.jmc.flightrecorder.rules.IRule;
18-
import org.openjdk.jmc.flightrecorder.rules.Result;
19-
import org.openjdk.jmc.flightrecorder.rules.RuleRegistry;
20-
import org.openjdk.jmc.flightrecorder.rules.Severity;
18+
import org.openjdk.jmc.flightrecorder.rules.*;
19+
import org.openjdk.jmc.flightrecorder.rules.jdk.cpu.HighJvmCpuRule;
20+
import org.openjdk.jmc.flightrecorder.rules.jdk.memory.GarbageCollectionInfoRule;
21+
import org.openjdk.jmc.flightrecorder.rules.jdk.memory.GcStallRule;
22+
import org.openjdk.jmc.flightrecorder.rules.jdk.memory.HeapInspectionRule;
23+
import org.openjdk.jmc.flightrecorder.rules.jdk.memory.SystemGcRule;
2124
import org.quickperf.ExtractablePerformanceMeasure;
2225
import org.quickperf.jvm.jfr.JfrRecording;
2326
import org.quickperf.unit.Count;
2427

2528
import java.io.PrintWriter;
2629
import java.io.StringWriter;
27-
import java.util.ArrayList;
28-
import java.util.List;
30+
import java.util.*;
2931
import java.util.concurrent.ExecutionException;
3032
import java.util.concurrent.RunnableFuture;
33+
import java.util.stream.Collectors;
3134

3235
public class JmcRuleCountMeasureExtractor implements ExtractablePerformanceMeasure<JfrRecording, JmcRulesMeasure> {
3336

3437
public static final JmcRuleCountMeasureExtractor INSTANCE = new JmcRuleCountMeasureExtractor();
35-
36-
private JmcRuleCountMeasureExtractor() {}
38+
//We need to ignore some rules which appear to throw NullPointerException in org.openjdk.jmc:flightrecorder.rules.jdk:8.x.y
39+
private static final List<Class<? extends IRule>> IGNORED_RULES = Arrays.asList(
40+
HighJvmCpuRule.class,
41+
GcStallRule.class,
42+
GarbageCollectionInfoRule.class,
43+
HeapInspectionRule.class,
44+
SystemGcRule.class
45+
);
46+
47+
private JmcRuleCountMeasureExtractor() {
48+
}
3749

3850
@Override
3951
public JmcRulesMeasure extractPerfMeasureFrom(JfrRecording jfrRecording) {
4052

4153
IItemCollection jfrEvents = jfrRecording.getJfrEvents();
42-
List<Result> ruleEvaluations = evaluateJmcRules(jfrEvents);
54+
List<IResult> ruleEvaluations = evaluateJmcRules(jfrEvents);
4355

4456
List<Count> jmcRules = buildJmcRuleCountsFrom(ruleEvaluations);
4557

4658
return new JmcRulesMeasure(jmcRules);
4759

4860
}
4961

50-
private List<Result> evaluateJmcRules(IItemCollection jfrEvents) {
51-
List<Result> ruleEvaluations = new ArrayList<>();
52-
for (IRule rule : RuleRegistry.getRules()) {
53-
RunnableFuture<Result> future = rule.evaluate(jfrEvents, IPreferenceValueProvider.DEFAULT_VALUES);
62+
private List<IResult> evaluateJmcRules(IItemCollection jfrEvents) {
63+
List<IResult> ruleEvaluations = new ArrayList<>();
64+
Collection<IRule> rules = RuleRegistry.getRules().stream()
65+
.filter(r -> !IGNORED_RULES.contains(r.getClass()))
66+
.collect(Collectors.toList());
67+
for (IRule rule : rules) {
68+
RunnableFuture<IResult> future = rule.createEvaluation(jfrEvents,
69+
IPreferenceValueProvider.DEFAULT_VALUES, new ResultProvider());
5470
future.run();
55-
Result result;
71+
IResult result;
5672
try {
5773
result = future.get();
5874
} catch (InterruptedException | ExecutionException e) {
@@ -63,11 +79,11 @@ private List<Result> evaluateJmcRules(IItemCollection jfrEvents) {
6379
return ruleEvaluations;
6480
}
6581

66-
private List<Count> buildJmcRuleCountsFrom(List<Result> ruleEvaluations) {
82+
private List<Count> buildJmcRuleCountsFrom(List<IResult> ruleEvaluations) {
6783
List<Count> jmcRules = new ArrayList<>();
68-
for (Result ruleEvaluation : ruleEvaluations) {
84+
for (IResult ruleEvaluation : ruleEvaluations) {
6985
Count ruleScore = buildJmcRuleCountFrom(ruleEvaluation);
70-
if(!ruleToExclude(ruleScore)) {
86+
if (!ruleToExclude(ruleScore)) {
7187
jmcRules.add(ruleScore);
7288
}
7389
}
@@ -76,26 +92,30 @@ private List<Count> buildJmcRuleCountsFrom(List<Result> ruleEvaluations) {
7692

7793
private boolean ruleToExclude(Count ruleScore) {
7894
String ruleDescription = ruleScore.getComment();
79-
return ruleDescription.contains("Rule: TLAB Allocation Ratio")
80-
|| ruleDescription.contains("Rule: Competing Processes")
81-
|| ruleDescription.contains("Rule: Command Line Options Check")
82-
|| ruleDescription.contains("Rule: Metaspace Live Set Trend");
95+
return ruleDescription.contains("Rule: TLAB Allocation Ratio")
96+
|| ruleDescription.contains("Rule: Competing Processes")
97+
|| ruleDescription.contains("Rule: Command Line Options Check")
98+
|| ruleDescription.contains("Rule: Metaspace Live Set Trend");
8399
}
84100

85-
private Count buildJmcRuleCountFrom(Result result) {
101+
private Count buildJmcRuleCountFrom(IResult result) {
86102
StringWriter stringWriter = new StringWriter();
87103

88104
PrintWriter printWriter = new PrintWriter(stringWriter);
89105
printWriter.println("Rule: " + result.getRule().getName());
90-
printWriter.println("Severity: " + Severity.get(result.getScore()));
91-
long score = (long) result.getScore();
106+
printWriter.println("Severity: " + result.getSeverity());
107+
long score = Optional.ofNullable(result.getResult(TypedResult.SCORE))
108+
.map(IQuantity::longValue)
109+
.orElse(-1L);
92110
printWriter.println("Score: " + score);
93-
String longDescriptionAsHtml = result.getLongDescription();
111+
final String longDescriptionAsHtml = Optional.ofNullable(result.getSummary()).orElse("")
112+
+ Optional.ofNullable(result.getExplanation()).orElse("")
113+
+ Optional.ofNullable(result.getSolution()).orElse("");
94114
String textDesc = HtmlToPlainTextTransformer.INSTANCE.convertHtmlToPlainText(longDescriptionAsHtml);
95115
printWriter.println("Message: " + textDesc);
96116

97117
String description = stringWriter.toString();
98118
return new Count(score, description);
99119
}
100120

101-
}
121+
}

pom.xml

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
<commons-dbcp.version>1.4</commons-dbcp.version>
5050
<maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
5151
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
52+
<maven-enforcer-plugin.version>3.5.0</maven-enforcer-plugin.version>
5253
<logback-classic.version>1.1.0</logback-classic.version>
5354
<jcl-over-slf4j.version>1.7.25</jcl-over-slf4j.version>
5455
<javadoc-subpackages />
@@ -112,8 +113,9 @@
112113
</configuration>
113114
</plugin>
114115
<plugin>
116+
<groupId>org.apache.maven.plugins</groupId>
115117
<artifactId>maven-enforcer-plugin</artifactId>
116-
<version>1.4.1</version>
118+
<version>${maven-enforcer-plugin.version}</version>
117119
<executions>
118120
<execution>
119121
<id>enforce-bytecode-version</id>
@@ -138,7 +140,7 @@
138140
<dependency>
139141
<groupId>org.codehaus.mojo</groupId>
140142
<artifactId>extra-enforcer-rules</artifactId>
141-
<version>1.2</version>
143+
<version>1.9.0</version>
142144
</dependency>
143145
</dependencies>
144146
</plugin>
@@ -292,14 +294,6 @@
292294
<enabled>false</enabled>
293295
</snapshots>
294296
</repository>
295-
<repository>
296-
<id>AdoptOpenJDK</id>
297-
<name>AdoptOpenJDK</name>
298-
<url>https://adoptopenjdk.jfrog.io/adoptopenjdk/jmc-libs</url>
299-
<snapshots>
300-
<enabled>false</enabled>
301-
</snapshots>
302-
</repository>
303297
</repositories>
304298

305299
<developers>

spring/junit4-spring-base-tests/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<maven.deploy.skip>true</maven.deploy.skip>
2727
<gpg.skip>true</gpg.skip>
2828
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
29+
<allowIncompleteProjects>true</allowIncompleteProjects>
2930
</properties>
3031

3132
<dependencies>

sql/sql-hibernate-test-util/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<maven.deploy.skip>true</maven.deploy.skip>
2727
<gpg.skip>true</gpg.skip>
2828
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
29+
<allowIncompleteProjects>true</allowIncompleteProjects>
2930
</properties>
3031

3132
<dependencies>

sql/sql-memory-test-util/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
<maven.deploy.skip>true</maven.deploy.skip>
2828
<gpg.skip>true</gpg.skip>
2929
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
30+
<allowIncompleteProjects>true</allowIncompleteProjects>
3031
</properties>
3132

3233
<dependencies>

testng/testng-jvm-test/pom.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
<artifactId>quick-perf-testng-jvm-test</artifactId>
2121

2222
<properties>
23+
<maven.compiler.source>1.8</maven.compiler.source>
24+
<maven.compiler.target>1.8</maven.compiler.target>
25+
<dependencies.max.jdk.version>1.8</dependencies.max.jdk.version>
2326
<jar.skipIfEmpty>true</jar.skipIfEmpty>
2427
<gpg.skip>true</gpg.skip>
2528
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>

testng/testng-test-util/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
<gpg.skip>true</gpg.skip>
2727
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
2828
<maven.deploy.skip>true</maven.deploy.skip>
29+
<allowIncompleteProjects>true</allowIncompleteProjects>
2930
</properties>
3031

3132
<dependencies>

0 commit comments

Comments
 (0)