Repository navigation
Conversation
🟢 Java Benchmark SLOs — All performance SLOs passed
PR vs. master results
Commit: Load and DaCapo benchmarks can be triggered manually in the GitLab pipeline. Results will appear in the Benchmarking Platform UI after completion. |
a5fd6b3 to
0bf8b97
Compare
|
@codex review |
Codex Review Summary: ✅ CompletedThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
|
Codex Review: Didn't find any major issues. Another round soon, please! Reviewed commit: ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
If Codex has suggestions, it will comment; otherwise it will react with 👍. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback". |
🛡️ Codex Security Review · Automatically triggeredSecurity review completed. No security issues were found in this pull request. Reviewed commit: Only the user who started this review can view the report in Codex. ℹ️ About Codex security reviews in GitHubThis is an experimental Codex feature. Security reviews are triggered when:
Once complete, Codex will leave suggestions, or a comment if no findings are found. |
20c7218 to
351813d
Compare
00987ee to
29a660b
Compare
Commit stamps and filesystem traversal order change the packaged agent even when its code and configuration are unchanged, invalidating smoke test results on fresh checkouts. Use runtime classpath normalisation for the agent input and track the project version explicitly. Keep classes, .classdata, manifests and indexes in the fingerprint. Track the presence of dd-java-agent.version separately because Gradle CI Visibility needs it to initialise. Keep the argument provider in the shared smoke-test build script and ignore other generated version resources without running packaging verification. Sort JMX metric configuration names before writing the packaged list so fresh checkouts produce identical resource bytes. Allow S3 cache entries up to 256 MiB so smoke application builds larger than the plugin's 50 MiB default can be stored.
Use one projectJar API with classpath fingerprints for JVM and native application dependencies, including non-default artifact configurations. Ignore ZIP metadata and the existing version-resource exclusions while tracking the producing project's version separately. Cached JVM applications and native executables may retain earlier embedded agent and API commit stamps when only excluded metadata changes. Track needed resource names separately so adding or removing the agent version resource also invalidates native builds. Keep packaging verification in its existing flow. Qualify API-property lookups inside dependency blocks so the JVM consumers select the forwarded project JAR instead of a fallback. Cover cache restoration, configuration-cache reuse, project versions, class and classdata changes, required resources and ZIP entry order for default and shadow JARs. Re-snapshot externally rewritten test JARs. Document input annotations, normalisation and cache fingerprint comparisons in the build-cache guide. Explain classpath normalisation, base versions and required resource presence beside the nested JAR inputs.
9529267 to
be18123
Compare
Use a compatibility CPU target for the Quarkus and Spring Boot native fixtures so cached executables can run on other CI hosts of the same OS and architecture. Document why the S3 prefix does not isolate CPU features. Link the GraalVM guidance and record stronger targets as candidates requiring guarantees across eligible build and execution hosts. Resolve forwarded API JAR properties on the project inside dependency blocks so both native fixtures consume the supplied project JAR.
Remove eleven API JAR declarations and Kafka's unused application IAST helper JAR. Drop the matching nested dependencies and obsolete lockfile configuration names so unrelated JAR changes no longer rebuild fixtures. Keep the smoke-test harness dependencies, the WildFly WAR's published API, and the project JARs consumed by JVM and native applications.
be18123 to
f7be66e
Compare
What Does This Do
Allows smoke tests to reuse matching results across fresh checkouts and commits that change only agent commit metadata. Tests continue to launch the exact packaged agent JAR.
Motivation
Commit-stamped version resources and filesystem-dependent ordering of JMX metric configuration names invalidate smoke-test results when agent code is unchanged. Oversized application-build entries also miss the shared cache, forcing fixtures to rebuild. These changes let smoke tests benefit from the shared build cache introduced in #12604.
Additional Notes
Follows #12604, now merged into
master.Two CI runs of the same commit produced different normalised agent fingerprints. The only differing packaged resource was JMXFetch's
metricconfigs.txt:Files.findsupplied filenames in filesystem traversal order. Sorting those names before writing the list makes the agent reproducible while keeping this resource in the test fingerprint.The S3 plugin skipped the 56.9 MB Vert.x application-build entry because its default limit is 50 MiB. Rebuilding that fixture changed its JAR bytes and invalidated its smoke tests. Quarkus native entries also exceeded the limit: 137 MB on GraalVM 21 and 141 MB on GraalVM 25. The WebSphere shard wrote 212 MiB across two cache entries. The shared cache now accepts entries up to 256 MiB. This allows larger transfers and stored entries while retaining a size bound.
Unused forwarded JAR declarations are removed in a separate commit: eleven API declarations across Vert.x, Spring and WildFly, and Kafka's application IAST helper. Their unused nested dependencies and lockfile entries are removed too. The WildFly WAR's published API dependency and the smoke-test harness dependencies remain. Quarkus uses GraalVM's compatibility CPU target so cached executables can run on other CI hosts of the same architecture.
The S3 prefix groups OS and
os.arch; it does not distinguish CPU feature levels such asx86-64-v3. The builder identity also records the image, OS and architecture. The compatibility target keeps generated native instructions suitable for reuse across CPU models within that group.With the default snapshot versioning,
project.versionremains stable across commits, for example1.69.0-SNAPSHOT. The version-file generator appends the commit SHA separately as<version>~<SHA>. A new commit with the same normalised agent contents and other test inputs can therefore reuse the cached result.The explicit
tracerVersioninput preserves invalidation when the project version changes, for example from1.69.0-SNAPSHOTto1.70.0-SNAPSHOT. This matters because runtime-classpath normalisation excludes complete*.versionresources. It does not change the JAR passed to the application. Gradle input normalisation.Intended behaviour, assuming the other test inputs match:
.classdatacontentsdd-java-agent.version.versionresource pathsThe JAR input objects expose a
neededResourcePathsinput alongside the normalised JAR and base version. It contains the sorted names of the required resources present in the JAR, currently onlydd-java-agent.version.Adding or removing that required resource invalidates results. The Gradle CI Visibility smoke tests exercise
CiVisibilityGradleListener, which readsdd-java-agent.versionduring class initialisation and cannot initialise without it. Changing only its stamp leaves the resource names unchanged. Other.versionresources remain excluded by normalisation. Packaging verification stays in its existing flow.projectJaruses the consuming project's runtime-classpath normalisation for JVM and native fixture dependencies, including non-default artifacts such as the agent'sshadowconfiguration. It tracks the producing project's version separately. Cached application JARs and native executables can retain earlier embedded agent and API commit stamps. Test tasks still fingerprint the complete application artifact; reusing its cached build keeps that artifact stable.Both native builds receive
neededResourcePathsthroughprojectJar, so adding or removing the required agent version resource also invalidates the executable.The Quarkus and Armeria JVM applications and both native applications now check
project.hasProperty('apiJar')inside their dependency blocks. The unqualified lookup checked the dependency handler and selected the published fallback despite the forwarded property. These consumers now compile against the declared project API JAR..classdataor other tracked resourcedd-java-agent.versionAgent code changes still invalidate the full-agent smoke tests and native application builds. Commit-stamp changes alone can reuse matching JVM and native fixtures. Tests on
masterretain their existing forced-execution policy.Approaches considered
Normalising the agent input reuses Gradle's existing runtime-classpath support and preserves the packaged agent used by smoke tests. The explicit base-version and required-resource inputs preserve invalidation for version changes and the presence of resources needed by smoke tests. Commit stamps remain excluded by design. JVM and native application dependencies use the same normalisation with explicit project versions. The cache-entry bound and unused project JAR removals address observed fixture misses. Producing a separate smoke-test agent JAR and separating agent packaging from the commit stamp remain outside this PR.
Cache checks
The real JMX configuration copy task was exercised with the same configurations under opposite traversal orders. It produced different list bytes before the fix and identical list and configuration bytes afterwards.
Before the forwarded-JAR changes, the second Java 17 shard run restored all seven executable test tasks. The second GraalVM 21 run restored both native application builds and both test tasks; its Gradle run fell from 4m23s to 1m52s. The WebSphere rerun also restored its test results.
That baseline restored 359 of 429 executable test tasks across the regular smoke jobs. The 70 executions comprised 23 initial runs with the changed Vert.x fixture inputs and 47 runs of JVM fixtures that bundle stamped API or OpenFeature JARs. These are Gradle task executions across JVMs, excluding skipped tasks and tasks without sources. The normalisation and unused-dependency cleanup address those remaining JVM fixture misses.
Twenty TestKit cases check default and
shadowJAR cache outcomes, including.classdata, source-project version changes, required-resource presence, excluded version resources, ZIP entry order and configuration-cache reuse. The restored fixture assertion also checks the retained dependency commit stamp and required resource.Before making normalisation the default for native inputs, the first-pass matrix passed all 48 regular smoke jobs, all three native jobs and Semeru. Regular jobs restored 421 of 429 executable test tasks. The eight executions were Quarkus and Armeria, whose dependency lookup now selects the project API. Native jobs rebuilt their images with that commit's agent and API JARs.
Eleven individual reruns restored 95 of 95 executable test tasks, including the Quarkus, Armeria and WildFly shards. The GraalVM 21 rerun also restored both native application builds.
After making normalisation the default for JVM and native inputs, all four selected jobs passed twice at
e2ff46062e, before removing verification-task dependencies, in pipeline 151233522. The second runs restored 31 of 31 executable smoke test tasks: 13 in the Quarkus shard, nine in the Armeria shard, seven in the OpenFeature shard and two in the GraalVM 21 job. Both native application builds also reportedFROM-CACHE.The project JAR inputs are covered by 20 cache scenarios and a provider-backed native-input case.
SmokeAgentArgumentslives in the shared smoke-test build script; its managed properties and JVM arguments were checked through Gradle. JVM and native smoke task graphs excludeverifyAgentJarContents.The build-cache guide explains input annotations, normalisation, excluded metadata and cache-debug log comparisons.
Contributor Checklist
type:and (comp:orinst:) labels in addition to any other useful labelsclose,fix, or any linking keywords when referencing an issueUse
solvesinstead, and assign the PR milestone to the issue