Skip to content

feat: cross-platform named shared memory primitives#1786

Draft
khanayan123 wants to merge 2 commits intomainfrom
ayan.khan/session-id-shm-carrier
Draft

feat: cross-platform named shared memory primitives#1786
khanayan123 wants to merge 2 commits intomainfrom
ayan.khan/session-id-shm-carrier

Conversation

@khanayan123
Copy link
Copy Markdown

@khanayan123 khanayan123 commented Mar 24, 2026

Summary

  • Adds datadog-shm crate: generic cross-platform named shared memory primitives built on datadog-ipc's NamedShmHandle (shm_open/memfd on Unix, CreateFileMapping on Windows)
    • ShmWriter — create a named segment, write bytes, update in-place
    • ShmReader — open an existing segment by name, read bytes
    • PID-keyed convenience helpers (create_pid_keyed / open_pid_keyed) plus cross-platform parent_pid()
  • Adds datadog-shm-ffi crate: C FFI surface for SDKs that link libdatadog
    • ddog_shm_create / ddog_shm_open / ddog_shm_read_data / ddog_shm_update / ddog_shm_writer_drop / ddog_shm_reader_drop
    • ddog_shm_create_pid_keyed / ddog_shm_open_pid_keyed / ddog_shm_current_pid / ddog_shm_parent_pid

Context

Part of the Stable Service Instance Identifier initiative. This provides a thin, reusable module that any SDK can use to share small data blobs (session IDs, config snapshots, status) across process boundaries via named SHM.

SDKs that depend on libdatadog (PHP, Ruby, .NET, Python, Node.js) call the FFI. SDKs without libdatadog (Go, Java, C++) implement their own equivalents using the same naming convention (/dd-<prefix>-<pid>).

Test plan

  • 8 tests passing (roundtrip, update, empty data, PID-keyed, capacity, nonexistent segment, doc-test)
  • Zero clippy warnings
  • CI validation on Linux/macOS
  • Windows CI validation (uses CreateFileMapping via NamedShmHandle — no new platform code)

🤖 Generated with Claude Code

Add two new crates for propagating stable session identifiers across
process boundaries via named shared memory:

- datadog-session-id: Rust library built on datadog-ipc's NamedShmHandle
  (shm_open/memfd on Unix, CreateFileMapping on Windows)
- datadog-session-id-ffi: C FFI exposing ddog_session_create,
  ddog_session_read_parent, ddog_session_read_pid, and
  ddog_session_carrier_drop

SDKs that link against libdatadog can use the FFI to create/read
session carriers without platform-specific shared memory code.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Clippy Allow Annotation Report

Comparing clippy allow annotations between branches:

  • Base Branch: origin/main
  • PR Branch: origin/ayan.khan/session-id-shm-carrier

Summary by Rule

Rule Base Branch PR Branch Change

Annotation Counts by File

File Base Branch PR Branch Change

Annotation Stats by Crate

Crate Base Branch PR Branch Change
clippy-annotation-reporter 5 5 No change (0%)
datadog-ffe-ffi 1 1 No change (0%)
datadog-ipc 20 20 No change (0%)
datadog-live-debugger 6 6 No change (0%)
datadog-live-debugger-ffi 10 10 No change (0%)
datadog-profiling-replayer 4 4 No change (0%)
datadog-remote-config 3 3 No change (0%)
datadog-sidecar 55 55 No change (0%)
libdd-common 10 10 No change (0%)
libdd-common-ffi 12 12 No change (0%)
libdd-data-pipeline 5 5 No change (0%)
libdd-ddsketch 2 2 No change (0%)
libdd-dogstatsd-client 1 1 No change (0%)
libdd-profiling 13 13 No change (0%)
libdd-telemetry 19 19 No change (0%)
libdd-tinybytes 4 4 No change (0%)
libdd-trace-normalization 2 2 No change (0%)
libdd-trace-obfuscation 8 8 No change (0%)
libdd-trace-utils 15 15 No change (0%)
Total 195 195 No change (0%)

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.

Replace the session-ID-specific crates with generic shared memory
building blocks:

- datadog-shm: ShmWriter (create/update) and ShmReader (open/read)
  backed by datadog-ipc's NamedShmHandle (shm_open on Unix,
  CreateFileMapping on Windows). Also provides PID-keyed convenience
  helpers and parent_pid() cross-platform.

- datadog-shm-ffi: C FFI surface (ddog_shm_create, ddog_shm_open,
  ddog_shm_read_data, ddog_shm_update, ddog_shm_create_pid_keyed,
  ddog_shm_open_pid_keyed, etc.)

Session IDs, config snapshots, or any other small blob can now be
shared across processes through a single, reusable API.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@khanayan123 khanayan123 changed the title feat: cross-platform session ID shared memory carrier feat: cross-platform named shared memory primitives Mar 24, 2026
@datadog-datadog-prod-us1-2
Copy link
Copy Markdown

✅ Tests

🎉 All green!

❄️ No new flaky tests detected
🧪 All tests passed

🎯 Code Coverage (details)
Patch Coverage: 100.00%
Overall Coverage: 70.36% (-0.11%)

This comment will be updated automatically if new data arrives.
🔗 Commit SHA: aea39d9 | Docs | Datadog PR Page | Was this helpful? React with 👍/👎 or give us feedback!

@dd-octo-sts
Copy link
Copy Markdown
Contributor

dd-octo-sts bot commented Mar 24, 2026

Artifact Size Benchmark Report

aarch64-alpine-linux-musl
Artifact Baseline Commit Change
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.a 101.42 MB 101.42 MB 0% (0 B) 👌
/aarch64-alpine-linux-musl/lib/libdatadog_profiling.so 8.70 MB 8.70 MB 0% (0 B) 👌
aarch64-unknown-linux-gnu
Artifact Baseline Commit Change
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.so 11.29 MB 11.29 MB 0% (0 B) 👌
/aarch64-unknown-linux-gnu/lib/libdatadog_profiling.a 118.20 MB 118.20 MB 0% (0 B) 👌
libdatadog-x64-windows
Artifact Baseline Commit Change
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.dll 27.26 MB 27.26 MB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.lib 80.34 KB 80.34 KB 0% (0 B) 👌
/libdatadog-x64-windows/debug/dynamic/datadog_profiling_ffi.pdb 186.51 MB 186.50 MB -0% (-8.00 KB) 👌
/libdatadog-x64-windows/debug/static/datadog_profiling_ffi.lib 921.90 MB 921.90 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.dll 8.99 MB 8.99 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.lib 80.34 KB 80.34 KB 0% (0 B) 👌
/libdatadog-x64-windows/release/dynamic/datadog_profiling_ffi.pdb 26.83 MB 26.83 MB 0% (0 B) 👌
/libdatadog-x64-windows/release/static/datadog_profiling_ffi.lib 60.99 MB 60.99 MB 0% (0 B) 👌
libdatadog-x86-windows
Artifact Baseline Commit Change
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.dll 23.07 MB 23.07 MB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.lib 81.59 KB 81.59 KB 0% (0 B) 👌
/libdatadog-x86-windows/debug/dynamic/datadog_profiling_ffi.pdb 190.75 MB 190.76 MB +0% (+16.00 KB) 👌
/libdatadog-x86-windows/debug/static/datadog_profiling_ffi.lib 905.43 MB 905.43 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.dll 6.86 MB 6.86 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.lib 81.59 KB 81.59 KB 0% (0 B) 👌
/libdatadog-x86-windows/release/dynamic/datadog_profiling_ffi.pdb 28.94 MB 28.94 MB 0% (0 B) 👌
/libdatadog-x86-windows/release/static/datadog_profiling_ffi.lib 57.39 MB 57.39 MB 0% (0 B) 👌
x86_64-alpine-linux-musl
Artifact Baseline Commit Change
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.a 88.29 MB 88.29 MB 0% (0 B) 👌
/x86_64-alpine-linux-musl/lib/libdatadog_profiling.so 10.28 MB 10.28 MB 0% (0 B) 👌
x86_64-unknown-linux-gnu
Artifact Baseline Commit Change
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.a 110.95 MB 110.95 MB 0% (0 B) 👌
/x86_64-unknown-linux-gnu/lib/libdatadog_profiling.so 12.02 MB 12.02 MB 0% (0 B) 👌

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant