refactor(trace-utils)!: split generic TracerHeaderTags - #2279
refactor(trace-utils)!: split generic TracerHeaderTags#2279anais-raison wants to merge 1 commit into
Conversation
…nericTags TracerHeaderTags mixed tracer-identity strings (lang, version, etc.) with generic bool/int flags (client_computed_stats, dropped_p0_traces, ...). The latter are meaningful independently of the string metadata, so pull them into a standalone TracerGenericTags struct that can be carried on its own where the string fields would be redundant. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
📚 Documentation Check Results📦
|
🔒 Cargo Deny Results📦
|
🎉 All green!🧪 All tests passed 🎯 Code Coverage (details) 🔗 Commit SHA: 7b79f50 | Docs | Datadog PR Page | Give us feedback! |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7b79f50b18
ℹ️ 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".
| /// data. Unlike the rest of [`TracerHeaderTags`], these are meaningful regardless of whether the | ||
| /// tracer payload format carries its own lang/version metadata (e.g. the V1 msgpack payload), | ||
| /// so they can be transferred on their own without a dedicated serialized envelope. | ||
| #[derive(Default, Debug, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)] |
There was a problem hiding this comment.
If we're going to transmit them without serialization (if I understood correctly) through e.g. shared memory, does this struct need to be repr(C) to guarantee that whoever is reading it will have a stable layout? Or does the IPC mechanism already takes care of that in any way?
There was a problem hiding this comment.
These are serialized and sent separately to SHM. So no, it doesn't need repr(C).
What does this PR do?
Splits
TracerHeaderTagsinto two parts: the tracer-identity strings (lang,lang_version,tracer_version, etc.) stay as-is, and the generic bool/int flags (client_computed_stats,client_computed_top_level,dropped_p0_traces,dropped_p0_spans) are pulled into a new standaloneTracerGenericTagsstruct, embedded asTracerHeaderTags::generic.Motivation
TracerHeaderTagsmixed tracer-identity strings with generic bool/int flags. The latter are meaningful independently of the string metadata, so pulling them into their own struct lets them be carried on their own in contexts where the string fields would be redundant (e.g. payload formats that already embed the tracer identity), without forcing a full split of the type.Additional Notes
Raised during review of #2156. Prepared as a separate PR to keep #2156 scoped to the sidecar-specific V04→V1 changes.
This PR alone is a no-op refactor —
TracerGenericTagsis still only used embedded inTracerHeaderTags. The actual payoff comes in #2156: the V1 trace-sending path already carries the tracer identity in the V1 payload itself, sosend_trace_v1will be able to pass justTracerGenericTags(a smallCopystruct, no serialization needed) across the sidecar's IPC boundary instead of the fullTracerHeaderTags/SerializedTracerHeaderTags, which currently re-transmits redundant string data.