Skip to content

Replace JMC's JFR loader with a lightweight, streaming jafar-backed API - #719

Merged
jbachorik merged 8 commits into
mainfrom
jb/jfr-lightweight-query-api
Aug 6, 2026
Merged

Replace JMC's JFR loader with a lightweight, streaming jafar-backed API#719
jbachorik merged 8 commits into
mainfrom
jb/jfr-lightweight-query-api

Conversation

@jbachorik

@jbachorik jbachorik commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

What does this PR do?:
Replaces JMC's FlightRecordingLoader (used across the ddprof-test suite to parse and assert on JFR recordings) with a small JfrEvent/JfrEvents API backed by io.btrace:jafar-parser. JfrEvents offers a materializing load() for callers that need the full collection, plus streaming forEach/reduce and an early-exit presence check for callers that only need per-event checks, counts, or presence — these resolve at most one event in memory at a time instead of collecting every match into a list.

Motivation:
JMC's loader parses chunks on an internal thread pool via an ExecutorCompletionService; if a worker dies from an uncaught OutOfMemoryError mid-parse, the main thread's take() blocks forever waiting for a result that never arrives. jafar's UntypedJafarParser.run() is synchronous and single-threaded from the caller's perspective, so a worker failure surfaces as a propagated exception instead of a silent hang.

The streaming variants exist because some tests only need per-event checks/counts or a plain presence check against a high-volume event type — materializing the full collection for that wastes memory for no benefit.

Additional Notes:
None.

How to test the change?:
Existing ddprof-test suite exercises this end-to-end (every test that asserts on JFR recording contents goes through JfrEvents).

For Datadog employees:

  • If this PR touches code that signs or publishes builds or packages, or handles
    credentials of any kind, I've requested a security review (run the dd:platform-security-review
    skill, or file a request via the PSEC review form).
    bewaire also runs automatically on every PR.
  • This PR doesn't touch any of that.
  • JIRA: N/A (test infrastructure improvement, no ticket)

Unsure? Have a question? Request a review!

jbachorik and others added 2 commits August 5, 2026 15:49
…ents API

JMC's loader can hang forever if an internal parallel chunk-parsing worker
dies from OOM (root cause of BoundMethodHandleProfilerTest CI hangs);
jafar's synchronous UntypedJafarParser surfaces failures instead.
JfrEvents.load() collapses jafar's resolved values in place and supports
an early-exit predicate so verifyStackTraces() stops parsing once every
pattern is matched, instead of materializing the whole event set.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
BoundMethodHandleProfilerTest, NativeLibrariesTest and
NativememSampledProfilerTest OOM'd the 512MB test heap because they
collected every matching event into a list just to run per-event
checks/counts or a presence check. Adds JfrEvents.forEach/reduce and a
stopWhen-aborting presence check, and switches these three tests to
them, so at most one event is resolved in memory at a time.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 5, 2026 14:53
@jbachorik jbachorik added the AI label Aug 5, 2026

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@dd-octo-sts

dd-octo-sts Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Scan-Build Report

User:runner@runnervmvrwv9
Working Directory:/home/runner/work/java-profiler/java-profiler/ddprof-lib/src/test/make
Command Line:make -j4 all
Clang Version:Ubuntu clang version 18.1.3 (1ubuntu1)
Date:Thu Aug 6 12:33:14 2026

Bug Summary

Bug TypeQuantityDisplay?
All Bugs1
Logic error
Dereference of null pointer1

Reports

Bug Group Bug Type ▾ File Function/Method Line Path Length
Logic errorDereference of null pointerprofiler.hfindLibraryByAddress51713

@dd-octo-sts

dd-octo-sts Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

CI Test Results

Run: #31101754038 | Commit: 965c9e6 | Duration: 14m 30s (longest job)

All 32 test jobs passed

Status Overview

JDK glibc-aarch64/debug glibc-amd64/debug musl-aarch64/debug musl-amd64/debug
8 - - -
8-ibm - - -
8-j9 - -
8-librca - -
8-orcl - - -
11 - - -
11-j9 - -
11-librca - -
17 - -
17-graal - -
17-j9 - -
17-librca - -
21 - -
21-graal - -
21-librca - -
25 - -
25-graal - -
25-librca - -

