Skip to content

fix: Cannot build quick perf from sources #224

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 17 additions & 13 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,19 @@ jobs:
name: Java ${{ matrix.java }}
strategy:
matrix:
java: [8, 11, 12, 13, 14, 15, 16, 17]
java: [8, 11, 17]
env:
REPO_SLUG: ${{ github.repository }}
BRANCH: ${{ github.head_ref }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v1
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: temurin
- name: Cache Maven dependencies
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
Expand All @@ -37,13 +38,14 @@ jobs:
REPO_SLUG: ${{ github.repository }}
BRANCH: ${{ github.head_ref }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v1
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: temurin
- name: Cache Maven dependencies
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
Expand All @@ -61,13 +63,14 @@ jobs:
REPO_SLUG: ${{ github.repository }}
BRANCH: ${{ github.head_ref }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v1
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: temurin
- name: Cache Maven dependencies
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
Expand All @@ -85,13 +88,14 @@ jobs:
REPO_SLUG: ${{ github.repository }}
BRANCH: ${{ github.head_ref }}
steps:
- uses: actions/checkout@v2
- uses: actions/checkout@v4
- name: Set up JDK ${{ matrix.java }}
uses: actions/setup-java@v1
uses: actions/setup-java@v4
with:
java-version: ${{ matrix.java }}
distribution: temurin
- name: Cache Maven dependencies
uses: actions/cache@v2
uses: actions/cache@v4
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
Expand Down
6 changes: 3 additions & 3 deletions junit4/junit4-12-jvm-test/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
<artifactId>quick-perf-junit4-12-jvm-test</artifactId>

<properties>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<dependencies.max.jdk.version>1.7</dependencies.max.jdk.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<dependencies.max.jdk.version>1.8</dependencies.max.jdk.version>
<jar.skipIfEmpty>true</jar.skipIfEmpty>
<gpg.skip>true</gpg.skip>
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
Expand Down
3 changes: 3 additions & 0 deletions junit5/junit5-jvm-test/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@
<artifactId>quick-perf-junit5-jvm-test</artifactId>

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<dependencies.max.jdk.version>1.8</dependencies.max.jdk.version>
<jar.skipIfEmpty>true</jar.skipIfEmpty>
<maven.install.skip>true</maven.install.skip>
<maven.deploy.skip>true</maven.deploy.skip>
Expand Down
1 change: 1 addition & 0 deletions junit5/junit5-test-util/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
<maven.deploy.skip>true</maven.deploy.skip>
<gpg.skip>true</gpg.skip>
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
<allowIncompleteProjects>true</allowIncompleteProjects>
</properties>

<build>
Expand Down
5 changes: 4 additions & 1 deletion jvm/jfr-annotations/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@
<artifactId>quick-perf-jfr-annotations</artifactId>

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<dependencies.max.jdk.version>1.8</dependencies.max.jdk.version>
<javadoc-subpackages>org.quickperf.jvm.jfr.annotation</javadoc-subpackages>
</properties>

Expand All @@ -39,7 +42,7 @@
<dependency>
<groupId>org.openjdk.jmc</groupId>
<artifactId>flightrecorder.rules.jdk</artifactId>
<version>7.1.1</version>
<version>8.3.1</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,46 +13,62 @@
package org.quickperf.jvm.jmcrule;

import org.openjdk.jmc.common.item.IItemCollection;
import org.openjdk.jmc.common.unit.IQuantity;
import org.openjdk.jmc.common.util.IPreferenceValueProvider;
import org.openjdk.jmc.flightrecorder.rules.IRule;
import org.openjdk.jmc.flightrecorder.rules.Result;
import org.openjdk.jmc.flightrecorder.rules.RuleRegistry;
import org.openjdk.jmc.flightrecorder.rules.Severity;
import org.openjdk.jmc.flightrecorder.rules.*;
import org.openjdk.jmc.flightrecorder.rules.jdk.cpu.HighJvmCpuRule;
import org.openjdk.jmc.flightrecorder.rules.jdk.memory.GarbageCollectionInfoRule;
import org.openjdk.jmc.flightrecorder.rules.jdk.memory.GcStallRule;
import org.openjdk.jmc.flightrecorder.rules.jdk.memory.HeapInspectionRule;
import org.openjdk.jmc.flightrecorder.rules.jdk.memory.SystemGcRule;
import org.quickperf.ExtractablePerformanceMeasure;
import org.quickperf.jvm.jfr.JfrRecording;
import org.quickperf.unit.Count;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.RunnableFuture;
import java.util.stream.Collectors;

public class JmcRuleCountMeasureExtractor implements ExtractablePerformanceMeasure<JfrRecording, JmcRulesMeasure> {

public static final JmcRuleCountMeasureExtractor INSTANCE = new JmcRuleCountMeasureExtractor();

private JmcRuleCountMeasureExtractor() {}
//We need to ignore some rules which appear to throw NullPointerException in org.openjdk.jmc:flightrecorder.rules.jdk:8.x.y
private static final List<Class<? extends IRule>> IGNORED_RULES = Arrays.asList(
HighJvmCpuRule.class,
GcStallRule.class,
GarbageCollectionInfoRule.class,
HeapInspectionRule.class,
SystemGcRule.class
);

private JmcRuleCountMeasureExtractor() {
}

@Override
public JmcRulesMeasure extractPerfMeasureFrom(JfrRecording jfrRecording) {

IItemCollection jfrEvents = jfrRecording.getJfrEvents();
List<Result> ruleEvaluations = evaluateJmcRules(jfrEvents);
List<IResult> ruleEvaluations = evaluateJmcRules(jfrEvents);

List<Count> jmcRules = buildJmcRuleCountsFrom(ruleEvaluations);

return new JmcRulesMeasure(jmcRules);

}

private List<Result> evaluateJmcRules(IItemCollection jfrEvents) {
List<Result> ruleEvaluations = new ArrayList<>();
for (IRule rule : RuleRegistry.getRules()) {
RunnableFuture<Result> future = rule.evaluate(jfrEvents, IPreferenceValueProvider.DEFAULT_VALUES);
private List<IResult> evaluateJmcRules(IItemCollection jfrEvents) {
List<IResult> ruleEvaluations = new ArrayList<>();
Collection<IRule> rules = RuleRegistry.getRules().stream()
.filter(r -> !IGNORED_RULES.contains(r.getClass()))
.collect(Collectors.toList());
for (IRule rule : rules) {
RunnableFuture<IResult> future = rule.createEvaluation(jfrEvents,
IPreferenceValueProvider.DEFAULT_VALUES, new ResultProvider());
future.run();
Result result;
IResult result;
try {
result = future.get();
} catch (InterruptedException | ExecutionException e) {
Expand All @@ -63,11 +79,11 @@ private List<Result> evaluateJmcRules(IItemCollection jfrEvents) {
return ruleEvaluations;
}

private List<Count> buildJmcRuleCountsFrom(List<Result> ruleEvaluations) {
private List<Count> buildJmcRuleCountsFrom(List<IResult> ruleEvaluations) {
List<Count> jmcRules = new ArrayList<>();
for (Result ruleEvaluation : ruleEvaluations) {
for (IResult ruleEvaluation : ruleEvaluations) {
Count ruleScore = buildJmcRuleCountFrom(ruleEvaluation);
if(!ruleToExclude(ruleScore)) {
if (!ruleToExclude(ruleScore)) {
jmcRules.add(ruleScore);
}
}
Expand All @@ -76,26 +92,30 @@ private List<Count> buildJmcRuleCountsFrom(List<Result> ruleEvaluations) {

private boolean ruleToExclude(Count ruleScore) {
String ruleDescription = ruleScore.getComment();
return ruleDescription.contains("Rule: TLAB Allocation Ratio")
|| ruleDescription.contains("Rule: Competing Processes")
|| ruleDescription.contains("Rule: Command Line Options Check")
|| ruleDescription.contains("Rule: Metaspace Live Set Trend");
return ruleDescription.contains("Rule: TLAB Allocation Ratio")
|| ruleDescription.contains("Rule: Competing Processes")
|| ruleDescription.contains("Rule: Command Line Options Check")
|| ruleDescription.contains("Rule: Metaspace Live Set Trend");
}

private Count buildJmcRuleCountFrom(Result result) {
private Count buildJmcRuleCountFrom(IResult result) {
StringWriter stringWriter = new StringWriter();

PrintWriter printWriter = new PrintWriter(stringWriter);
printWriter.println("Rule: " + result.getRule().getName());
printWriter.println("Severity: " + Severity.get(result.getScore()));
long score = (long) result.getScore();
printWriter.println("Severity: " + result.getSeverity());
long score = Optional.ofNullable(result.getResult(TypedResult.SCORE))
.map(IQuantity::longValue)
.orElse(-1L);
printWriter.println("Score: " + score);
String longDescriptionAsHtml = result.getLongDescription();
final String longDescriptionAsHtml = Optional.ofNullable(result.getSummary()).orElse("")
+ Optional.ofNullable(result.getExplanation()).orElse("")
+ Optional.ofNullable(result.getSolution()).orElse("");
String textDesc = HtmlToPlainTextTransformer.INSTANCE.convertHtmlToPlainText(longDescriptionAsHtml);
printWriter.println("Message: " + textDesc);

String description = stringWriter.toString();
return new Count(score, description);
}

}
}
14 changes: 4 additions & 10 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
<commons-dbcp.version>1.4</commons-dbcp.version>
<maven-jar-plugin.version>3.2.0</maven-jar-plugin.version>
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
<maven-enforcer-plugin.version>3.5.0</maven-enforcer-plugin.version>
<logback-classic.version>1.1.0</logback-classic.version>
<jcl-over-slf4j.version>1.7.25</jcl-over-slf4j.version>
<javadoc-subpackages />
Expand Down Expand Up @@ -112,8 +113,9 @@
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version>
<version>${maven-enforcer-plugin.version}</version>
<executions>
<execution>
<id>enforce-bytecode-version</id>
Expand All @@ -138,7 +140,7 @@
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>extra-enforcer-rules</artifactId>
<version>1.2</version>
<version>1.9.0</version>
</dependency>
</dependencies>
</plugin>
Expand Down Expand Up @@ -292,14 +294,6 @@
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>AdoptOpenJDK</id>
<name>AdoptOpenJDK</name>
<url>https://adoptopenjdk.jfrog.io/adoptopenjdk/jmc-libs</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

<developers>
Expand Down
1 change: 1 addition & 0 deletions spring/junit4-spring-base-tests/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
<maven.deploy.skip>true</maven.deploy.skip>
<gpg.skip>true</gpg.skip>
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
<allowIncompleteProjects>true</allowIncompleteProjects>
</properties>

<dependencies>
Expand Down
1 change: 1 addition & 0 deletions sql/sql-hibernate-test-util/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
<maven.deploy.skip>true</maven.deploy.skip>
<gpg.skip>true</gpg.skip>
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
<allowIncompleteProjects>true</allowIncompleteProjects>
</properties>

<dependencies>
Expand Down
1 change: 1 addition & 0 deletions sql/sql-memory-test-util/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
<maven.deploy.skip>true</maven.deploy.skip>
<gpg.skip>true</gpg.skip>
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
<allowIncompleteProjects>true</allowIncompleteProjects>
</properties>

<dependencies>
Expand Down
3 changes: 3 additions & 0 deletions testng/testng-jvm-test/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
<artifactId>quick-perf-testng-jvm-test</artifactId>

<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<dependencies.max.jdk.version>1.8</dependencies.max.jdk.version>
<jar.skipIfEmpty>true</jar.skipIfEmpty>
<gpg.skip>true</gpg.skip>
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
Expand Down
1 change: 1 addition & 0 deletions testng/testng-test-util/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
<gpg.skip>true</gpg.skip>
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
<maven.deploy.skip>true</maven.deploy.skip>
<allowIncompleteProjects>true</allowIncompleteProjects>
</properties>

<dependencies>
Expand Down