Skip to content

fix(sidecar)!: stabilize the sidecar for macos usage - #2475

Merged
gh-worker-dd-mergequeue-cf854d[bot] merged 17 commits into
mainfrom
bob/macos-improv
Sep 11, 2026
Merged

gh-worker-dd-mergequeue-cf854d[bot] merged 17 commits into
mainfrom
bob/macos-improv

Conversation

@bwoebi

@bwoebi bwoebi commented Sep 7, 2026

Copy link
Copy Markdown
Contributor

Macos more or less worked, but with quite a bunch of edge cases, except for weakening (which is fixed here).

This makes it mostly non-flaky.

As a side-note: Working on this, I encountered an issue where telemetry to file:// was causing interleaved data. Guarded it.

@bwoebi
bwoebi requested review from a team as code owners September 7, 2026 15:00
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 7, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-07T15:15:29.899559Z 27440f6 PR opened
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions

github-actions Bot commented Sep 7, 2026 •

Copy link
Copy Markdown
Contributor

Clippy Allow Annotation Report

Tracked Clippy allow annotations changed vs main: ✅ -1 (9 → 8)

Rule Base PR Δ
unwrap_used 8 7 ✅ -1
By file and crate

By file

File Base PR Δ
libdd-ipc/src/platform/unix/mem_handle_macos.rs 6 5 ✅ -1

By crate

Crate Base PR Δ
libdd-ipc 22 21 ✅ -1

About This Report

This report tracks Clippy allow annotations for specific rules, showing how they've changed in this PR. Decreasing the number of these annotations generally improves code quality. Panic-inducing macros in particular should be avoided. In the future, this report may become a PR-blocking quality gate.

@datadog-prod-us1-3

datadog-prod-us1-3 Bot commented Sep 7, 2026 •

Copy link
Copy Markdown

Tests