Legend: ✅ passed | ❌ failed | ⚪ skipped | 🚫 cancelled

Summary: Total: 32 | Passed: 32 | Failed: 0


Updated: 2026-08-06 12:48:16 UTC

jbachorik and others added 2 commits August 5, 2026 17:03
Merging origin/main pulled in this test written against the old
JMC-based verifyEvents(), which no longer compiles now that it
returns JfrEvents. Uses streamEvents() instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 5, 2026 15:10

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@dd-octo-sts

dd-octo-sts Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (commit 476968e)

Pipeline: https://gitlab.ddbuild.io/DataDog/apm-reliability/benchmarking-platform/-/pipelines/129184073 Commit: 476968ec18182ca0b2235274c4abd4db3ba0bc35

✅ Within expected boundaries

No significant runtime deltas (all within run-to-run noise) and no internal-counter outliers.

Runtime details (per benchmark × JDK)
Benchmark JDK Latest Dev Δ (dev vs latest) Issues L/D
akka-uct 21 ✅ 10118 ms (21 iters) ✅ 10361 ms (21 iters) ≈ +2.4% (±10.9%) — / —
finagle-chirper 21 ✅ 6014 ms (33 iters) ✅ 5900 ms (33 iters) ≈ -1.9% (±24.5%) ⚠️ W:3 / ⚠️ W:3
finagle-chirper 25 ✅ 5450 ms (36 iters) ✅ 5440 ms (36 iters) ≈ -0.2% (±22.5%) ⚠️ W:4 / ⚠️ W:3
fj-kmeans 21 ✅ 2827 ms (66 iters) ✅ 2817 ms (66 iters) ≈ -0.4% (±2.6%) — / —
fj-kmeans 25 ✅ 2754 ms (68 iters) ✅ 2823 ms (66 iters) ≈ +2.5% (±2.6%) — / —
future-genetic 21 ✅ 2162 ms (86 iters) ✅ 2112 ms (88 iters) ≈ -2.3% (±2.7%) — / —
naive-bayes 21 ✅ 1323 ms (130 iters) ✅ 1297 ms (132 iters) ≈ -2% (±32.2%) — / —
naive-bayes 25 ✅ 1028 ms (167 iters) ✅ 1015 ms (169 iters) ≈ -1.3% (±32%) — / —
reactors 21 ✅ 15584 ms (15 iters) ✅ 16260 ms (15 iters) ≈ +4.3% (±7%) — / —
reactors 25 ✅ 18374 ms (15 iters) ✅ 18502 ms (15 iters) ≈ +0.7% (±5%) — / —
Internal counter details (ddprof)

ddprof internal counters, latest / dev (✅ = 0, · = unavailable):

Benchmark JDK Dropped rec Dropped jvmti Dropped trace Skipped WC AGCT fail Unwind fail
akka-uct 21 ✅ / ✅ ✅ / ✅ 1 / 3 1996 / 1992 ✅ / ✅ ✅ / ✅
akka-uct 25 ✅ / ✅ ✅ / ✅ 2 / 3 2270 / 2340 ✅ / ✅ ✅ / ✅
finagle-chirper 21 ✅ / ✅ ✅ / ✅ 3 / 1 9101 / 8303 ✅ / ✅ ✅ / ✅
finagle-chirper 25 ✅ / ✅ ✅ / ✅ ✅ / 1 8099 / 7974 ✅ / ✅ ✅ / ✅
fj-kmeans 21 ✅ / ✅ ✅ / ✅ 2 / 3 1279 / 1275 ✅ / ✅ ✅ / ✅
fj-kmeans 25 ✅ / ✅ ✅ / ✅ ✅ / 2 1271 / 1281 ✅ / ✅ ✅ / ✅
future-genetic 21 ✅ / ✅ ✅ / ✅ 1 / ✅ 3032 / 2995 ✅ / ✅ ✅ / ✅
future-genetic 25 ✅ / ✅ ✅ / ✅ 1 / 1 2894 / 2835 ✅ / ✅ ✅ / ✅
naive-bayes 21 ✅ / ✅ ✅ / ✅ 4 / 3 3494 / 3522 ✅ / ✅ ✅ / ✅
naive-bayes 25 ✅ / ✅ ✅ / ✅ 5 / 1 3512 / 3503 ✅ / ✅ ✅ / ✅
reactors 21 ✅ / ✅ ✅ / ✅ 3 / 1 1541 / 1612 ✅ / ✅ ✅ / ✅
reactors 25 ✅ / ✅ ✅ / ✅ ✅ / 2 1811 / 1819 ✅ / ✅ ✅ / ✅

JVM-internal slash-separated names broke tests comparing against
getClass().getName(), failing CI across the full test matrix.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 6, 2026 07:44

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@datadog-official

This comment has been minimized.

@datadog-official

datadog-official Bot commented Aug 6, 2026

Copy link
Copy Markdown

View session in Datadog

Bits Code status: ✅ Done

Comment @DataDog to request changes

@dd-octo-sts

dd-octo-sts Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (commit 1813c79)

Pipeline: https://gitlab.ddbuild.io/DataDog/apm-reliability/benchmarking-platform/-/pipelines/129338346 Commit: 1813c798c6c7ac15ea487c0d216ba2b026790de5

⚠️ Significant outliers

  • 🔴 future-genetic (JDK 25): runtime +3.1% (1896→1955 ms)
Runtime details (per benchmark × JDK)
Benchmark JDK Latest Dev Δ (dev vs latest) Issues L/D
akka-uct 21 ✅ 10354 ms (21 iters) ✅ 10275 ms (21 iters) ≈ -0.8% (±10.5%) — / —
akka-uct 25 ✅ 8787 ms (24 iters) ✅ 8959 ms (24 iters) ≈ +2% (±9.1%) — / —
finagle-chirper 21 ✅ 5957 ms (33 iters) ✅ 5924 ms (33 iters) ≈ -0.6% (±25.2%) ⚠️ W:3 / ⚠️ W:3
finagle-chirper 25 ✅ 5392 ms (36 iters) ✅ 5397 ms (36 iters) ≈ +0.1% (±23.8%) ⚠️ W:3 / ⚠️ W:3
fj-kmeans 21 ✅ 2816 ms (66 iters) ✅ 2811 ms (66 iters) ≈ -0.2% (±2.7%) — / —
fj-kmeans 25 ✅ 2768 ms (68 iters) ✅ 2831 ms (66 iters) ≈ +2.3% (±2.6%) — / —
future-genetic 21 ✅ 2120 ms (88 iters) ✅ 2123 ms (88 iters) ≈ +0.1% (±2.7%) — / —
future-genetic 25 ✅ 1896 ms (98 iters) ✅ 1955 ms (96 iters) 🔴 +3.1% — / —
naive-bayes 21 ✅ 1270 ms (134 iters) ✅ 1291 ms (133 iters) ≈ +1.7% (±32.8%) — / —
naive-bayes 25 ✅ 1018 ms (168 iters) ✅ 1001 ms (171 iters) ≈ -1.7% (±31.2%) — / —
reactors 21 ✅ 16420 ms (15 iters) ✅ 16111 ms (15 iters) ≈ -1.9% (±7.9%) — / —
reactors 25 ✅ 18699 ms (15 iters) ✅ 18937 ms (15 iters) ≈ +1.3% (±4%) — / —
Internal counter details (ddprof)

ddprof internal counters, latest / dev (✅ = 0, · = unavailable):

Benchmark JDK Dropped rec Dropped jvmti Dropped trace Skipped WC AGCT fail Unwind fail
akka-uct 21 ✅ / ✅ ✅ / ✅ 1 / 1 2070 / 1989 ✅ / ✅ ✅ / ✅
akka-uct 25 ✅ / ✅ ✅ / ✅ 3 / ✅ 2171 / 2223 ✅ / ✅ ✅ / ✅
finagle-chirper 21 ✅ / ✅ ✅ / ✅ ✅ / ✅ ✅ / ✅ ✅ / ✅ ✅ / ✅
finagle-chirper 25 ✅ / ✅ ✅ / ✅ ✅ / 3 8122 / 8221 ✅ / ✅ ✅ / ✅
fj-kmeans 21 ✅ / ✅ ✅ / ✅ 7 / 6 1260 / 1260 ✅ / ✅ ✅ / ✅
fj-kmeans 25 ✅ / ✅ ✅ / ✅ 1 / 2 1285 / 1265 ✅ / ✅ ✅ / ✅
future-genetic 21 ✅ / ✅ ✅ / ✅ 4 / ✅ 3013 / 3057 ✅ / ✅ ✅ / ✅
future-genetic 25 ✅ / ✅ ✅ / ✅ 2 / ✅ 2940 / 2889 ✅ / ✅ ✅ / ✅
naive-bayes 21 ✅ / ✅ ✅ / ✅ 4 / 3 3480 / 3538 ✅ / ✅ ✅ / ✅
naive-bayes 25 ✅ / ✅ ✅ / ✅ 4 / 4 3506 / 3498 ✅ / ✅ ✅ / ✅
reactors 21 ✅ / ✅ ✅ / ✅ ✅ / 2 1649 / 1651 ✅ / ✅ ✅ / ✅
reactors 25 ✅ / ✅ ✅ / ✅ ✅ / ✅ 1951 / 1935 ✅ / ✅ ✅ / ✅

…g them

AllocationProfilerTest, CTimerSamplerTest, MegamorphicCallTest, GCGenerationsTest,
and MemleakProfilerTest each materialized every matching JFR event (deep-resolved,
full stack traces) into memory, which OOMs the test heap under heavy sampling load.
Also fixes AllocationProfilerTest comparing array class names against
Class.getCanonicalName() ("int[]") instead of getClassName()'s Class.getName()-style
format ("[I"), which silently zeroed out recorded allocation sizes.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 6, 2026 09:49

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@dd-octo-sts

dd-octo-sts Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (commit 4a1a732)

Pipeline: https://gitlab.ddbuild.io/DataDog/apm-reliability/benchmarking-platform/-/pipelines/129359134 Commit: 4a1a732ad0d0a864c348128f9393c64d8b6a5277

⚠️ Significant outliers

  • 🔴 future-genetic (JDK 21): runtime +4% (2051→2134 ms)
  • 🟢 future-genetic (JDK 25): runtime -2.8% (1951→1897 ms)
Runtime details (per benchmark × JDK)
Benchmark JDK Latest Dev Δ (dev vs latest) Issues L/D
akka-uct 21 ✅ 10289 ms (21 iters) ✅ 10222 ms (21 iters) ≈ -0.7% (±10%) — / —
akka-uct 25 ✅ 8790 ms (24 iters) ✅ 8895 ms (24 iters) ≈ +1.2% (±9.7%) — / —
finagle-chirper 21 ✅ 5974 ms (33 iters) ✅ 6014 ms (33 iters) ≈ +0.7% (±25.3%) ⚠️ W:3 / ⚠️ W:3
fj-kmeans 21 ✅ 2827 ms (66 iters) ✅ 2827 ms (66 iters) ≈ 0% (±2.5%) — / —
fj-kmeans 25 ✅ 2777 ms (67 iters) ✅ 2827 ms (66 iters) ≈ +1.8% (±2.7%) — / —
future-genetic 21 ✅ 2051 ms (91 iters) ✅ 2134 ms (87 iters) 🔴 +4% — / —
future-genetic 25 ✅ 1951 ms (95 iters) ✅ 1897 ms (97 iters) 🟢 -2.8% — / —
naive-bayes 21 ✅ 1305 ms (131 iters) ✅ 1261 ms (136 iters) ≈ -3.4% (±32%) — / —
naive-bayes 25 ✅ 1016 ms (168 iters) ✅ 1006 ms (169 iters) ≈ -1% (±31.1%) — / —
reactors 21 ✅ 16098 ms (15 iters) ✅ 16291 ms (15 iters) ≈ +1.2% (±7.7%) — / —
reactors 25 ✅ 18510 ms (15 iters) ✅ 18456 ms (15 iters) ≈ -0.3% (±5.6%) — / —
Internal counter details (ddprof)

ddprof internal counters, latest / dev (✅ = 0, · = unavailable):

Benchmark JDK Dropped rec Dropped jvmti Dropped trace Skipped WC AGCT fail Unwind fail
akka-uct 21 ✅ / ✅ ✅ / ✅ 2 / 2 1992 / 1899 ✅ / ✅ ✅ / ✅
akka-uct 25 ✅ / ✅ ✅ / ✅ 2 / 1 2274 / 2380 ✅ / ✅ ✅ / ✅
finagle-chirper 21 ✅ / ✅ ✅ / ✅ 6 / 4 8805 / 8745 ✅ / ✅ ✅ / ✅
finagle-chirper 25 ✅ / ✅ ✅ / ✅ 1 / 2 8626 / 8103 ✅ / ✅ ✅ / ✅
fj-kmeans 21 ✅ / ✅ ✅ / ✅ 2 / 1 1275 / 1277 ✅ / ✅ ✅ / ✅
fj-kmeans 25 ✅ / ✅ ✅ / ✅ 1 / 2 1273 / 1275 ✅ / ✅ ✅ / ✅
future-genetic 21 ✅ / ✅ ✅ / ✅ ✅ / 1 3067 / 2940 ✅ / ✅ ✅ / ✅
future-genetic 25 ✅ / ✅ ✅ / ✅ ✅ / ✅ 2952 / 2841 ✅ / ✅ ✅ / ✅
naive-bayes 21 ✅ / ✅ ✅ / ✅ 6 / 6 3510 / 3507 ✅ / ✅ ✅ / ✅
naive-bayes 25 ✅ / ✅ ✅ / ✅ 2 / 4 3489 / 3459 ✅ / ✅ ✅ / ✅
reactors 21 ✅ / ✅ ✅ / ✅ 2 / ✅ 1707 / 1762 ✅ / ✅ ✅ / ✅
reactors 25 ✅ / ✅ ✅ / ✅ 1 / 2 1865 / 1839 ✅ / ✅ ✅ / ✅

…vadoc

Use verifyEventPresent instead of streamEvents+assert for presence-only
checks, drop dead allocation-comparison code left over from the
materialization fix, and correct a verifyEvents javadoc overclaim about
stack traces.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 6, 2026 10:36

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@jbachorik
jbachorik marked this pull request as ready for review August 6, 2026 10:45
@jbachorik
jbachorik requested a review from a team as a code owner August 6, 2026 10:45

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 77ba5ae6f0

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

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".

Comment thread ddprof-test/src/test/java/com/datadoghq/profiler/JfrEvents.java Outdated
Comment thread ddprof-test/src/test/java/com/datadoghq/profiler/JfrEvent.java Outdated
Comment thread ddprof-test/src/test/java/com/datadoghq/profiler/JfrEvents.java
@dd-octo-sts

dd-octo-sts Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Benchmark Results (commit 77ba5ae)

Pipeline: https://gitlab.ddbuild.io/DataDog/apm-reliability/benchmarking-platform/-/pipelines/129366368 Commit: 77ba5ae6f0d3fbe4bc08850dcfd57615adcbf8ad

✅ Within expected boundaries

No significant runtime deltas (all within run-to-run noise) and no internal-counter outliers.

Runtime details (per benchmark × JDK)
Benchmark JDK Latest Dev Δ (dev vs latest) Issues L/D
akka-uct 21 ✅ 10318 ms (21 iters) ✅ 10278 ms (21 iters) ≈ -0.4% (±10.8%) — / —
akka-uct 25 ✅ 8923 ms (24 iters) ✅ 8783 ms (24 iters) ≈ -1.6% (±9.8%) — / —
finagle-chirper 21 ✅ 5912 ms (33 iters) ✅ 5976 ms (33 iters) ≈ +1.1% (±25.3%) ⚠️ W:3 / ⚠️ W:3
finagle-chirper 25 ✅ 5387 ms (36 iters) ✅ 5349 ms (36 iters) ≈ -0.7% (±23.7%) ⚠️ W:3 / ⚠️ W:3
fj-kmeans 21 ✅ 2845 ms (66 iters) ✅ 2784 ms (67 iters) ≈ -2.1% (±2.6%) — / —
fj-kmeans 25 ✅ 2827 ms (66 iters) ✅ 2839 ms (66 iters) ≈ +0.4% (±2.5%) — / —
future-genetic 21 ✅ 2112 ms (88 iters) ✅ 2107 ms (89 iters) ≈ -0.2% (±2.5%) — / —
future-genetic 25 ✅ 1985 ms (94 iters) ✅ 1994 ms (92 iters) ≈ +0.5% (±2.6%) — / —
naive-bayes 21 ✅ 1258 ms (136 iters) ✅ 1263 ms (136 iters) ≈ +0.4% (±32.5%) — / —
naive-bayes 25 ✅ 1025 ms (167 iters) ✅ 1007 ms (170 iters) ≈ -1.8% (±31.2%) — / —
reactors 21 ✅ 15958 ms (15 iters) ✅ 15644 ms (15 iters) ≈ -2% (±7.4%) — / —
reactors 25 ✅ 18496 ms (15 iters) ✅ 18727 ms (15 iters) ≈ +1.2% (±4%) — / —
Internal counter details (ddprof)

ddprof internal counters, latest / dev (✅ = 0, · = unavailable):

Benchmark JDK Dropped rec Dropped jvmti Dropped trace Skipped WC AGCT fail Unwind fail
akka-uct 21 ✅ / ✅ ✅ / ✅ 2 / 2 1940 / 1991 ✅ / ✅ ✅ / ✅
akka-uct 25 ✅ / ✅ ✅ / ✅ 3 / 3 2313 / 2368 ✅ / ✅ ✅ / ✅
finagle-chirper 21 ✅ / ✅ ✅ / ✅ 2 / 2 8477 / 8903 ✅ / ✅ ✅ / ✅
finagle-chirper 25 ✅ / ✅ ✅ / ✅ 1 / 1 8167 / 8178 ✅ / ✅ ✅ / ✅
fj-kmeans 21 ✅ / ✅ ✅ / ✅ 1 / 4 1264 / 1267 ✅ / ✅ ✅ / ✅
fj-kmeans 25 ✅ / ✅ ✅ / ✅ 4 / ✅ 1284 / 1288 ✅ / ✅ ✅ / ✅
future-genetic 21 ✅ / ✅ ✅ / ✅ 1 / ✅ 2976 / 3024 ✅ / ✅ ✅ / ✅
future-genetic 25 ✅ / ✅ ✅ / ✅ ✅ / ✅ 2976 / 2899 ✅ / ✅ ✅ / ✅
naive-bayes 21 ✅ / ✅ ✅ / ✅ 3 / 1 3485 / 3494 ✅ / ✅ ✅ / ✅
naive-bayes 25 ✅ / ✅ ✅ / ✅ 5 / 2 3515 / 3478 ✅ / ✅ ✅ / ✅
reactors 21 ✅ / ✅ ✅ / ✅ ✅ / ✅ 1550 / 1567 ✅ / ✅ ✅ / ✅
reactors 25 ✅ / ✅ ✅ / ✅ 1 / 2 1860 / 1828 ✅ / ✅ ✅ / ✅

…sing headers/javadoc

JfrEvents.load/forEach/reduce read events from jafar's per-chunk parser
callbacks, which run concurrently across chunks for multi-chunk recordings;
synchronize the shared list/counter/accumulator mutations to avoid lost
updates and nondeterministic verification. getStackTraceString appended a
trailing newline after the last frame, breaking endsWith-style checks.
Also adds missing copyright headers and public-method javadoc across the
touched test files.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings August 6, 2026 12:31

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@jbachorik
jbachorik merged commit 9c2e173 into main Aug 6, 2026
108 checks passed
@jbachorik
jbachorik deleted the jb/jfr-lightweight-query-api branch August 6, 2026 13:23
@github-actions github-actions Bot added this to the 1.49.0 milestone Aug 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants