Skip to content

chore(deps): bump libdatadog to 48da0d8 for client-computed header fix#1244

Open
lucaspimentel wants to merge 3 commits into
mainfrom
lpimentel/bump-libdatadog-client-computed-headers
Open

chore(deps): bump libdatadog to 48da0d8 for client-computed header fix#1244
lucaspimentel wants to merge 3 commits into
mainfrom
lpimentel/bump-libdatadog-client-computed-headers

Conversation

@lucaspimentel
Copy link
Copy Markdown
Member

@lucaspimentel lucaspimentel commented Jun 3, 2026

Overview

Bump all libdd-* dependencies from db05e1f to 48da0d8 to pick up libdatadog PR #2071, which fixes how the datadog-client-computed-stats and datadog-client-computed-top-level headers are parsed so the behavior matches the Go trace-agent.

Bottlecap consumes this exact path in bottlecap/src/traces/trace_agent.rs via (&parts.headers).into(), so it directly benefits from the fix.

Adapting to breaking API changes between the two revisions

  • HttpClientTrait was renamed to HttpClientCapability
  • SendData::send now requires C: HttpClientCapability + SleepCapability, so implemented SleepCapability for HttpClient

Testing

Added Tier 0 coverage in trace_agent.rs pinning the new header-parsing behavior at the (&headers).into() boundary handle_traces uses:

  • true, yes, t, 1 -> flag set
  • false, 0, f, F, FALSE, False -> flag clear
  • absent/empty -> clear
  • client_computed_top_level no longer set by presence alone (pre-bump regression)

These test would fail on the pre-bump rev (db05e1f), so they lock in the fix.

"Turns out yes means yes and false means false. Took a whole PR to teach the parser what every toddler already knows." — Claude 🤖

APMSVLS-487

Bump all libdd-* dependencies from db05e1f to 48da0d8 to pick up
libdatadog PR #2071, which fixes how `From<&HeaderMap> for
TracerHeaderTags` parses the `datadog-client-computed-stats` and
`datadog-client-computed-top-level` headers so the behavior matches the
Go trace-agent. Bottlecap consumes this path in
traces/trace_agent.rs via `(&parts.headers).into()`.

Adapt to breaking API changes between the two revisions:

- libdd_capabilities `HttpClientTrait` was renamed to
  `HttpClientCapability`.
- `SendData::send` now requires `C: HttpClientCapability +
  SleepCapability`, so implement `SleepCapability` for `HttpClient`
  (backed by tokio::time::sleep, mirroring libdatadog's
  NativeSleepCapability).
@datadog-prod-us1-4
Copy link
Copy Markdown

datadog-prod-us1-4 Bot commented Jun 3, 2026

Pipelines

Fix all issues with BitsAI

⚠️ Warnings

🚦 2 Pipeline jobs failed

DataDog/datadog-lambda-extension | integration-suite: [auth]   View in Datadog   GitLab

DataDog/datadog-lambda-extension | integration-suite: [snapstart]   View in Datadog   GitLab

Useful? React with 👍 / 👎

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

@lucaspimentel lucaspimentel changed the title chore(deps): bump libdatadog to 48da0d8 for client-computed header fix chore(deps): bump libdatadog to 48da0d8 for client-computed header fix Jun 3, 2026
…the libdatadog bump

Adds a #[cfg(test)] mod tests block at the (&headers).into() boundary that
handle_traces uses, giving the db05e1f -> 48da0d8 bump its missing behavioral
coverage for libdatadog#2071. Assertions are Go-agent-aligned (isHeaderTrue/
ParseBool): truthy values -> true, absent/empty -> false, falsey literals
(false/0/f/F/FALSE/False) -> false, and client_computed_top_level no longer set
by presence alone. These would fail on the pre-bump rev.
lucaspimentel added a commit that referenced this pull request Jun 3, 2026
…datadog bump PR

The Tier 0 tests assert libdatadog parsing behavior (not the _dd.compute_stats
feature), and libdatadog#2071 changes that behavior via the db05e1f -> 48da0d8
bump in PR #1244. Move them there so the bump carries its own behavioral
coverage and the assertions don't need to assert opposite things on two
branches. Feature branch keeps Tiers 1-3; rebase onto #1244 after it merges.
lucaspimentel added a commit that referenced this pull request Jun 3, 2026
…datadog bump PR

The Tier 0 tests assert libdatadog parsing behavior (not the _dd.compute_stats
feature), and libdatadog#2071 changes that behavior via the db05e1f -> 48da0d8
bump in PR #1244. Move them there so the bump carries its own behavioral
coverage and the assertions don't need to assert opposite things on two
branches. Feature branch keeps Tiers 1-3; rebase onto #1244 after it merges.
Describe the exact false-set the parser recognizes and note that non-ParseBool
values like "yes" resolve to true, matching what the truthy-values test asserts.

🤖 Co-Authored-By: Claude Code <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

}
}

impl SleepCapability for HttpClient {
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.

Shouldn't this live then either in test or with the test feature so its not included in prod code?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

The libdatadog version bump made SendData::send require HttpClientCapability + SleepCapability, and bottlecap calls send, so the binary won't compile without it.

The // never invoked on bottlecap's code paths comment only applies to the new() constructor. It's trait-required factory we never call, same as new_client() on HttpClientCapability above. The sleep() method itself is used in production: libdatadog's sender calls it for retry/backoff between send attempts.

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.

mmm, and so we're getting that new capability which might not be something we want for lambda lifecycle no?

Copy link
Copy Markdown
Member Author

@lucaspimentel lucaspimentel Jun 4, 2026

Choose a reason for hiding this comment

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

According to 🤖

The retry/backoff isn't new with this bump. send_with_retry already existed at the previous revision and bottlecap already goes through it. Bottlecap configures its own strategy in trace_flusher.rs (trace_retry_strategy(): 3 retries, 0ms delay, constant backoff), so we're already opted in explicitly.

SleepCapability only changed how libdatadog reaches the sleep primitive: the request timeout went from tokio::time::timeout(...) to a select! race against capabilities.sleep(timeout), which is the same tokio::time::sleep underneath on our target. Same runtime behavior, no new waiting in the Lambda lifecycle.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 4 out of 5 changed files in this pull request and generated no new comments.

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.

3 participants