✅ All CI checks and tests passed.

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
• Patch Coverage: 42.00%
• Overall Coverage: 77.76% (-0.00%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: a356590 | Docs | View more details | Give us feedback!

@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: 27440f63ea

ℹ️ 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 tools/sidecar_mockgen/src/lib.rs Outdated
Comment thread libdd-ipc/src/platform/unix/sockets/macos.rs Outdated
Comment thread libdd-capabilities-impl/src/http.rs
Comment thread libdd-ipc/src/platform/unix/mem_handle_macos.rs
@dd-octo-sts

dd-octo-sts Bot commented Sep 7, 2026 •

Copy link
Copy Markdown
Contributor

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 91.32 MB 91.32 MB +0% (+2.16 KB) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 8.45 MB 8.45 MB 0% (0 B) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.38 MB 11.38 MB +0% (+192 B) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 102.61 MB 102.61 MB +0% (+2.03 KB) 👌
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 27.32 MB 27.32 MB +0% (+512 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 96.08 KB 96.08 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 185.38 MB 185.39 MB +0% (+8.00 KB) 👌
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 804.35 MB 804.39 MB +0% (+34.38 KB) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 9.00 MB 9.01 MB +.04% (+4.50 KB) 🔍
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 96.08 KB 96.08 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 26.20 MB 26.20 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 52.21 MB 52.21 MB +0% (+1.58 KB) 👌
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 23.82 MB 23.82 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 97.58 KB 97.58 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 190.43 MB 190.43 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 785.12 MB 784.76 MB --.04% (-368.20 KB) 💪
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.96 MB 6.96 MB +0% (+512 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 97.58 KB 97.58 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 28.18 MB 28.18 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 49.70 MB 49.70 MB +0% (+1.74 KB) 👌
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 81.48 MB 81.48 MB +0% (+2.10 KB) 👌
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 9.41 MB 9.41 MB 0% (0 B) 👌
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 97.21 MB 97.21 MB +0% (+2.16 KB) 👌
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.46 MB 11.46 MB +0% (+128 B) 👌

@pr-commenter

pr-commenter Bot commented Sep 7, 2026 •

Copy link
Copy Markdown

Benchmarks

Comparison

Benchmark execution time: 2026-09-11 19:20:28

Comparing candidate commit a356590 in PR branch bob/macos-improv with baseline commit 3f833f8 in branch main.

📊 Benchmarking dashboard

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

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

scenario:vec_map/as_deduped_map/needs_dedup_1_in_10/8

  • 🟩 execution_time [-15.239ns; -14.992ns] or [-4.087%; -4.021%]

scenario:vec_map/as_deduped_map/needs_dedup_1_in_2/8

  • 🟩 execution_time [-21.408ns; -21.126ns] or [-4.347%; -4.290%]

scenario:vec_map/contains_key/16

  • 🟩 execution_time [-18.808ns; -18.122ns] or [-7.507%; -7.233%]
  • 🟩 throughput [+4986572.560op/s; +5170555.206op/s] or [+7.808%; +8.096%]

scenario:vec_map/get_hit/8

  • 🟩 execution_time [-3.240ns; -3.178ns] or [-5.662%; -5.554%]
  • 🟩 throughput [+8225992.217op/s; +8388146.938op/s] or [+5.884%; +6.000%]

scenario:vec_map/get_miss/8

  • 🟩 execution_time [-2.282ns; -2.242ns] or [-30.343%; -29.805%]

scenario:vec_map/get_mut/128

  • 🟥 execution_time [+2.124µs; +2.215µs] or [+15.366%; +16.023%]
  • 🟥 throughput [-1283226.056op/s; -1229051.127op/s] or [-13.854%; -13.269%]

scenario:vec_map/get_mut/16

  • 🟥 execution_time [+26.783ns; +35.032ns] or [+10.001%; +13.081%]
  • 🟥 throughput [-7296222.328op/s; -5420403.891op/s] or [-12.123%; -9.006%]

scenario:vec_map/get_mut/64

  • 🟥 execution_time [+538.379ns; +568.225ns] or [+14.092%; +14.873%]
  • 🟥 throughput [-2181086.136op/s; -2062440.052op/s] or [-13.015%; -12.307%]

Benchmark execution time: 2026-09-11 19:13:16

Comparing candidate commit a356590 in PR branch bob/macos-improv with baseline commit 3f833f8 in branch main.

📊 Benchmarking dashboard

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

Explanation

This is an A/B test comparing a candidate commit's performance against that of a baseline commit. Performance changes are noted in the tables below as:

  • 🟩 = significantly better candidate vs. baseline
  • 🟥 = significantly worse candidate vs. baseline

We compute a confidence interval (CI) over the relative difference of means between metrics from the candidate and baseline commits, considering the baseline as the reference.

If the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD), the change is considered significant.

Feel free to reach out to #apm-benchmarking-platform on Slack if you have any questions.

More details about the CI and significant changes

You can imagine this CI as a range of values that is likely to contain the true difference of means between the candidate and baseline commits.

CIs of the difference of means are often centered around 0%, because often changes are not that big:

---------------------------------(------|---^--------)-------------------------------->
                              -0.6%    0%  0.3%     +1.2%
                                 |          |        |
         lower bound of the CI --'          |        |
sample mean (center of the CI) -------------'        |
         upper bound of the CI ----------------------'

As described above, a change is considered significant if the CI is entirely outside the configured SIGNIFICANT_IMPACT_THRESHOLD (or the deprecated UNCONFIDENCE_THRESHOLD).

For instance, for an execution time metric, this confidence interval indicates a significantly worse performance:

----------------------------------------|---------|---(---------^---------)---------->
                                       0%        1%  1.3%      2.2%      3.1%
                                                  |   |         |         |
       significant impact threshold --------------'   |         |         |
                      lower bound of CI --------------'         |         |
       sample mean (center of the CI) --------------------------'         |
                      upper bound of CI ----------------------------------'

scenario:credit_card/is_card_number/x371413321323331

  • 🟥 execution_time [+583.393ns; +597.864ns] or [+9.964%; +10.211%]
  • 🟥 throughput [-15873617.971op/s; -15452538.932op/s] or [-9.293%; -9.047%]

scenario:credit_card/is_card_number_no_luhn/x371413321323331

  • 🟥 execution_time [+581.880ns; +596.759ns] or [+9.932%; +10.186%]
  • 🟥 throughput [-15831850.972op/s; -15399055.533op/s] or [-9.274%; -9.021%]

Unstable benchmarks

These benchmarks have a confidence interval too wide to call a change; treat them as noise rather than signal.

scenario:datadog_sample_span/parent_not_sampled_short_circuit/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+551.700%; -553.840%]

scenario:datadog_sample_span/parent_sampled_short_circuit/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+555.927%; -555.825%]

scenario:glob_matcher/ascii_case_insensitive_match/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+547.996%; -552.108%]

scenario:glob_matcher/ascii_exact_match/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+544.081%; -550.285%]

scenario:glob_matcher/ascii_exact_miss/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+568.956%; -562.002%]

scenario:glob_matcher/ascii_wildcard_backtrack_match/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+551.902%; -553.934%]

scenario:glob_matcher/ascii_wildcard_heavy_backtrack/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+572.054%; -563.482%]

scenario:glob_matcher/ascii_wildcard_question_match/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+551.146%; -553.580%]

scenario:glob_matcher/ascii_wildcard_star_match/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+553.438%; -554.655%]

scenario:glob_matcher/star_short_circuit/allocated_bytes

  • unstable execution_time [-0.000ns; +0.000ns] or [+555.141%; -555.455%]

Candidate

Omitted due to size.

Baseline

Omitted due to size.

bwoebi and others added 12 commits September 8, 2026 23:49
Signed-off-by: Bob Weinand <bob.weinand@datadoghq.com>
Signed-off-by: Bob Weinand <bob.weinand@datadoghq.com>
On macOS the SharedDirLiaison uses a filesystem lock to coordinate which
process creates the sidecar socket. Under concurrent process startup (e.g.
many PHP test workers), losing the lock race is normal: the caller simply
connects to the socket the winning process creates. Logging this at warn
level fires on every race and pollutes any test that captures log output,
which is the dominant failure source on the new macOS CI runner.

Linux uses abstract sockets (no lock file) and never hits this path, so the
noise only surfaces on macOS. Downgrade to trace, matching the existing
treatment of the adjacent "already listening" message.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Losing process made exactly one unretried connect() attempt right after
the lock-contention branch, before the winner's just-forked daemon had
started its accept loop. On macOS this fails hard because the SCM_RIGHTS/
DGRAM IPC rendezvous has no kernel-level accept backlog (unlike Linux's
real SEQPACKET listen queue), so a connect before the daemon's accept
loop is running throws EAGAIN and the process silently runs with no
sidecar for its whole lifetime.

Retry connect_to_server() with a short backoff (500ms budget) whenever
we didn't create the listener ourselves.
…utables

Mach-O dynamic_symbols() only reflects a dylib's export trie; a main
executable (the php binary) has none, so weaken_object_symbols always
matched zero candidates on macOS and no Zend/PHP symbol ever got its
undefined reference weakened in ddtrace.so. This left hard, non-weak
undefined references (e.g. _OnUpdateString) that make the sidecar
daemon's dlopen of ddtrace.so abort outright ('symbol not found in
flat namespace') whenever a code path referencing them runs inside
the daemon (observed with sidecar debug logging enabled), killing the
freshly spawned daemon.

Fall back to the full symbol table filtered to Dynamic-scope
definitions on macOS, which is where a main executable's exported
symbols actually show up. Also stopped excluding symbols the object
crate already reports as is_weak() in both candidate-selection filters
-- for Mach-O relocatable objects it has been observed to misreport
genuinely non-weak symbols as weak, which silently skipped them;
re-marking an already-weak symbol is a harmless no-op.
Concurrent flush tasks (traces, telemetry, ...) can all target the
same single-file file:// dump endpoint. write_all for a large record
can issue more than one write() syscall, so two concurrent writers
could interleave bytes into the file even under O_APPEND (which only
makes each individual write() atomic, not the whole record),
corrupting the dump file. Serialize the open+write with a mutex so a
record is never split.
…e async connection

into_async_conn() only extracted the raw inner fd into the AsyncFd
wrapper, letting the rest of SeqpacketConn (macOS's _peer and liveness
fields) drop immediately on return. Since the daemon's accepted
connection carries the client's transferred liveness-pipe read end in
that liveness field, this closed it right after every single accept,
which the client's liveness check reads as an instant, false POLLHUP
disconnect -- even though the actual data connection (self.inner) was
still perfectly usable. The client then tore down and reconnected on
essentially every call, polluting exact-match .phpt test output with
'transport is closed. Reconnecting' warnings and failing hundreds of
tests. Wrap the whole SeqpacketConn in AsyncFd instead of just its raw
fd, so _peer/liveness stay alive for as long as the connection is
actually in use. Also loosened entry.rs's connect retry to poll the
side-effect-free attempt_listen() rather than the handshake-sending
connect_to_server() while chasing this, since blindly retrying a call
with real side effects (a fresh fd pair + real SCM_RIGHTS send) could
leave behind abandoned, server-accepted connections; that turned out
not to be the actual bug; the current form is simply more correct.

Verified: full local test_c suite went from 155/604 failing (before
any of this session's fixes) to 0/604 failing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…mitted yet

mmap_handle() reads a segment's real size from a negotiation slot
shared by every process mapping it (see the block above), populated
the first time some process calls ensure_space(). A reader that opens
the segment before any writer has done so sees a technically valid
but not-yet-populated mapping (size still zero), which panicked via
unwrap() -- observed as a SIGABRT crash in a macOS CI run reading a
fleet-config remote-config file mid-write.

Return an error instead, matching how a not-yet-present mapping would
be handled: existing callers already tolerate a transient read
failure here gracefully (e.g. shm_remote_config.rs's read_config
callers just log and retry on the next poll), so this only changes a
process-aborting panic into an already-handled error path.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…acOS

The macOS-only retry arm was #[cfg]-gated directly on the match arm, so on
every other platform the loop had no branch that continues -- clippy's
never_loop lint (deny-by-default) correctly flagged it as dead weight, and
non-macOS builds silently never retried (harmlessly, since they don't need
to, but the lint failure broke clippy/helper-rust CI jobs.

Make the deadline an Option instead: None on non-macOS keeps the retry arm
unconditionally present in the source (satisfying clippy) while still never
firing at runtime there.
EOF
)
bwoebi added a commit that referenced this pull request Sep 9, 2026
- sidecar_mockgen: only strip an actual leading underscore from a Mach-O
  symbol name before matching, instead of unconditionally slicing off the
  first byte. A hand-written assembly global need not have the '_' prefix,
  so the unconditional slice silently mismatched such symbols against
  weaken_macho's lookup (which already only strips a real '_'), leaving
  them unweakened.
- libdd-ipc/macos sockets: pthread_chdir_np/pthread_fchdir_np return the
  error number directly rather than setting errno, so last_os_error() could
  report an unrelated error. Also stop discarding the restore call's
  result: if it fails, the thread's CWD is left pointing at the socket
  directory, corrupting later relative-path resolution on that thread;
  surface that as an error when the wrapped operation itself succeeded.
- libdd-capabilities-impl/http.rs: don't use lock_or_panic() for the
  file:// write-serialization lock -- this is FFI-facing code where a panic
  can abort the host process. Propagate a poisoned-lock as an HttpError
  instead.
- datadog-sidecar/shm_remote_config.rs: a config that fails to read (e.g.
  the macOS "SHM mapping not yet committed" transient race) was being
  dropped from last_read_configs without being re-queued, so it wouldn't
  actually retry on the next poll as intended -- only a later, unrelated
  config-list change would resurface it. Re-queue failed configs so they
  retry on the next fetch_update() call.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@bwoebi bwoebi changed the title Stabilize the sidecar for macos usage fix(sidecar): stabilize the sidecar for macos usage Sep 9, 2026
@bwoebi

bwoebi commented Sep 11, 2026

Copy link
Copy Markdown
Contributor Author

/merge

@gh-worker-devflow-routing-ef8351

gh-worker-devflow-routing-ef8351 Bot commented Sep 11, 2026 •

Copy link
Copy Markdown

View all feedbacks in Devflow UI.

2026-09-11 16:30:00 UTC ℹ️ Start processing command /merge


2026-09-11 16:30:08 UTC ℹ️ MergeQueue: Pull request is not mergeable yet

It will be processed automatically as soon as GitHub reports it as mergeable. View in MergeQueue UI.

  • Run /code blockers to see what is blocking it.
  • Run /remove to cancel it.

2026-09-11 19:23:19 UTC ℹ️ MergeQueue: merge request added to the queue

The expected merge time in main is approximately 48m (p90).


2026-09-11 20:45:44 UTC ℹ️ MergeQueue: This merge request was merged

@bwoebi bwoebi changed the title fix(sidecar): stabilize the sidecar for macos usage fix(sidecar)!: stabilize the sidecar for macos usage Sep 11, 2026

@ekump ekump left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Nothing blocking, just a couple of questions

Comment thread libdd-capabilities-impl/src/http.rs
Comment thread libdd-ipc/src/platform/unix/sockets/macos.rs Outdated
Comment thread tools/sidecar_mockgen/src/lib.rs Outdated
bwoebi and others added 2 commits September 11, 2026 20:38
Co-authored-by: Edmund Kump <edmund.kump@datadoghq.com>
@gh-worker-dd-mergequeue-cf854d
gh-worker-dd-mergequeue-cf854d Bot merged commit 902002a into main Sep 11, 2026
110 checks passed
@gh-worker-dd-mergequeue-cf854d
gh-worker-dd-mergequeue-cf854d Bot deleted the bob/macos-improv branch September 11, 2026 20:45
paullegranddc added a commit that referenced this pull request Sep 24, 2026
…ibdd-data-pipeline, libdd-li... (#2571)

<!-- release-proposal-inputs: {"crates":"libdd-capabilities-impl,
libdd-common, libdd-data-pipeline, libdd-library-config,
libdd-profiling-heap-allocator, libdd-remote-config, libdd-sampling,
libdd-shared-runtime, libdd-telemetry, libdd-tinybytes,
libdd-trace-utils","main_start_ref":"","level_overrides":"","bypass_standard_checks":false}
-->

# Release proposal for libdd-capabilities-impl, libdd-common,
libdd-data-pipeline, libdd-library-config,
libdd-profiling-heap-allocator, libdd-remote-config, libdd-sampling,
libdd-shared-runtime, libdd-telemetry, libdd-tinybytes,
libdd-trace-utils and their dependencies

This PR contains version bumps based on public API changes and commits
since last release.


### ⚠️ Crates left out of this proposal affected by its major
bumps

These publishable workspace crates are not part of this release but
their dependency requirement was rewritten on this branch while their
published version still requires the old major. If they are a dependency
on your deployment not including them in the release could result in
duplicate packages or symbol incompatibility.

- `libdd-capabilities` `3.0.1` → `4.0.0` affects: `libdd-crashtracker`,
`libdd-ffe`, `libdd-live-debugger`
- `libdd-capabilities-impl` `5.0.0` → `6.0.0` affects:
`libdd-crashtracker`, `libdd-live-debugger`, `libdd-tracer-flare`
- `libdd-common` `6.0.0` → `7.0.0` affects: `libdd-crashtracker`,
`libdd-ffe`, `libdd-http-client`, `libdd-ipc`, `libdd-live-debugger`,
`libdd-profiling`, `libdd-tracer-flare`
- `libdd-data-pipeline` `10.0.0` → `11.0.0` affects:
`libdd-live-debugger`
- `libdd-remote-config` `5.0.0` → `6.0.0` affects: `libdd-ffe`,
`libdd-live-debugger`, `libdd-tracer-flare`
- `libdd-telemetry` `8.0.0` → `9.0.0` affects: `libdd-crashtracker`
- `libdd-trace-stats` `9.0.0` → `10.0.0` affects: `libdd-ipc`
- `libdd-trace-utils` `12.0.0` → `13.0.0` affects: `libdd-tracer-flare`

## libdd-capabilities
**Next version:** `4.0.0`
**Semver bump:** `major`
**Tag:** `libdd-capabilities-v4.0.0`

### Commits

- feat(trace-exporter)!: add API to force flush stats on the trace
exporter (#2538)
- refactor!: apply small timeout pooling strategy to libdd-http-client
as well (#2449)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)

## libdd-common
**Next version:** `7.0.0`
**Semver bump:** `major`
**Tag:** `libdd-common-v7.0.0`

### Commits

- build: enforce workspace-level dependency declarations (#2514)
- chore!: remove unused dependencies (v2) (#2511)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- chore(libdd-data-pipeline): solve cargo deny [APMSP-3884] (#2318)
- fix!: benchmark was doing many samples for deterministic heap usage
(#2465)

## libdd-ddsketch
**Next version:** `1.1.2`
**Semver bump:** `patch`
**Tag:** `libdd-ddsketch-v1.1.2`

### Commits

- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- chore(libdd-data-pipeline): solve cargo deny [APMSP-3884] (#2318)

## libdd-profiling-heap-sampler
**Next version:** `1.1.0`
**Semver bump:** `minor`
**Tag:** `libdd-profiling-heap-sampler-v1.1.0`

### Commits

- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- refactor: migrate to workspace dependencies, phase 4 (#2296)
- feat(profiling): add USDT semaphores to skip slow path around heap
profile sampler (#2266)

## libdd-tinybytes
**Next version:** `1.1.4`
**Semver bump:** `patch`
**Tag:** `libdd-tinybytes-v1.1.4`

### Commits

- chore: move all remaining external deps to workspace-level
dependencies (#2476)

## libdd-trace-protobuf
**Next version:** `5.0.1`
**Semver bump:** `patch`
**Tag:** `libdd-trace-protobuf-v5.0.1`

### Commits

- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- fix(build): build script change detection (#2467)

## libdd-capabilities-impl
**Next version:** `6.0.0`
**Semver bump:** `major`
**Tag:** `libdd-capabilities-impl-v6.0.0`

### ⚠️ major bump forced due to:

- `libdd-capabilities`: ^3.0.1 → ^4.0.0
- `libdd-common`: ^6.0.0 → ^7.0.0

### Commits

- refactor!: apply small timeout pooling strategy to libdd-http-client
as well (#2449)
- fix(sidecar)!: stabilize the sidecar for macos usage (#2475)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)

## libdd-profiling-heap-allocator
**Next version:** `1.1.0`
**Semver bump:** `minor`
**Tag:** `libdd-profiling-heap-allocator-v1.1.0`

### Commits

- refactor(benchmarks): measure allocator thread CPU time (#2500)
- refactor: migrate to workspace dependencies, phase 4 (#2296)
- feat(profiling): add USDT semaphores to skip slow path around heap
profile sampler (#2266)

## libdd-library-config
**Next version:** `4.1.0`
**Semver bump:** `minor`
**Tag:** `libdd-library-config-v4.1.0`

### Commits

- chore!: remove unused dependencies (v2) (#2511)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)

## libdd-trace-normalization
**Next version:** `4.1.0`
**Semver bump:** `minor`
**Tag:** `libdd-trace-normalization-v4.1.0`

### Commits

- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- chore(libdd-data-pipeline): solve cargo deny [APMSP-3884] (#2318)

## libdd-remote-config
**Next version:** `6.0.0`
**Semver bump:** `major`
**Tag:** `libdd-remote-config-v6.0.0`

### ⚠️ major bump forced due to:

- `libdd-capabilities`: ^3.0.1 → ^4.0.0
- `libdd-capabilities-impl`: ^5.0.0 → ^6.0.0
- `libdd-common`: ^6.0.0 → ^7.0.0

### Commits

- refactor!: apply small timeout pooling strategy to libdd-http-client
as well (#2449)
- chore!: remove unused dependencies (v2) (#2511)
- fix(rem-cfg)!: remove AsmRawResponseBody (#2540)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)

## libdd-shared-runtime
**Next version:** `5.0.0`
**Semver bump:** `major`
**Tag:** `libdd-shared-runtime-v5.0.0`

### ⚠️ major bump forced due to:

- `libdd-capabilities`: ^3.0.1 → ^4.0.0
- `libdd-capabilities-impl`: ^5.0.0 → ^6.0.0
- `libdd-common`: ^6.0.0 → ^7.0.0

### Commits

- feat(trace-exporter)!: add API to force flush stats on the trace
exporter (#2538)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)

## libdd-trace-utils
**Next version:** `13.0.0`
**Semver bump:** `major`
**Tag:** `libdd-trace-utils-v13.0.0`

### ⚠️ major bump forced due to:

- `libdd-capabilities`: ^3.0.1 → ^4.0.0
- `libdd-capabilities-impl`: ^5.0.0 → ^6.0.0
- `libdd-common`: ^6.0.0 → ^7.0.0

### Commits

- fix(trace-utils)!: add forgotten css to agentless v1 encoder (#2557)
- fix(otlp): use potential dedupe in otlp serialization path (#2531)
- feat(trace-utils)!: add v1-native OTLP encoder brick (#2369)
- perf(serialization): bench the actual path used by the trace exporter
(#2512)
- perf(trace): write agentless JSON directly (#2454)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- perf(trace): encode agentless IDs without formatting (#2452)
- perf(trace-utils)!: use pooled spans on the send path (#2382)
- feat(data-pipeline)!: OTLP gRPC trace export (#2171)
- chore(libdd-data-pipeline): solve cargo deny [APMSP-3884] (#2318)
- fix!: benchmark was doing many samples for deterministic heap usage
(#2465)

## libdd-dogstatsd-client
**Next version:** `7.0.0`
**Semver bump:** `major`
**Tag:** `libdd-dogstatsd-client-v7.0.0`

### ⚠️ major bump forced due to:

- `libdd-common`: ^6.0.0 → ^7.0.0
- `libdd-shared-runtime`: ^4.0.0 → ^5.0.0

### Commits

- chore: move all remaining external deps to workspace-level
dependencies (#2476)

## libdd-telemetry
**Next version:** `9.0.0`
**Semver bump:** `major`
**Tag:** `libdd-telemetry-v9.0.0`

### ⚠️ major bump forced due to:

- `libdd-capabilities`: ^3.0.1 → ^4.0.0
- `libdd-common`: ^6.0.0 → ^7.0.0
- `libdd-shared-runtime`: ^4.0.0 → ^5.0.0

### Commits

- refactor!: apply small timeout pooling strategy to libdd-http-client
as well (#2449)
- chore!: remove unused dependencies (v2) (#2511)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- fix(telemetry): fall back to the proper intake telemetry domain when
direct submission is enabled (#2484)

## libdd-sampling
**Next version:** `7.0.0`
**Semver bump:** `major`
**Tag:** `libdd-sampling-v7.0.0`

### ⚠️ major bump forced due to:

- `libdd-common`: ^5.2.0 → ^7.0.0
- `libdd-trace-utils`: ^10.1.0 → ^13.0.0

### Commits

- chore(benchmarks): remove batched-loop sampling noise (#2498)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- fix!: benchmark was doing many samples for deterministic heap usage
(#2465)
- feat(trace-utils)!: add from owned to SpanText (#2403)
- test(sampling): make rate_limiter thread-safety test deterministic
(#2354)

## libdd-trace-obfuscation
**Next version:** `9.0.0`
**Semver bump:** `major`
**Tag:** `libdd-trace-obfuscation-v9.0.0`

### ⚠️ major bump forced due to:

- `libdd-common`: ^6.0.0 → ^7.0.0
- `libdd-trace-utils`: ^12.0.0 → ^13.0.0

### Commits

- feat(data-pipeline)!: refactor agent's /info obfuscation config format
(#2490)
- fix(obfuscation): keep URLs whose path or fragment holds a bracket
(#2527)
- fix(obfuscation): stop forcing serde_json/preserve_order on dependents
(#2529)
- fix(obfuscation): prevent crash and cap recursion in SQL/HTTP
obfuscation (#2441)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- fix(data-pipeline-ffi): harden agentless config setters and parse
obfuscation config once (#2474)

## libdd-trace-stats
**Next version:** `10.0.0`
**Semver bump:** `major`
**Tag:** `libdd-trace-stats-v10.0.0`

### ⚠️ major bump forced due to:

- `libdd-capabilities`: ^3.0.1 → ^4.0.0
- `libdd-capabilities-impl`: ^5.0.0 → ^6.0.0
- `libdd-common`: ^6.0.0 → ^7.0.0
- `libdd-shared-runtime`: ^4.0.0 → ^5.0.0
- `libdd-trace-obfuscation`: ^8.0.0 → ^9.0.0
- `libdd-trace-utils`: ^12.0.0 → ^13.0.0

### Commits

- feat(trace-exporter)!: add API to force flush stats on the trace
exporter (#2538)
- fix(trace-stats): cardinality limit telemetry name (#2559)
- feat(data-pipeline)!: refactor agent's /info obfuscation config format
(#2490)
- chore!: remove unused dependencies (v2) (#2511)
- feat(data-pipeline)!: generate agentless trace stats (#2488)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- chore(libdd-data-pipeline): solve cargo deny [APMSP-3884] (#2318)

## libdd-data-pipeline-core
**Next version:** `2.0.0`
**Semver bump:** `major`
**Tag:** `libdd-data-pipeline-core-v2.0.0`

### ⚠️ major bump forced due to:

- `libdd-capabilities`: ^3.0.1 → ^4.0.0
- `libdd-common`: ^6.0.0 → ^7.0.0
- `libdd-trace-obfuscation`: ^8.0.0 → ^9.0.0
- `libdd-trace-utils`: ^12.0.0 → ^13.0.0

### Commits

- refactor!: apply small timeout pooling strategy to libdd-http-client
as well (#2449)
- feat(data-pipeline)!: generate agentless trace stats (#2488)
- perf(data-pipeline): avoid parsing static entity header names (#2457)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- perf(trace-utils)!: use pooled spans on the send path (#2382)

## libdd-data-pipeline
**Next version:** `11.0.0`
**Semver bump:** `major`
**Tag:** `libdd-data-pipeline-v11.0.0`

### ⚠️ major bump forced due to:

- `libdd-capabilities`: ^3.0.1 → ^4.0.0
- `libdd-capabilities-impl`: ^5.0.0 → ^6.0.0
- `libdd-common`: ^6.0.0 → ^7.0.0
- `libdd-data-pipeline-core`: ^1.0.0 → ^2.0.0
- `libdd-shared-runtime`: ^4.0.0 → ^5.0.0
- `libdd-trace-obfuscation`: ^8.0.0 → ^9.0.0
- `libdd-trace-stats`: ^9.0.0 → ^10.0.0
- `libdd-trace-utils`: ^12.0.0 → ^13.0.0

### Commits

- feat(trace-exporter)!: add API to force flush stats on the trace
exporter (#2538)
- refactor!: apply small timeout pooling strategy to libdd-http-client
as well (#2449)
- feat(data-pipeline)!: refactor agent's /info obfuscation config format
(#2490)
- test(data-pipeline): stop OTLP gRPC post-connect test from hanging
(#2549)
- chore!: remove unused dependencies (v2) (#2511)
- feat(data-pipeline)!: generate agentless trace stats (#2488)
- fix(otlp): use potential dedupe in otlp serialization path (#2531)
- refactor(benchmarks): isolate enqueue timing in data-pipeline (#2499)
- perf(trace): write agentless JSON directly (#2454)
- test(data-pipeline): fix flaky OTLP gRPC exporter integration tests
(#2505)
- chore: move all remaining external deps to workspace-level
dependencies (#2476)
- perf(trace-utils)!: use pooled spans on the send path (#2382)
- feat(data-pipeline)!: OTLP gRPC trace export (#2171)
- chore(libdd-data-pipeline): solve cargo deny [APMSP-3884] (#2318)


[APMSP-3884]:
https://datadoghq.atlassian.net/browse/APMSP-3884?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: paullegranddc <82819397+paullegranddc@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants