libdatadog update to 36b879aa#4006
Conversation
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 91b5f2bade
ℹ️ About Codex in GitHub
Codex has been enabled to automatically 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 👍.
When you sign up for Codex through ChatGPT, Codex can also answer questions or update the PR, like "@codex address that feedback".
| @@ -1 +1 @@ | |||
| Subproject commit cd90e50a5b067cf77a3e06641d838bc4c6b62aba | |||
| Subproject commit c690b5e43ccdf5ff84566db4447d416ac8c48ea8 | |||
There was a problem hiding this comment.
Regenerate Cargo.lock for the new libdatadog versions
This bump points at a libdatadog revision that changes path package versions (libdd-common 4.2.0→5.0.0 and libdd-remote-config 0.1.0→1.0.0), but the parent Cargo.lock is unchanged and still records the old versions. I checked cargo build --help; --locked asserts the lockfile remains unchanged, so locked/reproducible builds from this commit will fail before compilation because Cargo must rewrite the lockfile for those path dependencies. Please regenerate and commit Cargo.lock with this submodule revision.
Useful? React with 👍 / 👎.
765df56 to
59f2b0d
Compare
c8bbc94 to
747c876
Compare
3904647 to
30b60d4
Compare
842f922 to
083afb6
Compare
Benchmarks [ tracer ]Benchmark execution time: 2026-07-07 06:03:36 Comparing candidate commit ef020cf in PR branch Found 0 performance improvements and 2 performance regressions! Performance is the same for 192 metrics, 0 unstable metrics.
|
36c88cf to
9e430a1
Compare
8af45ac to
a33197b
Compare
b412bda to
4015657
Compare
048df1b to
1748bfc
Compare
Automated update by CI pipeline https://gitlab.ddbuild.io/DataDog/apm-reliability/dd-trace-php/-/pipelines/123423636 Full CI result: ❌ 14 job(s) failed
ef020cf to
115ca62
Compare
Automated update by CI pipeline https://gitlab.ddbuild.io/DataDog/apm-reliability/dd-trace-php/-/pipelines/123435980 Full CI result: ❌ 571 job(s) failed
Summary
Automated update of the libdatadog submodule to the latest HEAD.
$LIBDATADOG_PINNED_SHA36b879aa6ce0e6bd557094e425c2eab9d472119dFull CI result: ❌ 571 job(s) failed
CI pipeline: https://gitlab.ddbuild.io/DataDog/apm-reliability/dd-trace-php/-/pipelines/123435980
libdatadog Integration Report
libdatadog SHA: 36b879aa6ce0e6bd557094e425c2eab9d472119d
Analysis date: 2026-07-08
Overall status
❌ Blocking issues remain
A single removed FFI export (
ddog_sidecar_get_crashtracker_unix_socket_path) breakscrashtracker initialization in the tracer extension, and there is no C-FFI replacement
to adapt to. All 571 failing jobs cascade from this one symbol. This must be resolved in
libdatadog (by re-exposing the necessary FFI) before the update can land.
Build & test summary
The Rust/C build of
ddtrace.soitself succeeds — this is a link/runtime failure, not acompile failure. The generated header
components-rs/sidecar.hstill declaresddog_sidecar_get_crashtracker_unix_socket_path()andext/signals.ccalls it, but the newlibdatadog no longer defines that symbol. As soon as any PHP process loads
ddtrace.soandtriggers crashtracker init, dynamic symbol resolution fails:
Because crashtracker init runs whenever
DD_INSTRUMENTATION_TELEMETRY_ENABLED=1andDD_CRASHTRACKING_ENABLEDare on (seedatadog_signals_first_rinit→dd_init_crashtrackerinext/signals.c), essentially every extension-dependent job fails.Failure distribution (from
ci_summary.txt/all_failures.json), all with the same root cause:ASAN test_c,PHP Language Tests, alltest_web_*, alltest_integrations_*,test_distributed_tracing,test_opentracing_10,Internal api randomized tests,windows test_c,pecl tests, etc.Extension Tea Tests(all versions/variants).test appsec extension(only the one testclient_init_sidecar.phptfails — it isthe only appsec-extension test that sets
DD_INSTRUMENTATION_TELEMETRY_ENABLED=1and thusreaches crashtracker init; the other 343 pass because lazy symbol binding never resolves the
missing symbol),
appsec integration tests,helper-rust integration coverage,appsec code coverage.verify debian/alpine/centos/.tar.gz,Loader test,System Tests.Only two distinct error signatures appear across every failure trace:
undefined symbol: ddog_sidecar_get_crashtracker_unix_socket_path(the direct cause) and theclient_init_sidecar.phptfailure (the same cause, surfaced as a failing.phpt).Non-trivial changes made
No code changes were made.
The call site (
ext/signals.c:253,dd_init_crashtracker) cannot be adapted, because the newlibdatadog does not expose an FFI path to obtain the sidecar IPC socket or to wire the
crashtracker to it (details below). The only possible "adaptation" available on our side would be
to delete/disable crashtracker initialization, which would silently drop crash-tracking
functionality — a prohibited workaround, not a fix. The code is intentionally left broken pending
a libdatadog FFI fix.
Identified libdatadog issues
refactor(sidecar)!: Avoid a dedicated socket for crashtracker(#2179, commite91210ef9) removed a public FFI without a Unix replacementSymptom:
ddtrace.sofails at runtime withundefined symbol: ddog_sidecar_get_crashtracker_unix_socket_path.What changed: PR #2179 reworked the crashtracker so the crash-time collector connects to the
sidecar's single IPC socket and "upgrades" that connection into a crashtracker receiver, instead
of using a second dedicated socket. As part of this it deleted the FFI export
ddog_sidecar_get_crashtracker_unix_socket_pathfromdatadog-sidecar-ffi/src/lib.rs(the commit diff for that file is 16 lines, all deletions — no replacement function was added).
Why this blocks us and cannot be worked around in dd-trace-php:
ext/signals.cneeds(a) the socket path to point the crashtracker at, and (b) on Linux, a connector that sends the
enter_crashtracker_receiverhandshake as its first message so the sidecar's serve loop switchesthat connection into receiver mode. The new design implements both, but only as internal Rust
APIs that are not reachable over the C FFI:
datadog_sidecar::crashtracker::crashtracker_ipc_socket_path()— returns the sidecar IPC socketpath, but is a plain
pub fn, not#[no_mangle]. No FFI wrapper exists.datadog_sidecar::crashtracker::connect_to_sidecar_receiver()/crashtracker_receiver_request_bytes()— implement the required handshake, againpub fnonly,no FFI wrapper.
libdd-crashtrackergained a configurableunix_socket_connector(fn(&str) -> RawFd), but theC-FFI config struct
ddog_crasht_Config(
libdd-crashtracker-ffi/src/collector/datatypes.rs) exposes no field for it, and itsTryFrom<Config> for CrashtrackerConfigurationnever callsunix_socket_connector(...)— so anFFI caller is always stuck with
default_unix_socket_connector, a plainconnect()that omitsthe
enter_crashtracker_receiverhandshake.datadog-sidecar-ffiisddog_setup_crashtracking, which isgated
#[cfg(target_os = "windows")]— there is no Unix equivalent.Net result: on Unix there is no supported FFI to (1) obtain the sidecar IPC socket path or (2)
install the sidecar-aware connector. A C consumer therefore cannot reproduce the new flow.
Suggested libdatadog fix (any one of):
ddog_sidecar_get_crashtracker_unix_socket_pathbacked bycrashtracker_ipc_socket_path()),and add an FFI-settable connector (or a dedicated
ddog_crasht_config_set_sidecar_connector) plus a way to primecrashtracker_receiver_request_bytes; orddog_setup_crashtrackingthatperforms the full sidecar-IPC crashtracker setup internally, so consumers do not need the socket
path or connector at all.
Until libdatadog re-exposes one of these,
ext/signals.ccannot be updated to a working state.Flaky / ignored failures
None. Every failing job across all sub-pipelines traces back to the single missing symbol above;
no timing/race/flaky or unrelated-infrastructure failures were identified.
/cc @bwoebi