Skip to content

Fix DDTraceId/DD64bTraceId class-initialization deadlock#11509

Merged
gh-worker-dd-mergequeue-cf854d[bot] merged 9 commits into
masterfrom
brian.marks/fix-ddtraceid-clinit-deadlock
Jun 3, 2026
Merged

Fix DDTraceId/DD64bTraceId class-initialization deadlock#11509
gh-worker-dd-mergequeue-cf854d[bot] merged 9 commits into
masterfrom
brian.marks/fix-ddtraceid-clinit-deadlock

Conversation

@bm1549
Copy link
Copy Markdown
Contributor

@bm1549 bm1549 commented May 29, 2026

What Does This Do

Fixes a class-initialization deadlock between DDTraceId and DD64bTraceId that can hang trace creation at startup. DDTraceId.ZERO is now eagerly initialized by IdGenerationStrategy to break the observed cycle without introducing any API compatibility issues. IdGenerationStrategy is guaranteed to be touched very early on when config is built.

Motivation

DD64bTraceId extends DDTraceId, so the JVM initializes DDTraceId first. But DDTraceId.<clinit> built its ZERO/ONE constants via DD64bTraceId.from(...), which initializes the subclass while the DDTraceId init lock is held. When the two classes are first touched concurrently from opposite ends, each thread ends up holding one class-init lock and waiting for the other:

  • dd-task-scheduler: the service-discovery task added in Add support for service discovery using JNA #9705 runs muteTracing() -> blackholeSpan() -> DDTraceId.ZERO
  • main: the application's first span runs IdGenerationStrategy.generateTraceId() -> DD64bTraceId.from()

Trace creation then hangs. This surfaced as recurring ~30s LogInjectionSmokeTest timeouts on master (traceCount=0, process.alive=true, RC polls received: ~135). The forked-process thread dumps added in #11400 confirmed the cycle, and it reproduces deterministically.

Additional Notes

  • DDTraceIdClinitDeadlockForkedTest runs in a fresh JVM and initializes the two classes concurrently from opposite ends; it deadlocks without the fix and passes with it.
  • The deadlock has been latent since Add support for service discovery using JNA #9705 (Oct 2025) added the scheduled muteTracing() task; it began manifesting recently on CI as startup timing shifted.

Contributor Checklist

  • Title formatted per the contribution guidelines
  • type: and comp: labels assigned
  • No issue-linking keywords used
  • CODEOWNERS update not required — added/removed files fall under directories already covered
  • Public documentation update not required (no new configuration or behavior)

Jira ticket: N/A

@bm1549 bm1549 added type: bug Bug report and fix comp: api Tracer public API tag: ai generated Largely based on code generated by an AI or LLM labels May 29, 2026
@datadog-prod-us1-3
Copy link
Copy Markdown

datadog-prod-us1-3 Bot commented May 29, 2026

Pipelines

Fix all issues with BitsAI

⚠️ Warnings

🚦 52 Pipeline jobs failed

DataDog/apm-reliability/dd-trace-java | Amazon_Linux_2023_amd64.SI94: [test-app-java-container]   View in Datadog   GitLab

🔧 Fix in code (Fix with Cursor). Docker build failed: '/CrashServlet.class' and '/jetty-classpath' not found during file copy in Dockerfile.

DataDog/apm-reliability/dd-trace-java | Amazon_Linux_2023_amd64.SIM: [test-app-java-container]   View in Datadog   GitLab

🔧 Fix in code (Fix with Cursor). Docker build failed. Error: '/CrashServlet.class' and '/jetty-classpath' not found during COPY commands in Dockerfile.

DataDog/apm-reliability/dd-trace-java | Amazon_Linux_2_arm64.SIM: [test-app-java-alpine]   View in Datadog   GitLab

🔧 Fix in code (Fix with Cursor). Failed to launch AWS provision step: Error: /CrashServlet.class not found during Docker build.

View all 52 failed jobs.

Useful? React with 👍 / 👎

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: 2f79326 | Docs | Datadog PR Page | Give us feedback!

@bm1549 bm1549 marked this pull request as ready for review May 29, 2026 19:13
@bm1549 bm1549 requested a review from a team as a code owner May 29, 2026 19:13
@bm1549 bm1549 requested a review from dougqh May 29, 2026 19:13
Copy link
Copy Markdown

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

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: 56ea720eb8

ℹ️ 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 dd-trace-api/src/main/java/datadog/trace/api/DD64bTraceId.java Outdated
@dd-octo-sts
Copy link
Copy Markdown
Contributor

dd-octo-sts Bot commented May 29, 2026

🟢 Java Benchmark SLOs — All performance SLOs passed

Suite Status
Startup 🟢 pass

SLO thresholds are defined here based on automatically generated metrics. A warning is raised when results are within 5% of the threshold.

PR vs. master results
Scenario Candidate master Δ (95% CI of mean)
startup:insecure-bank:iast:Agent 13.92 s 13.88 s [-0.6%; +1.2%] (no difference)
startup:insecure-bank:tracing:Agent 12.99 s 13.00 s [-1.1%; +0.9%] (no difference)
startup:petclinic:appsec:Agent 16.53 s 16.40 s [-0.3%; +2.0%] (no difference)
startup:petclinic:iast:Agent 16.63 s 16.66 s [-1.5%; +1.1%] (no difference)
startup:petclinic:profiling:Agent 16.45 s 16.58 s [-2.4%; +0.8%] (no difference)
startup:petclinic:tracing:Agent 15.84 s 15.88 s [-1.6%; +1.1%] (no difference)

Commit: 2f79326f · CI Pipeline · Benchmarking Platform UI


Load and DaCapo benchmarks can be triggered manually in the GitLab pipeline. Results will appear in the Benchmarking Platform UI after completion.

@bm1549 bm1549 requested a review from a team as a code owner May 29, 2026 19:29
@bm1549 bm1549 requested review from mcculls and removed request for a team May 29, 2026 19:29
Copy link
Copy Markdown
Contributor

@dougqh dougqh left a comment

Choose a reason for hiding this comment

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

Overall, it looks good to me.
But before merging, double check that the Codex comment isn't a problem

DD64bTraceId is a subclass of DDTraceId, so the JVM must initialize
DDTraceId before DD64bTraceId. DDTraceId.<clinit> in turn initialized
DD64bTraceId by building its ZERO/ONE constants via DD64bTraceId.from(),
a circular initialization dependency. When the two classes were first
touched concurrently from opposite ends -- the service-discovery task
(muteTracing() -> blackholeSpan() -> DDTraceId.ZERO) racing the
application's first span (IdGenerationStrategy.generateTraceId() ->
DD64bTraceId.from()) -- each thread held one class-init lock and waited
for the other, hanging trace creation. This surfaced as recurring 30s
LogInjectionSmokeTest timeouts in CI (latent since #9705 added the
scheduled muteTracing task).

Break the cycle at its source while keeping DDTraceId.ZERO/ONE as public
fields (preserving the API restored in #5021): ZERO/ONE are now instances
of a private DDTraceId subtype (a sibling of DD64bTraceId), so
DDTraceId.<clinit> no longer references the subclass.

Replace the fragile "== DDTraceId.ZERO" identity checks with a
value-based DDTraceId.isZero(). Those identity checks relied on every
zero id being the single ZERO instance; isZero() recognizes a zero id of
any concrete type, so the factories need not route 0 to the singleton and
the propagation codecs no longer mishandle a zero parsed via the direct
64-bit factories.

Add a forked regression test that initializes the two classes
concurrently from opposite ends (deadlocks without the fix), plus
isZero() coverage across the DDTraceId subtypes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@bm1549 bm1549 force-pushed the brian.marks/fix-ddtraceid-clinit-deadlock branch from b04a0d1 to 0e15d6c Compare May 30, 2026 02:46
@bm1549 bm1549 requested a review from a team as a code owner May 30, 2026 02:46
@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented May 30, 2026

Debugger benchmarks

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
ci_job_date 1780150450 1780150796
end_time 2026-05-30T14:15:37 2026-05-30T14:21:22
git_branch master brian.marks/fix-ddtraceid-clinit-deadlock
git_commit_sha 064fda9 ded2c7c
start_time 2026-05-30T14:14:11 2026-05-30T14:19:57
See matching parameters
Baseline Candidate
ci_job_id 1726969699 1726969699
ci_pipeline_id 116055918 116055918
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
git_commit_date 1780109723 1780109723

Summary

Found 0 performance improvements and 0 performance regressions! Performance is the same for 9 metrics, 6 unstable metrics.

See unchanged results
scenario Δ mean agg_http_req_duration_min Δ mean agg_http_req_duration_p50 Δ mean agg_http_req_duration_p75 Δ mean agg_http_req_duration_p99 Δ mean throughput
scenario:noprobe unstable
[-21.542µs; +30.033µs] or [-7.329%; +10.218%]
unstable
[-36.009µs; +38.467µs] or [-10.571%; +11.292%]
unstable
[-46.994µs; +50.253µs] or [-13.168%; +14.081%]
unstable
[-65.232µs; +141.764µs] or [-5.583%; +12.133%]
same
scenario:basic unsure
[-9.611µs; -1.405µs] or [-3.575%; -0.523%]
same same unstable
[-200.000µs; +41.540µs] or [-18.139%; +3.767%]
unstable
[-125.442op/s; +125.442op/s] or [-5.018%; +5.018%]
scenario:loop same same same same same
Request duration reports for reports
gantt
    title reports - request duration [CI 0.99] : candidate=None, baseline=None
    dateFormat X
    axisFormat %s
section baseline
noprobe (340.653 µs) : 311, 370
.   : milestone, 341,
basic (298.082 µs) : 291, 305
.   : milestone, 298,
loop (8.981 ms) : 8976, 8987
.   : milestone, 8981,
section candidate
noprobe (341.882 µs) : 302, 382
.   : milestone, 342,
basic (294.321 µs) : 288, 300
.   : milestone, 294,
loop (8.982 ms) : 8977, 8988
.   : milestone, 8982,
Loading
  • baseline results
Scenario Request median duration [CI 0.99]
noprobe 340.653 µs [311.05 µs, 370.257 µs]
basic 298.082 µs [290.833 µs, 305.331 µs]
loop 8.981 ms [8.976 ms, 8.987 ms]
  • candidate results
Scenario Request median duration [CI 0.99]
noprobe 341.882 µs [301.518 µs, 382.247 µs]
basic 294.321 µs [288.216 µs, 300.426 µs]
loop 8.982 ms [8.977 ms, 8.988 ms]

@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented May 30, 2026

Kafka / producer-benchmark

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master brian.marks/fix-ddtraceid-clinit-deadlock
git_commit_date 1780097219 1780109723
git_commit_sha 194ee63 ded2c7c
See matching parameters
Baseline Candidate
ci_job_date 1780150961 1780150961
ci_job_id 1726969697 1726969697
ci_pipeline_id 116055918 116055918
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
jdkVersion 11.0.25 11.0.25
jmhVersion 1.36 1.36
jvm /usr/lib/jvm/java-11-openjdk-amd64/bin/java /usr/lib/jvm/java-11-openjdk-amd64/bin/java
jvmArgs -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/producer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/producer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant
vmName OpenJDK 64-Bit Server VM OpenJDK 64-Bit Server VM
vmVersion 11.0.25+9-post-Ubuntu-1ubuntu122.04 11.0.25+9-post-Ubuntu-1ubuntu122.04

Summary

Found 0 performance improvements and 0 performance regressions! Performance is the same for 3 metrics, 0 unstable metrics.

See unchanged results
scenario Δ mean throughput
scenario:not-instrumented/KafkaProduceBenchmark.benchProduce same
scenario:only-tracing-dsm-disabled-benchmarks/KafkaProduceBenchmark.benchProduce same
scenario:only-tracing-dsm-enabled-benchmarks/KafkaProduceBenchmark.benchProduce same

@pr-commenter
Copy link
Copy Markdown

pr-commenter Bot commented May 30, 2026

Kafka / consumer-benchmark

Parameters

Baseline Candidate
baseline_or_candidate baseline candidate
git_branch master brian.marks/fix-ddtraceid-clinit-deadlock
git_commit_date 1780097219 1780109723
git_commit_sha 194ee63 ded2c7c
See matching parameters
Baseline Candidate
ci_job_date 1780150992 1780150992
ci_job_id 1726969698 1726969698
ci_pipeline_id 116055918 116055918
cpu_model Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz Intel(R) Xeon(R) Platinum 8259CL CPU @ 2.50GHz
jdkVersion 11.0.25 11.0.25
jmhVersion 1.36 1.36
jvm /usr/lib/jvm/java-11-openjdk-amd64/bin/java /usr/lib/jvm/java-11-openjdk-amd64/bin/java
jvmArgs -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/consumer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/go/src/github.com/DataDog/apm-reliability/dd-trace-java/platform/src/consumer-benchmark/build/tmp/jmh -Duser.country=US -Duser.language=en -Duser.variant
vmName OpenJDK 64-Bit Server VM OpenJDK 64-Bit Server VM
vmVersion 11.0.25+9-post-Ubuntu-1ubuntu122.04 11.0.25+9-post-Ubuntu-1ubuntu122.04

Summary

Found 0 performance improvements and 0 performance regressions! Performance is the same for 3 metrics, 0 unstable metrics.

See unchanged results
scenario Δ mean throughput
scenario:not-instrumented/KafkaConsumerBenchmark.benchConsume unsure
[+2328.734op/s; +12483.668op/s] or [+0.799%; +4.286%]
scenario:only-tracing-dsm-disabled-benchmarks/KafkaConsumerBenchmark.benchConsume same
scenario:only-tracing-dsm-enabled-benchmarks/KafkaConsumerBenchmark.benchConsume same

Comment thread dd-trace-api/src/main/java/datadog/trace/api/DD64bTraceId.java Outdated
Comment thread dd-trace-api/src/main/java/datadog/trace/api/DD64bTraceId.java
mcculls
mcculls previously requested changes Jun 1, 2026
Copy link
Copy Markdown
Contributor

@mcculls mcculls left a comment

Choose a reason for hiding this comment

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

I'd prefer to have a method isValid rather than isZero (where isValid() should return true when the id is not zero)

Also I'm worried that we could now create lots of DD64bTraceId(0) instances with the change to that class.

Finally some of the non-test comments are too verbose and should be simplified

Copy link
Copy Markdown
Contributor

@PerfectSlayer PerfectSlayer left a comment

Choose a reason for hiding this comment

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

Left early review comments

Finally some of the non-test comments are too verbose and should be simplified

Agreed, that hurts readability in core tracer parts.

Comment thread dd-trace-api/src/main/java/datadog/trace/api/DDTraceId.java Outdated
Comment thread dd-trace-core/src/test/java/datadog/trace/api/TraceIdIsZeroTest.java Outdated
bm1549 and others added 3 commits June 1, 2026 09:49
…constant

- Rename DDTraceId.isZero() to value-based isValid() (OTel-aligned; mcculls);
  flip the boolean at all 7 production call sites.
- Restore a cached zero singleton in DD64bTraceId so from(0)/fromHex("0") do
  not allocate per call (mcculls).
- Extract the ZERO/ONE backing type to a dedicated DDTraceIdConstant class
  (PerfectSlayer); update the JaCoCo coverage exclusion.
- Preserve equals/hashCode: ZERO/ONE stay value-equal (both directions) to the
  equivalent DD64bTraceId, matching pre-PR behavior.
- Trim verbose non-test comments (mcculls, PerfectSlayer).
- Parameterize and rename TraceIdIsZeroTest -> TraceIdIsValidTest (PerfectSlayer).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- Trim the verbose DDTraceId/DD64bTraceId/DDTraceIdConstant/XRayHttpCodec
  comments to terse navigation aids (review feedback).
- Suppress EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS on the two cross-type
  equals methods (intentional value-equality between ZERO/ONE and the
  equivalent DD64bTraceId); fixes the check_base SpotBugs failure.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@bm1549 bm1549 requested review from PerfectSlayer and mcculls June 1, 2026 16:26
@bm1549 bm1549 requested a review from dougqh June 1, 2026 16:26
* <p>Only ever initialize this through {@link DDTraceId}'s constants. Initializing it independently
* (e.g. a static-member access) would bring back the class-initialization deadlock.
*/
final class DDTraceIdConstant extends DDTraceId {
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.

I do wonder if there's a simpler fix that doesn't require introducing another class, as this is making the equals matrix harder to maintain. I'll need to think this through, but eliminating its construction via the static method might be enough. We may need to allow 2 copies of ZERO - a public one in DDTraceId and a private one in DD64bTraceId - but assuming we use isValid() and avoid any identity check then that should break the cycle and still keep the changes minimal.

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.

After verifying that the deadlock could potentially still occur even with the sibling class (if something happened to touch it at the wrong time) and the widening ripple of changes caused by that change I went with a more focused fix - effectively making sure that DDTraceId.ZERO is touched first in IdGenerationStrategy.

This fixes the observed issue without introducing any API compatibility issues.

Ideally we'd revisit the DDTraceId class to avoid it having constants that depend on a subclass - but since this is part of the public API we are limited in what we can do...

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

That's an incredibly clever workaround - thanks @mcculls!

Copy link
Copy Markdown
Contributor

@PerfectSlayer PerfectSlayer left a comment

Choose a reason for hiding this comment

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

Keep adding more feedback to my review.

Important question: did you blindly replace all == ZERO checks by isValid() or did you make sure the TID are always non null first? I want to make sure the isValid() call won't raise NPE and all call sites have been verified.

Comment thread dd-trace-api/src/main/java/datadog/trace/api/DDTraceId.java Outdated
Comment thread dd-trace-api/src/main/java/datadog/trace/api/DDTraceId.java Outdated
Comment thread dd-trace-api/src/main/java/datadog/trace/api/DDTraceId.java Outdated
Comment thread dd-trace-api/src/test/java/datadog/trace/api/DDTraceIdTest.java Outdated
Comment thread dd-trace-api/build.gradle.kts Outdated
Comment thread dd-trace-core/src/main/java/datadog/trace/core/propagation/XRayHttpCodec.java Outdated
Comment thread dd-trace-core/src/test/java/datadog/trace/api/TraceIdIsValidTest.java Outdated
@gh-worker-ownership-write-b05516 gh-worker-ownership-write-b05516 Bot removed the request for review from a team June 2, 2026 21:57
@mcculls mcculls self-requested a review June 2, 2026 22:00
@mcculls mcculls dismissed their stale review June 2, 2026 22:08

Stale

…ild time due to the added static initializer
@mcculls mcculls requested a review from a team as a code owner June 2, 2026 22:48
@mcculls mcculls requested review from vandonr and removed request for a team June 2, 2026 22:48
Copy link
Copy Markdown
Contributor

@PerfectSlayer PerfectSlayer left a comment

Choose a reason for hiding this comment

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

👏 praise: ‏Thanks for the fix variant. It feels cleaner as reusing the same technique as for other past cases, and avoid impacting too much the existing code base.

@bm1549 bm1549 added this pull request to the merge queue Jun 3, 2026
@dd-octo-sts
Copy link
Copy Markdown
Contributor

dd-octo-sts Bot commented Jun 3, 2026

/merge

@gh-worker-devflow-routing-ef8351
Copy link
Copy Markdown

gh-worker-devflow-routing-ef8351 Bot commented Jun 3, 2026

View all feedbacks in Devflow UI.

2026-06-03 13:21:19 UTC ℹ️ Start processing command /merge


2026-06-03 13:21:24 UTC ℹ️ MergeQueue: pull request added to the queue

The expected merge time in master is approximately 1h (p90).


2026-06-03 14:45:11 UTC ℹ️ MergeQueue: This merge request was merged

@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Jun 3, 2026
bm1549 added a commit that referenced this pull request Jun 3, 2026
…1509

The DDTraceId/DD64bTraceId class-initialization deadlock was the root
cause of the traceCount=0 flakiness that prompted these diagnostics.
With the deadlock fixed, the diagnostic instrumentation is no longer
needed.

Removes from #11075 and #11400:
- waitForTraceCountAlive() and all helpers (dumpThreadStacks,
  filterThreadDump, isBoilerplateThread, isHighPriorityThread,
  getTestedProcessPid, runJstack, tailProcessLog, INLINE_DUMP_CAP)
- The OperatingSystem import that was only used by dumpThreadStacks

Keeps the actual fixes from #10999, #11375:
- BaseApplication TIMEOUT_IN_NANOS 10s→30s (prevents app-side timeout
  racing the test-side timeout under CI load)
- @flaky(isZulu8()) and JavaVirtualMachine.isZulu8() (covers a separate
  JUL race on Zulu 8 that is not fixed by #11509)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@gh-worker-dd-mergequeue-cf854d gh-worker-dd-mergequeue-cf854d Bot merged commit 28344fa into master Jun 3, 2026
758 of 763 checks passed
@gh-worker-dd-mergequeue-cf854d gh-worker-dd-mergequeue-cf854d Bot deleted the brian.marks/fix-ddtraceid-clinit-deadlock branch June 3, 2026 14:45
@github-actions github-actions Bot added this to the 1.64.0 milestone Jun 3, 2026
gh-worker-dd-mergequeue-cf854d Bot pushed a commit that referenced this pull request Jun 3, 2026
…1509 (#11548)

Remove log-injection diagnostic code now that deadlock is fixed in #11509

The DDTraceId/DD64bTraceId class-initialization deadlock was the root
cause of the traceCount=0 flakiness that prompted these diagnostics.
With the deadlock fixed, the diagnostic instrumentation is no longer
needed.

Removes from #11075 and #11400:
- waitForTraceCountAlive() and all helpers (dumpThreadStacks,
  filterThreadDump, isBoilerplateThread, isHighPriorityThread,
  getTestedProcessPid, runJstack, tailProcessLog, INLINE_DUMP_CAP)
- The OperatingSystem import that was only used by dumpThreadStacks

Keeps the actual fixes from #10999, #11375:
- BaseApplication TIMEOUT_IN_NANOS 10s→30s (prevents app-side timeout
  racing the test-side timeout under CI load)
- @flaky(isZulu8()) and JavaVirtualMachine.isZulu8() (covers a separate
  JUL race on Zulu 8 that is not fixed by #11509)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Merge branch 'master' into brian.marks/remove-log-injection-diagnostics

Co-authored-by: devflow.devflow-routing-intake <devflow.devflow-routing-intake@kubernetes.us1.ddbuild.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp: api Tracer public API tag: ai generated Largely based on code generated by an AI or LLM type: bug Bug report and fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants