Skip to content

chore: backport multiple PRs to release-v2.10.x - #5174

Merged
darccio merged 18 commits into
release-v2.10.xfrom
dario.castane/dss/preparing-v2.10.0-rc.6
Aug 10, 2026
Merged

chore: backport multiple PRs to release-v2.10.x#5174
darccio merged 18 commits into
release-v2.10.xfrom
dario.castane/dss/preparing-v2.10.0-rc.6

Conversation

@darccio

@darccio darccio commented Aug 10, 2026

Copy link
Copy Markdown
Member

What does this PR do?

Backports:

Some additional backports have been done to fix CI (although govunlcheck won't be fixed because bumping gRPC is too heavy for our current dogfooding process):

Motivation

Delivering a more optimized hot-path for starting spans and context propagation, and decoupling ETP from CSS.

Reviewer's Checklist

  • Changed code has unit tests for its functionality at or near 100% coverage.
  • System-Tests covering this feature have been added and enabled with the va.b.c-dev version tag.
  • There is a benchmark for any new code, or changes to existing code.
  • If this interacts with the agent in a new way, a system test has been added.
  • New code is free of linting errors. You can check this by running make lint locally.
  • New code doesn't break existing tests. You can check this by running make test locally.
  • Add an appropriate team label so this PR gets put in the right place for the release notes.
  • All generated files are up to date. You can check this by running make generate locally.
  • Non-trivial go.mod changes, e.g. adding new modules, are reviewed by @DataDog/dd-trace-go-guild. Make sure all nested modules are up to date by running make fix-modules locally.

Unsure? Have a question? Request a review!

hannahkm and others added 13 commits August 10, 2026 13:47
<!--
* New contributors are highly encouraged to read our
  [CONTRIBUTING](/CONTRIBUTING.md) documentation.
* Commit and PR titles should be prefixed with the general area of the pull request's change.

-->

No longer includes decoding code in benchmarks, making measurements more accurate to what we actually care about (encoding payloads).

Partially or fully reverts the regressions from this [PR](#4849).

<!--
* A brief description of the change being made with this pull request.
* If the description here cannot be expressed in a succinct form, consider
  opening multiple pull requests instead of a single one.
-->

Reduce memory overhead of ETP benchmarks AND make benchmarks more accurate to real life customer data. Decoding does not happen in a customer app, but rather in the backend/agent. Having decoding measured as part of a benchmark's life cycle is not realistic or usually helpful.

<!--
* What inspired you to submit this pull request?
* Link any related GitHub issues or PRs here.
* If this resolves a GitHub issue, include "Fixes #XXXX" to link the issue and auto-close it on merge.
-->

<!--
* Authors can use this list as a reference to ensure that there are no problems
  during the review but the signing off is to be done by the reviewer(s).
-->

- [ ] Changed code has unit tests for its functionality at or near 100% coverage.
- [ ] [System-Tests](https://github.com/DataDog/system-tests/) covering this feature have been added and enabled with the va.b.c-dev version tag.
- [ ] There is a benchmark for any new code, or changes to existing code.
- [ ] If this interacts with the agent in a new way, a system test has been added.
- [ ] New code is free of linting errors. You can check this by running `make lint` locally.
- [ ] New code doesn't break existing tests. You can check this by running `make test` locally.
- [ ] Add an appropriate team label so this PR gets put in the right place for the release notes.
- [ ] All generated files are up to date. You can check this by running `make generate` locally.
- [ ] Non-trivial go.mod changes, e.g. adding new modules, are reviewed by @DataDog/dd-trace-go-guild. Make sure all nested modules are up to date by running `make fix-modules` locally.

Unsure? Have a question? Request a review!

Co-authored-by: kemal.akkoyun <kemal.akkoyun@datadoghq.com>
(cherry picked from commit d177e83)
…ractTextMap (#5119)

### What does this PR do?

Optimizes `propagatorBaggage.extractTextMap` (`ddtrace/tracer/textmap.go`), which runs on every `Extract` call as part of the default propagator chain (`datadog,tracecontext,baggage`) — including the overwhelmingly common case where no `baggage` header is present.

Two changes:

1. **Avoid the `ForeachKey` closure on the fast path.** `ForeachKey` is an interface method (`TextMapReader`), so escape analysis must assume any closure passed to it escapes — this forced both the closure and the local it captured onto the heap on *every* call. Added `lookupBaggageHeader`, which type-switches on `TextMapCarrier`/`HTTPHeadersCarrier` and iterates directly (no closure). Confirmed via `go build -gcflags=-m` that no heap escapes remain on this path. Other `TextMapReader` implementations still go through `ForeachKey`, isolated in its own function (`foreachBaggageHeader`) so its heap-boxed locals stay scoped to that fallback only.
2. **Return `(nil, nil)` instead of an allocated empty `*SpanContext`** when no baggage is found (or a malformed item forces a drop). `propagatorBaggage` is unexported and only reachable through `chainedPropagator`, whose two callers (`extractBaggage`, `extractIncomingSpanContext`) already nil-check the result — so this is a safe, narrower contract, not a behavior change for any caller.

### Motivation

Measured with escape analysis and `pprof`, not assumed: `BenchmarkExtractBaggageNoHeaders` showed 3 allocs/op (288 B), with the closure pattern responsible for 2 of the 3 and the unconditional `*SpanContext` responsible for 86% of the bytes. In the default chain, baggage was actually the *most expensive* of the three extractors on the no-headers path despite doing the least work.

```
BenchmarkExtractBaggageNoHeaders-10   147.75 ns/op   288 B/op   3 allocs/op   (before)
BenchmarkExtractBaggageNoHeaders-10    18.09 ns/op     0 B/op   0 allocs/op   (after)
```

`benchstat` over all `BenchmarkExtract*` benchmarks confirms every other extractor is noise-level unchanged.

Also added:
- `BenchmarkExtractBaggage` (`/TextMapCarrier` and `/HTTPHeadersCarrier`), since no existing benchmark exercised extraction with a baggage header actually present.
- A baggage case in `TestExtractNoHeaders` and three subtests in `TestExtractHeaderNameCaseInsensitivity` covering non-canonical carrier keys and `http.Header` multi-value last-wins semantics — gaps surfaced during review that the new carrier-specific fast path made load-bearing.
- Rewrote the doc comment on `BenchmarkExtractBaggageNoHeaders`, which asserted the old "a SpanContext must be allocated regardless" contract this PR removes.

### Reviewer's Checklist

- [x] Changed code has unit tests for its functionality at or near 100% coverage.
- [ ] [System-Tests](https://github.com/DataDog/system-tests/) covering this feature have been added and enabled with the va.b.c-dev version tag.
- [x] There is a benchmark for any new code, or changes to existing code.
- [ ] If this interacts with the agent in a new way, a system test has been added.
- [x] New code is free of linting errors. Verified with `golangci-lint run ./ddtrace/tracer/...` (0 issues) and `checklocks.sh` (no new issues; two pre-existing suggestions are in untouched files).
- [x] New code doesn't break existing tests. Full `ddtrace/tracer` suite passes with `-race`.
- [ ] Add an appropriate team label so this PR gets put in the right place for the release notes.
- [x] All generated files are up to date.
- [ ] Non-trivial go.mod changes — N/A, no go.mod changes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: kakkoyun <kakkoyun@users.noreply.github.com>
Co-authored-by: dario.castane <dario.castane@datadoghq.com>
(cherry picked from commit 39ceca0)
### What does this PR do?

Three targeted fixes to the tracer's HTTP-header propagation layer (`ddtrace/tracer/textmap.go`), each in its own commit with dedicated tests:

1. **Percent-encode `ot-baggage-*` values on inject.** The legacy OpenTracing `ot-baggage-<key>` prefix path re-emitted baggage values verbatim. A baggage value containing a decoded control byte (e.g. from a percent-encoded CRLF) became a raw control byte on every outbound instrumented call, causing `net/http` to reject the request and letting non-validating carriers (gRPC metadata, custom `TextMapWriter`s) deliver it downstream. Now percent-encoded the same way `propagatorBaggage.injectTextMap` already encodes the W3C `baggage` header.

2. **Enforce baggage item/byte limits on `ot-baggage-*`.** The W3C `baggage` header is capped at 64 items / 8192 bytes, but the `ot-baggage-*` prefix path had no such limit on either extractor (Datadog or W3C) or the injector, so an attacker could smuggle an unbounded number of baggage entries. Added a shared `addOTBaggageItem` helper and capped the injector loop the same way `propagatorBaggage` already does.

3. **Bound `tracestate` header size on extract and inject.** Only the `dd=` list-member was size-checked (256 bytes); the full incoming `tracestate` header — including arbitrarily large non-Datadog vendor entries — was stored verbatim as a propagating tag and re-emitted on every outbound call and shipped to the Agent as span meta. Now the whole header is dropped on extract past 4096 bytes, and oversized non-dd members (over 512 bytes, per the W3C recommendation) are skipped when the header is rebuilt on inject.

### Motivation

Hardening for the tracer's propagation layer against malformed/oversized header-based baggage and tracestate input from untrusted upstream callers. Each commit's tests assert the secure behavior directly (no control bytes survive re-injection, caps are enforced, oversized entries don't survive round-trip) at both the unit level (`ddtrace/tracer`) and end-to-end through the `net/http` and `gRPC` contrib integrations.

### Reviewer's Checklist

- [x] Changed code has unit tests for its functionality at or near 100% coverage.
- [ ] [System-Tests](https://github.com/DataDog/system-tests/) covering this feature have been added and enabled with the va.b.c-dev version tag.
- [ ] There is a benchmark for any new code, or changes to existing code.
- [ ] If this interacts with the agent in a new way, a system test has been added.
- [x] New code is free of linting errors. You can check this by running `make lint` locally.
- [x] New code doesn't break existing tests. You can check this by running `make test` locally.
- [ ] Add an appropriate team label so this PR gets put in the right place for the release notes.
- [ ] All generated files are up to date. You can check this by running `make generate` locally.
- [ ] Non-trivial go.mod changes, e.g. adding new modules, are reviewed by @DataDog/dd-trace-go-guild. Make sure all nested modules are up to date by running `make fix-modules` locally.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: dario.castane <dario.castane@datadoghq.com>
(cherry picked from commit 0553cf2)
…ocol (#5148)

Third in a split of [#5122](#5122) into a reviewable stack (see that PR for the full sequence). Stacked on [#5147](#5147) — this PR's diff is scoped to just the change below; merge #5147 first.

The name `TraceProtocol` read like "the protocol in use", but the value is only what was asked for — it says nothing about whether the trace-agent can actually serve it. Callers have to combine it with agent capability to get the protocol on the wire, and the old name gave no hint of that, which is how the gate in `newConfig` ended up being the only place that knew the difference.

Renames to `RequestedTraceProtocol` and documents the distinction. No behaviour change: the OTLP-span-metrics override stays exactly as it was (removed later in this stack, in a sibling PR).

Also adds `TraceProtocolVersionString`, the inverse of `resolveTraceProtocol`, and uses it in `SetTraceProtocol`. The env-var path reports `DD_TRACE_AGENT_PROTOCOL_VERSION` through the provider as the raw string (`"1.0"`), while the setter reported a `float64` — the same telemetry key arrived with two different types depending on which source set it last.

- [x] Changed code has unit tests for its functionality at or near 100% coverage.
- [x] New code doesn't break existing tests. You can check this by running `make test` locally.
- [x] New code is free of linting errors. You can check this by running `make lint` locally.
- [x] All generated files are up to date. You can check this by running `make generate` locally.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: dario.castane <dario.castane@datadoghq.com>
…5120)

### What does this PR do?

Fixes `chainedPropagator.extractIncomingSpanContext` (`ddtrace/tracer/textmap.go`) so that baggage survives `DD_TRACE_PROPAGATION_EXTRACT_FIRST=true` regardless of extractor order or propagation behavior.

**The bug:** with extract-first enabled, the extractor loop returned early on the first successful extractor (or on `ErrSpanContextNotFound`) — before the baggage propagator, later in the default chain (`datadog,tracecontext,baggage`), ever ran. This violated the tracer's own documented contract at `textmap.go:73-81` (*"continue (default): Continue the trace from incoming headers. Baggage is propagated."*) and produced three distinct failures depending on input:

- Datadog trace headers + a `baggage` header → baggage silently dropped.
- A `baggage` header only, no trace headers → returns `ErrSpanContextNotFound` instead of a baggage-only context (worse than dropping: this differs from non-extract-first behavior for identical input).
- Style order `baggage,datadog` (baggage runs *first*) → baggage is extracted into `pendingBaggage` and then discarded by the early return, proving this isn't just "baggage never ran" — a fix confined to `Extract()`'s restart branch couldn't have caught this case.

**The fix:** extract baggage once, up front, independent of extractor order and of `onlyExtractFirst` short-circuiting the trace-context loop, then let the existing tail logic (which already correctly merges `pendingBaggage`, builds a baggage-only context, or falls back to `ErrSpanContextNotFound`) run uniformly on every path. This removes the asymmetry entirely rather than adding a third special case.

**Bonus fix found during review:** the `restart` branch's compensation (`baggage = p.extractBaggage(carrier)`) *replaced* `incomingCtx.baggage` instead of merging into it, silently dropping legacy `ot-baggage-*` items whenever `restart`+extract-first had no W3C `baggage` header. Simplifying that branch to just read `incomingCtx.baggage` (now always fully populated) fixes this too.

**Also fixed:** the tail's `log.Debug("Extracted span context: %s", ctx.safeDebugString())` was unguarded, so `safeDebugString()` (an `fmt.Sprintf` over 8 args + an RLock) was evaluated on every successful extraction even with debug logging off — and extract-first requests now reach this line where they previously returned early. Guarded with `log.DebugEnabled()`, per the pattern documented on that function. Verified as a net improvement, not just cost-neutral: isolated benchmarks show `ExtractW3C`/`ExtractW3CUppercase` at -17% bytes / -24% allocs / -21% time, with no regressions elsewhere.

### Motivation

Found via adversarial code review while working on a separate baggage-allocation PR. Reproduced through the public API only (`tracer.NewPropagator(nil)` + `Extract`), no internals:

```
=== Scenario A: datadog trace headers + baggage, continue (default) ===
extractFirst=false -> baggage=map[user:alice] err=<nil>                   (before & after)
extractFirst=true  -> baggage=map[]           err=<nil>                   (before, buggy)
extractFirst=true  -> baggage=map[user:alice] err=<nil>                   (after, fixed)

=== Scenario B: baggage header ONLY, continue (default) ===
extractFirst=false -> baggage=map[user:bob]   err=<nil>                   (before & after)
extractFirst=true  -> baggage=map[]           err=span context not found  (before, buggy)
extractFirst=true  -> baggage=map[user:bob]   err=<nil>                   (after, fixed)

=== Scenario C: style order 'baggage,datadog' ===
extractFirst=true  -> baggage=map[]           err=<nil>                   (before, buggy)
extractFirst=true  -> baggage=map[user:alice] err=<nil>                   (after, fixed)
```

### Update: fixed a regression Codex found in this same PR

[Codex left a review comment](#5120 (comment)) on the `break` this PR added for the `ExtractFirst` + `ErrSpanContextNotFound` case: with the default `datadog,tracecontext,baggage` order, a request with a valid W3C `traceparent` + a `baggage` header but no `x-datadog-*` headers reached that `break` when the Datadog extractor returned `ErrSpanContextNotFound` — stopping the loop *before ever trying the `tracecontext` extractor*, which would have succeeded. The tail then built a baggage-only context and returned `nil` error, so the real trace context was silently discarded instead of being found.

**Accepted.** Confirmed against the PR that introduced `DD_TRACE_PROPAGATION_EXTRACT_FIRST`, [#2339](#2339), whose body documents the intended algorithm: step 1 ("if there is no valid trace context, continue to the next propagator") is unconditional; `ExtractFirst` only changes step 2 (stop once a context *is* found). This PR's `break` on failure inverted that — a pre-existing flaw (the original code's `return nil, nil, err` in the same spot had the identical inversion), but this PR's new tail-baggage-merge logic is what turned that quiet failure into a misleading "success."

**The fix:** folded the two separate `onlyExtractFirst` checks (one on the failure path, one on the success path) into a single check gated on `extractedCtx != nil`, so `ErrSpanContextNotFound` always falls through to try the next extractor regardless of `onlyExtractFirst` — matching what non-extract-first already does. Hard errors are unaffected; they still bail immediately in both modes. Added `TestExtractFirstContinuesPastFailedExtractor`, confirmed to fail on the pre-fix code and pass after. Re-ran the full `-race` suite, `instrumentation/httptrace`/`contrib/net/http`/`ddtrace/opentelemetry`, `golangci-lint`, `checklocks.sh`, and `benchstat` against the pre-fix tip of this branch — no regressions (geomean deltas within noise: +0.10% time, -0.03% bytes, +0.00% allocs).

### Reviewer's Checklist

- [x] Changed code has unit tests for its functionality at or near 100% coverage. New/updated: two subtests in `TestPropagationBehaviorExtract` (scenarios A + the bonus ot-baggage bug), `TestExtractOnlyBaggage` parametrized over style × extractFirst (scenario B), `TestExtractBaggageFirstThenDatadog` parametrized over extractFirst (scenario C), `TestExtractFirstContinuesPastFailedExtractor` (the Codex-found regression). Every new assertion was confirmed to fail on the pre-fix code and pass after.
- [ ] [System-Tests](https://github.com/DataDog/system-tests/) covering this feature have been added and enabled with the va.b.c-dev version tag.
- [x] There is a benchmark for any new code, or changes to existing code — existing `BenchmarkExtract*`/`BenchmarkInject*` re-run via `benchstat` against baseline; no regressions, `ExtractW3C`/`ExtractW3CUppercase` improved as noted above.
- [ ] If this interacts with the agent in a new way, a system test has been added.
- [x] New code is free of linting errors. Verified with `golangci-lint run ./ddtrace/tracer/...` (0 issues) and `checklocks.sh` (no new issues; two pre-existing suggestions are in untouched files).
- [x] New code doesn't break existing tests. Full `ddtrace/tracer` suite passes with `-race`; `instrumentation/httptrace`, `contrib/net/http`, `ddtrace/opentelemetry` all green.
- [ ] Add an appropriate team label so this PR gets put in the right place for the release notes.
- [x] All generated files are up to date.
- [ ] Non-trivial go.mod changes — N/A, no go.mod changes. No public API changed either (only unexported `chainedPropagator` methods).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: dario.castane <dario.castane@datadoghq.com>
(cherry picked from commit 150d1cd)
…metry (#5141)

## What does this PR do?

Part of a split of [#5122](#5122) into a reviewable stack (see that PR for the full sequence and rationale for the split).

`OTEL_TRACES_SPAN_METRICS_ENABLED=false` disables native stats computation when `DD_TRACE_STATS_COMPUTATION_ENABLED` was left at its default. That was done by writing the struct field directly, which skipped `configtelemetry.Report` — so telemetry kept reporting `DD_TRACE_STATS_COMPUTATION_ENABLED` as its default (`true`) while the tracer behaved as `false`, and the discrepancy was invisible from the outside.

Routes it through `SetStatsComputationEnabled` with `OriginCalculated`, which is what every other derived value in `loadConfig` does. Safe to call here: the config being built is still local, so taking its mutex cannot contend.

### Motivation

Unrelated telemetry-accuracy fix that surfaced while working on the trace-protocol/CSS decoupling in #5122; split out because it's independent of that change.

### Reviewer's Checklist

- [x] Changed code has unit tests for its functionality at or near 100% coverage.
- [x] New code doesn't break existing tests. You can check this by running `make test` locally.
- [x] New code is free of linting errors. You can check this by running `make lint` locally.
- [x] All generated files are up to date. You can check this by running `make generate` locally.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: dario.castane <dario.castane@datadoghq.com>
# Conflicts:
#	internal/config/config.go
#	internal/config/config_test.go
…abled (#5143)

## What does this PR do?

Part of a split of [#5122](#5122) into a reviewable stack (see that PR for the full sequence). Stacked on [#5141](#5141) — this PR's diff is scoped to just the change below; merge #5141 first.

`TraceProtocol` special-cased `OTLPSpanMetricsEnabled` and returned v0.4 unconditionally, on the rationale that the trace transport "must stay on v0.4 where the Datadog Agent can see the `Datadog-Client-Computed-Stats` header". That rationale doesn't hold: the header is a request header the Agent reads on either protocol, and OTLP span metrics are aggregated by their own concentrator and shipped over the separate `/v0.6/stats` endpoint. Neither depends on the `/vX/traces` wire format.

This is the same disproven reasoning as the CSS gate removed by #5122, applied to a second knob, so it goes the same way.

### Cross-repo dependency — already resolved

#5122's description flagged a prerequisite: `tests/parametric/test_otlp_trace_metrics.py:264` in `DataDog/system-tests` filtered trace requests on `("/v0.4/traces", "/v0.5/traces", "/v0.7/traces")`, omitting `/v1.0/traces`, so removing this coupling would make that filter return empty for the span-metrics test configuration.

That's already fixed: [DataDog/system-tests#7403](DataDog/system-tests#7403) added `/v1.0/traces` to the tuple and merged on 2026-07-29, ahead of this PR. No further system-tests work is needed before this can land.

### Reviewer's Checklist

- [x] Changed code has unit tests for its functionality at or near 100% coverage.
- [x] New code doesn't break existing tests. You can check this by running `make test` locally.
- [x] New code is free of linting errors. You can check this by running `make lint` locally.
- [x] All generated files are up to date. You can check this by running `make generate` locally.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: dario.castane <dario.castane@datadoghq.com>
# Conflicts:
#	ddtrace/tracer/option.go
#	internal/config/config_test.go
@github-actions github-actions Bot added the apm:ecosystem contrib/* related feature requests or bugs label Aug 10, 2026
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Config Audit

PACKAGE: contrib/confluentinc/confluent-kafka-go/kafkatrace
  STATUS      CONFIG                            CALL_SITES
  UNMIGRATED  DD_TRACE_KAFKA_ANALYTICS_ENABLED  1

PACKAGE: ddtrace/opentelemetry/log
  STATUS      CONFIG                            CALL_SITES
  STILL_READ  DD_AGENT_HOST                     2
  STILL_READ  DD_ENV                            1
  STILL_READ  DD_SERVICE                        1
  STILL_READ  DD_TAGS                           1
  STILL_READ  DD_TRACE_AGENT_URL                2
  STILL_READ  DD_TRACE_REPORT_HOSTNAME          1
  STILL_READ  DD_VERSION                        1
  UNMIGRATED  DD_HOSTNAME                       1
  UNMIGRATED  OTEL_BLRP_EXPORT_TIMEOUT          1
  UNMIGRATED  OTEL_BLRP_MAX_EXPORT_BATCH_SIZE   1
  UNMIGRATED  OTEL_BLRP_MAX_QUEUE_SIZE          1
  UNMIGRATED  OTEL_BLRP_SCHEDULE_DELAY          1
  UNMIGRATED  OTEL_EXPORTER_OTLP_ENDPOINT       4
  UNMIGRATED  OTEL_EXPORTER_OTLP_HEADERS        2
  UNMIGRATED  OTEL_EXPORTER_OTLP_LOGS_ENDPOINT  4
  UNMIGRATED  OTEL_EXPORTER_OTLP_LOGS_HEADERS   2
  UNMIGRATED  OTEL_EXPORTER_OTLP_LOGS_PROTOCOL  2
  UNMIGRATED  OTEL_EXPORTER_OTLP_LOGS_TIMEOUT   1
  UNMIGRATED  OTEL_EXPORTER_OTLP_PROTOCOL       2
  UNMIGRATED  OTEL_EXPORTER_OTLP_TIMEOUT        1
  UNMIGRATED  OTEL_RESOURCE_ATTRIBUTES          1

PACKAGE: ddtrace/opentelemetry/metric
  STATUS      CONFIG                                             CALL_SITES
  STILL_READ  DD_AGENT_HOST                                      2
  STILL_READ  DD_ENV                                             1
  STILL_READ  DD_METRICS_OTEL_ENABLED                            1
  STILL_READ  DD_SERVICE                                         1
  STILL_READ  DD_TAGS                                            1
  STILL_READ  DD_TRACE_AGENT_URL                                 2
  STILL_READ  DD_TRACE_REPORT_HOSTNAME                           1
  STILL_READ  DD_VERSION                                         1
  STILL_READ  OTEL_METRICS_EXPORTER                              1
  UNMIGRATED  DD_HOSTNAME                                        1
  UNMIGRATED  OTEL_EXPORTER_OTLP_ENDPOINT                        2
  UNMIGRATED  OTEL_EXPORTER_OTLP_HEADERS                         1
  UNMIGRATED  OTEL_EXPORTER_OTLP_METRICS_ENDPOINT                2
  UNMIGRATED  OTEL_EXPORTER_OTLP_METRICS_HEADERS                 1
  UNMIGRATED  OTEL_EXPORTER_OTLP_METRICS_PROTOCOL                2
  UNMIGRATED  OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE  1
  UNMIGRATED  OTEL_EXPORTER_OTLP_PROTOCOL                        2
  UNMIGRATED  OTEL_EXPORTER_OTLP_TIMEOUT                         1
  UNMIGRATED  OTEL_RESOURCE_ATTRIBUTES                           1
  UNMIGRATED  OTEL_SERVICE_NAME                                  1

PACKAGE: ddtrace/tracer
  STATUS      CONFIG                                     CALL_SITES
  STILL_READ  DD_API_KEY                                 1
  UNMIGRATED  DD_APM_TRACING_ENABLED                     1
  UNMIGRATED  DD_APP_KEY                                 1
  UNMIGRATED  DD_CIVISIBILITY_AGENTLESS_URL              1
  UNMIGRATED  DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED  1
  UNMIGRATED  DD_LLMOBS_AGENTLESS_ENABLED                1
  UNMIGRATED  DD_LLMOBS_ENABLED                          1
  UNMIGRATED  DD_LLMOBS_ML_APP                           1
  UNMIGRATED  DD_LLMOBS_PROJECT_NAME                     1
  UNMIGRATED  DD_SITE                                    2
  UNMIGRATED  DD_TRACE_128_BIT_TRACEID_LOGGING_ENABLED   1
  UNMIGRATED  DD_TRACE_DEBUG_SEELOG_WORKAROUND           1
  UNMIGRATED  DD_TRACE_ENABLED                           1
  UNMIGRATED  DD_TRACE_PROPAGATION_BEHAVIOR_EXTRACT      1
  UNMIGRATED  DD_TRACE_PROPAGATION_EXTRACT_FIRST         1
  UNMIGRATED  DD_TRACE_PROPAGATION_STYLE_EXTRACT         1
  UNMIGRATED  DD_TRACE_PROPAGATION_STYLE_INJECT          1
  UNMIGRATED  OTEL_TRACES_SAMPLER_ARG                    1

PACKAGE: instrumentation
  STATUS      CONFIG                                       CALL_SITES
  STILL_READ  DD_DATA_STREAMS_ENABLED                      1
  UNMIGRATED  DD_API_SECURITY_ENDPOINT_COLLECTION_ENABLED  1

PACKAGE: instrumentation/graphql
  STATUS      CONFIG                             CALL_SITES
  UNMIGRATED  DD_TRACE_GRAPHQL_ERROR_EXTENSIONS  1

PACKAGE: instrumentation/httptrace
  STATUS      CONFIG                                                 CALL_SITES
  UNMIGRATED  DD_TRACE_BAGGAGE_TAG_KEYS                              1
  UNMIGRATED  DD_TRACE_CLIENT_IP_ENABLED                             1
  UNMIGRATED  DD_TRACE_HTTP_SERVER_ERROR_STATUSES                    1
  UNMIGRATED  DD_TRACE_HTTP_URL_QUERY_STRING_ALLOWLIST               1
  UNMIGRATED  DD_TRACE_HTTP_URL_QUERY_STRING_ALLOWLIST_CLIENT        1
  UNMIGRATED  DD_TRACE_HTTP_URL_QUERY_STRING_ALLOWLIST_SERVER        1
  UNMIGRATED  DD_TRACE_HTTP_URL_QUERY_STRING_DISABLED                1
  UNMIGRATED  DD_TRACE_INFERRED_PROXY_SERVICES_ENABLED               1
  UNMIGRATED  DD_TRACE_OBFUSCATION_QUERY_STRING_REGEXP               2
  UNMIGRATED  DD_TRACE_RESOURCE_RENAMING_ALWAYS_SIMPLIFIED_ENDPOINT  1
  UNMIGRATED  DD_TRACE_RESOURCE_RENAMING_ENABLED                     1

PACKAGE: instrumentation/internal/namingschema
  STATUS      CONFIG                                             CALL_SITES
  STILL_READ  DD_SERVICE                                         1
  STILL_READ  DD_TRACE_SPAN_ATTRIBUTE_SCHEMA                     1
  UNMIGRATED  DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED  1

PACKAGE: internal
  STATUS      CONFIG                         CALL_SITES
  STILL_READ  DD_AGENT_HOST                  1
  STILL_READ  DD_TAGS                        1
  STILL_READ  DD_TRACE_AGENT_PORT            1
  STILL_READ  DD_TRACE_AGENT_URL             1
  UNMIGRATED  DD_EXTERNAL_ENV                1
  UNMIGRATED  DD_GIT_COMMIT_SHA              1
  UNMIGRATED  DD_GIT_REPOSITORY_URL          1
  UNMIGRATED  DD_TRACE_GIT_METADATA_ENABLED  1

PACKAGE: internal/appsec
  STATUS      CONFIG           CALL_SITES
  UNMIGRATED  DD_APPSEC_RULES  1

PACKAGE: internal/appsec/config
  STATUS      CONFIG                                                CALL_SITES
  UNMIGRATED  DD_API_SECURITY_DOWNSTREAM_BODY_ANALYSIS_SAMPLE_RATE  1
  UNMIGRATED  DD_API_SECURITY_ENABLED                               1
  UNMIGRATED  DD_API_SECURITY_MAX_DOWNSTREAM_REQUEST_BODY_ANALYSIS  1
  UNMIGRATED  DD_API_SECURITY_PROXY_SAMPLE_RATE                     1
  UNMIGRATED  DD_API_SECURITY_REQUEST_SAMPLE_RATE                   1
  UNMIGRATED  DD_API_SECURITY_SAMPLE_DELAY                          1
  UNMIGRATED  DD_APM_TRACING_ENABLED                                1
  UNMIGRATED  DD_APPSEC_ENABLED                                     1
  UNMIGRATED  DD_APPSEC_RASP_ENABLED                                1
  UNMIGRATED  DD_APPSEC_RULES                                       1
  UNMIGRATED  DD_APPSEC_SCA_ENABLED                                 1
  UNMIGRATED  DD_APPSEC_TRACE_RATE_LIMIT                            1
  UNMIGRATED  DD_APPSEC_WAF_TIMEOUT                                 1

PACKAGE: internal/appsec/listener/httpsec
  STATUS      CONFIG                     CALL_SITES
  UNMIGRATED  DD_TRACE_CLIENT_IP_HEADER  1

PACKAGE: internal/bazel
  STATUS      CONFIG                                  CALL_SITES
  UNMIGRATED  DD_TEST_OPTIMIZATION_MANIFEST_FILE      1
  UNMIGRATED  DD_TEST_OPTIMIZATION_PAYLOADS_IN_FILES  1

PACKAGE: internal/civisibility/envconfig
  STATUS      CONFIG                   CALL_SITES
  STILL_READ  DD_CIVISIBILITY_ENABLED  1

PACKAGE: internal/civisibility/integrations
  STATUS      CONFIG                                               CALL_SITES
  STILL_READ  DD_SERVICE                                           1
  STILL_READ  DD_TRACE_DEBUG                                       1
  UNMIGRATED  DD_CIVISIBILITY_CODE_COVERAGE_REPORT_UPLOAD_ENABLED  1
  UNMIGRATED  DD_CIVISIBILITY_FLAKY_RETRY_COUNT                    1
  UNMIGRATED  DD_CIVISIBILITY_FLAKY_RETRY_ENABLED                  1
  UNMIGRATED  DD_CIVISIBILITY_GIT_UPLOAD_ENABLED                   1
  UNMIGRATED  DD_CIVISIBILITY_IMPACTED_TESTS_DETECTION_ENABLED     1
  UNMIGRATED  DD_CIVISIBILITY_SUBTEST_FEATURES_ENABLED             1
  UNMIGRATED  DD_CIVISIBILITY_TOTAL_FLAKY_RETRY_COUNT              1
  UNMIGRATED  DD_TEST_MANAGEMENT_ATTEMPT_TO_FIX_RETRIES            1
  UNMIGRATED  DD_TEST_MANAGEMENT_ENABLED                           1

PACKAGE: internal/civisibility/integrations/gotesting
  STATUS      CONFIG                                                           CALL_SITES
  UNMIGRATED  DD_CIVISIBILITY_INTERNAL_PARALLEL_EARLY_FLAKE_DETECTION_ENABLED  1
  UNMIGRATED  DD_TEST_MANAGEMENT_ENABLED                                       1

PACKAGE: internal/civisibility/integrations/logs
  STATUS      CONFIG                        CALL_SITES
  UNMIGRATED  DD_CIVISIBILITY_LOGS_ENABLED  1

PACKAGE: internal/civisibility/utils
  STATUS      CONFIG                              CALL_SITES
  STILL_READ  DD_SERVICE                          1
  UNMIGRATED  DD_ACTION_EXECUTION_ID              1
  UNMIGRATED  DD_PIPELINE_EXECUTION_ID            1
  UNMIGRATED  DD_TEST_OPTIMIZATION_ENV_DATA_FILE  1
  UNMIGRATED  DD_TEST_SESSION_NAME                1

PACKAGE: internal/civisibility/utils/net
  STATUS      CONFIG                             CALL_SITES
  STILL_READ  DD_API_KEY                         1
  STILL_READ  DD_CIVISIBILITY_AGENTLESS_ENABLED  1
  STILL_READ  DD_ENV                             1
  STILL_READ  DD_SERVICE                         1
  STILL_READ  DD_TAGS                            1
  STILL_READ  DD_VERSION                         1
  UNMIGRATED  DD_CIVISIBILITY_AGENTLESS_URL      1
  UNMIGRATED  DD_SITE                            1

PACKAGE: internal/civisibility/utils/telemetry
  STATUS      CONFIG                                         CALL_SITES
  UNMIGRATED  DD_CIVISIBILITY_AUTO_INSTRUMENTATION_PROVIDER  1

PACKAGE: internal/globalconfig
  STATUS      CONFIG                           CALL_SITES
  UNMIGRATED  DD_INSTRUMENTATION_INSTALL_ID    1
  UNMIGRATED  DD_INSTRUMENTATION_INSTALL_TIME  1
  UNMIGRATED  DD_INSTRUMENTATION_INSTALL_TYPE  1

PACKAGE: internal/hostname
  STATUS      CONFIG       CALL_SITES
  UNMIGRATED  DD_HOSTNAME  1

PACKAGE: internal/namingschema
  STATUS      CONFIG                                             CALL_SITES
  STILL_READ  DD_SERVICE                                         1
  STILL_READ  DD_TRACE_SPAN_ATTRIBUTE_SCHEMA                     1
  UNMIGRATED  DD_TRACE_REMOVE_INTEGRATION_SERVICE_NAMES_ENABLED  1

PACKAGE: internal/processtags
  STATUS      CONFIG                                          CALL_SITES
  UNMIGRATED  DD_EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED  1

PACKAGE: internal/remoteconfig
  STATUS      CONFIG                                  CALL_SITES
  STILL_READ  DD_ENV                                  1
  UNMIGRATED  DD_RC_TUF_ROOT                          1
  UNMIGRATED  DD_REMOTE_CONFIGURATION_ENABLED         1
  UNMIGRATED  DD_REMOTE_CONFIG_POLL_INTERVAL_SECONDS  1

PACKAGE: internal/stacktrace
  STATUS      CONFIG                           CALL_SITES
  UNMIGRATED  DD_APPSEC_MAX_STACK_TRACE_DEPTH  1
  UNMIGRATED  DD_APPSEC_STACK_TRACE_ENABLED    1

PACKAGE: internal/telemetry
  STATUS      CONFIG                                             CALL_SITES
  STILL_READ  DD_API_KEY                                         1
  UNMIGRATED  DD_API_SECURITY_ENDPOINT_COLLECTION_MESSAGE_LIMIT  1
  UNMIGRATED  DD_INSTRUMENTATION_TELEMETRY_ENABLED               1
  UNMIGRATED  DD_SITE                                            1
  UNMIGRATED  DD_TELEMETRY_DEBUG                                 1
  UNMIGRATED  DD_TELEMETRY_DEPENDENCY_COLLECTION_ENABLED         1
  UNMIGRATED  DD_TELEMETRY_EXTENDED_HEARTBEAT_INTERVAL           1
  UNMIGRATED  DD_TELEMETRY_HEARTBEAT_INTERVAL                    1
  UNMIGRATED  DD_TELEMETRY_LOG_COLLECTION_ENABLED                1
  UNMIGRATED  DD_TELEMETRY_METRICS_ENABLED                       1

PACKAGE: openfeature
  STATUS      CONFIG                                                     CALL_SITES
  STILL_READ  DD_ENV                                                     2
  STILL_READ  DD_SERVICE                                                 2
  STILL_READ  DD_VERSION                                                 2
  UNMIGRATED  DD_EXPERIMENTAL_FLAGGING_PROVIDER_ENABLED                  1
  UNMIGRATED  DD_EXPERIMENTAL_FLAGGING_PROVIDER_SPAN_ENRICHMENT_ENABLED  1
  UNMIGRATED  DD_FLAGGING_EVALUATION_COUNTS_ENABLED                      1

PACKAGE: profiler
  STATUS      CONFIG                                    CALL_SITES
  STILL_READ  DD_API_KEY                                1
  STILL_READ  DD_ENV                                    1
  STILL_READ  DD_SERVICE                                1
  STILL_READ  DD_TAGS                                   1
  STILL_READ  DD_TRACE_STARTUP_LOGS                     1
  STILL_READ  DD_VERSION                                1
  UNMIGRATED  DD_PROFILING_AGENTLESS                    1
  UNMIGRATED  DD_PROFILING_DEBUG_COMPRESSION_SETTINGS   1
  UNMIGRATED  DD_PROFILING_DELTA                        1
  UNMIGRATED  DD_PROFILING_ENABLED                      3
  UNMIGRATED  DD_PROFILING_ENDPOINT_COUNT_ENABLED       1
  UNMIGRATED  DD_PROFILING_EXECUTION_TRACE_ENABLED      1
  UNMIGRATED  DD_PROFILING_EXECUTION_TRACE_LIMIT_BYTES  1
  UNMIGRATED  DD_PROFILING_EXECUTION_TRACE_PERIOD       1
  UNMIGRATED  DD_PROFILING_FLUSH_ON_EXIT                1
  UNMIGRATED  DD_PROFILING_OUTPUT_DIR                   1
  UNMIGRATED  DD_PROFILING_UPLOAD_TIMEOUT               1
  UNMIGRATED  DD_PROFILING_URL                          1
  UNMIGRATED  DD_SITE                                   1

@datadog-datadog-prod-us1-2

datadog-datadog-prod-us1-2 Bot commented Aug 10, 2026

Copy link
Copy Markdown

Tests

🎉 All green!

🧪 All tests passed
❄️ No new flaky tests detected

🎯 Code Coverage (details)
Patch Coverage: 76.78%
Overall Coverage: 63.06% (+0.08%)

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

darccio and others added 4 commits August 10, 2026 14:22
Backport the govulncheck-specific parts of 9eae137 so checksum and Go cache corruption failures clear the caches and retry without masking real vulnerability findings.
Scoped backport of the span-pool-related pieces from a40b7e5. This restores the deterministic Orchestrion assertion added on main.
\`v0.82.0-rc.2\` is the release candidate for the upcoming \`v0.82.0\` stable release. Once \`v0.82.0\` is officially released, this PR will be updated to pin to the stable tag before merging.

- Bumps all \`datadog-agent/*\` packages from \`v0.79.0\` to \`v0.82.0-rc.2\`
- Transitive dependencies (otel, grpc, golang.org/x/\*, gopsutil, etc.) updated accordingly
- Ran \`scripts/fix_modules.sh\` to tidy all sub-modules

This is a prerequisite for the cardinality limits feature PR (#5032) which depends on new APIs in \`pkg/trace/stats\` introduced in v0.82.0.

- [ ] CI passes (all go.mod/go.sum checks, unit tests)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: kemal.akkoyun <kemal.akkoyun@datadoghq.com>
Implements the Cardinality Limits RFC for the stats concentrator (client-side stats).

- Six per-bucket limits cap distinct values for: `additional_metric_tags`, `whole_key`, `resource`, `http_endpoint`, `peer_tags`, `origin`
- Each collapse emits a `datadog.tracer.stats.collapsed_spans` statsd metric and instrumentation telemetry tagged with `collapsed:<field>`
- All limits are effectively no-ops by default (high caps); agent PR #52871 wires the actual values
- Depends on new `BucketCardinalityLimits`, `SpanCollapseResult`, and `DrainBlockCounts` APIs in `pkg/trace/stats` v0.82.0-rc.2

**New configuration:**

| Env var | Option | Default |
|---|---|---|
| `DD_TRACE_STATS_CARDINALITY_LIMIT` | `WithStatsCardinalityLimit` | 2048 |
| `DD_TRACE_STATS_RESOURCE_CARDINALITY_LIMIT` | `WithStatsResourceCardinalityLimit` | 1024 |
| `DD_TRACE_STATS_HTTP_ENDPOINT_CARDINALITY_LIMIT` | `WithStatsHTTPEndpointCardinalityLimit` | 512 |
| `DD_TRACE_STATS_PEER_TAGS_CARDINALITY_LIMIT` | `WithStatsPeerTagsCardinalityLimit` | 512 |
| `DD_TRACE_STATS_ORIGIN_CARDINALITY_LIMIT` | `WithStatsOriginCardinalityLimit` | 20 |

> Stacked on #5031 — review that first, then this PR shows only the feature diff.

- [ ] `go test ./ddtrace/tracer/... -run TestFlushAndSendCollapsedSpansMetric` — 6 collapse metric tests
- [ ] `go test ./internal/config/...` — telemetry setter and cardinality config tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: darccio <dario.castane@datadoghq.com>
Co-authored-by: sam.maya <sam.maya@datadoghq.com>
@pr-commenter

pr-commenter Bot commented Aug 10, 2026

Copy link
Copy Markdown

Benchmarks

Benchmark execution time: 2026-08-10 14:28:15

Comparing candidate commit 53e4648 in PR branch dario.castane/dss/preparing-v2.10.0-rc.6 with baseline commit bca4fd7 in branch release-v2.10.x.

Found 38 performance improvements and 6 performance regressions! Performance is the same for 257 metrics, 1 unstable metrics, 1 flaky benchmarks without significant changes.

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:BenchmarkExtractW3C

  • 🟩 allocated_mem [-232 bytes; -232 bytes] or [-16.111%; -16.111%]
  • 🟩 allocations [-5; -5] or [-23.810%; -23.810%]
  • 🟩 execution_time [-584.388ns; -556.412ns] or [-26.901%; -25.613%]

scenario:BenchmarkHttpServeTrace

  • 🟩 allocated_mem [-292 bytes; -243 bytes] or [-3.830%; -3.181%]
  • 🟩 allocations [-2; -2] or [-2.632%; -2.632%]

scenario:BenchmarkHttpServeTraceQueryObfuscation/few_params

  • 🟩 allocated_mem [-310 bytes; -259 bytes] or [-3.996%; -3.333%]
  • 🟩 allocations [-2; -2] or [-2.564%; -2.564%]

scenario:BenchmarkHttpServeTraceQueryObfuscation/many_params

  • 🟩 allocated_mem [-273 bytes; -224 bytes] or [-3.478%; -2.855%]
  • 🟩 allocations [-2; -2] or [-2.564%; -2.564%]

scenario:BenchmarkHttpServeTraceQueryObfuscation/really_long_1

  • 🟩 allocated_mem [-285 bytes; -233 bytes] or [-2.648%; -2.171%]
  • 🟩 allocations [-3; -3] or [-3.846%; -3.846%]

scenario:BenchmarkHttpServeTraceQueryObfuscation/really_long_2

  • 🟩 allocated_mem [-330 bytes; -243 bytes] or [-3.080%; -2.267%]
  • 🟩 allocations [-3; -3] or [-3.846%; -3.846%]

scenario:BenchmarkMetrics/distribution/handle-reused

  • 🟥 execution_time [+1.319ns; +2.431ns] or [+4.857%; +8.955%]

scenario:BenchmarkOTLPProtoMarshal/1000spans

  • 🟩 execution_time [-59.835µs; -50.158µs] or [-5.268%; -4.416%]

scenario:BenchmarkOTLPProtoMarshal/100spans

  • 🟩 execution_time [-7.116µs; -5.088µs] or [-6.313%; -4.514%]

scenario:BenchmarkOTLPProtoMarshal/10spans

  • 🟩 execution_time [-406.290ns; -227.310ns] or [-3.588%; -2.008%]

scenario:BenchmarkOTLPProtoMarshal/1span

  • 🟩 execution_time [-115.350ns; -100.650ns] or [-8.032%; -7.009%]

scenario:BenchmarkOTLPProtoSize/1000spans

  • 🟩 execution_time [-45.325µs; -33.692µs] or [-12.129%; -9.016%]

scenario:BenchmarkOTLPProtoSize/100spans

  • 🟩 execution_time [-4.103µs; -2.796µs] or [-11.136%; -7.587%]

scenario:BenchmarkOTLPProtoSize/10spans

  • 🟩 execution_time [-435.679ns; -352.121ns] or [-11.440%; -9.246%]

scenario:BenchmarkOTLPProtoSize/1span

  • 🟩 execution_time [-46.300ns; -35.420ns] or [-10.167%; -7.778%]

scenario:BenchmarkOTLPTraceWriterAdd/10spans

  • 🟩 execution_time [-822.358ns; -524.242ns] or [-3.327%; -2.121%]

scenario:BenchmarkOTLPTraceWriterAdd/50spans

  • 🟩 execution_time [-5.002µs; -3.411µs] or [-4.039%; -2.754%]

scenario:BenchmarkOTLPTraceWriterAdd/5spans

  • 🟩 execution_time [-411.765ns; -252.635ns] or [-3.328%; -2.042%]

scenario:BenchmarkOTelApiWithCustomTags/datadog_otel_api

  • 🟥 allocations [+1; +1] or [+4.000%; +4.000%]
  • 🟥 execution_time [+238.247ns; +283.553ns] or [+5.397%; +6.423%]

scenario:BenchmarkOTelApiWithCustomTags/otel_api

  • 🟥 allocations [+1; +1] or [+2.500%; +2.500%]

scenario:BenchmarkPartialFlushing/Disabled

  • 🟩 allocated_mem [-128.618MB; -127.336MB] or [-40.368%; -39.966%]
  • 🟩 allocations [-1853425; -1849963] or [-58.792%; -58.683%]
  • 🟩 execution_time [-114.622ms; -107.655ms] or [-21.968%; -20.633%]

scenario:BenchmarkPartialFlushing/Enabled

  • 🟩 allocated_mem [-179.131MB; -171.841MB] or [-50.393%; -48.342%]
  • 🟩 allocations [-1870291; -1848737] or [-59.143%; -58.462%]
  • 🟩 avgHeapInUse(Mb) [-94.007MB; -84.889MB] or [-79.277%; -71.588%]
  • 🟩 execution_time [-136.707ms; -121.420ms] or [-25.986%; -23.080%]

scenario:BenchmarkPayloadVersions/metastruct_1000spans/v1.0

  • 🟩 execution_time [-18.645µs; -14.398µs] or [-6.168%; -4.763%]

scenario:BenchmarkPayloadVersions/metastruct_100spans/v1.0

  • 🟩 execution_time [-1.513µs; -1.272µs] or [-4.417%; -3.713%]

scenario:BenchmarkPayloadVersions/metastruct_10spans/v1.0

  • 🟩 execution_time [-366.809ns; -150.391ns] or [-5.465%; -2.240%]

scenario:BenchmarkPayloadVersions/simple_1000spans/v1.0

  • 🟩 allocated_mem [-1 bytes; -1 bytes] or [-2.857%; -2.857%]
  • 🟩 execution_time [-8.168µs; -7.885µs] or [-5.298%; -5.114%]

scenario:BenchmarkPayloadVersions/simple_100spans/v1.0

  • 🟩 execution_time [-849.432ns; -783.768ns] or [-5.184%; -4.783%]

scenario:BenchmarkPayloadVersions/simple_10spans/v1.0

  • 🟩 execution_time [-117.663ns; -94.537ns] or [-4.976%; -3.998%]

scenario:BenchmarkTracerAddSpans

  • 🟥 allocations [+1; +1] or [+5.000%; +5.000%]
  • 🟥 execution_time [+445.392ns; +474.608ns] or [+8.854%; +9.435%]

Known flaky benchmarks

These benchmarks are marked as flaky and will not trigger a failure. Modify FLAKY_BENCHMARKS_REGEX to control which benchmarks are marked as flaky.

Known flaky benchmarks without significant changes:

  • scenario:BenchmarkOTLPTraceWriterFlush

Bumps `datadog-agent/pkg/*` dependencies to v0.82.0 - released on Aug 4th - as required version to cover #5032.

- [ ] Changed code has unit tests for its functionality at or near 100% coverage.
- [ ] [System-Tests](https://github.com/DataDog/system-tests/) covering this feature have been added and enabled with the va.b.c-dev version tag.
- [ ] There is a benchmark for any new code, or changes to existing code.
- [ ] If this interacts with the agent in a new way, a system test has been added.
- [ ] New code is free of linting errors. You can check this by running `make lint` locally.
- [ ] New code doesn't break existing tests. You can check this by running `make test` locally.
- [ ] Add an appropriate team label so this PR gets put in the right place for the release notes.
- [ ] All generated files are up to date. You can check this by running `make generate` locally.
- [ ] Non-trivial go.mod changes, e.g. adding new modules, are reviewed by @DataDog/dd-trace-go-guild. Make sure all nested modules are up to date by running `make fix-modules` locally.

Unsure? Have a question? Request a review!

Co-authored-by: dario.castane <dario.castane@datadoghq.com>
@darccio
darccio marked this pull request as ready for review August 10, 2026 16:51
@darccio
darccio requested review from a team as code owners August 10, 2026 16:51
@darccio
darccio requested review from rarguelloF and removed request for a team August 10, 2026 16:51
@darccio
darccio merged commit 28a1c14 into release-v2.10.x Aug 10, 2026
336 of 339 checks passed
@darccio
darccio deleted the dario.castane/dss/preparing-v2.10.0-rc.6 branch August 10, 2026 16:51

@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: 53e4648e3a

ℹ️ 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 .github/workflows/apps/go-retry.sh
Comment thread ddtrace/tracer/textmap.go
Comment thread ddtrace/tracer/stats.go
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

apm:ecosystem contrib/* related feature requests or bugs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants