Skip to content

trace: add Random Trace ID Flag#8012

Merged
dmathieu merged 8 commits intoopen-telemetry:mainfrom
yuanyuanzhao3:support-w3c-sampled-random-flags
Mar 13, 2026
Merged

trace: add Random Trace ID Flag#8012
dmathieu merged 8 commits intoopen-telemetry:mainfrom
yuanyuanzhao3:support-w3c-sampled-random-flags

Conversation

@yuanyuanzhao3
Copy link
Copy Markdown
Contributor

@yuanyuanzhao3 yuanyuanzhao3 commented Mar 6, 2026

Summary

Adds API support for the W3C tracecontext random flag on TraceFlags and SpanContext in go.opentelemetry.io/otel/trace:

  • TraceFlags.IsRandom() — reports whether the random bit is set
  • TraceFlags.WithRandom(bool) — sets or clears the random bit in a copy of the flags
  • SpanContext.IsRandom() — reports whether the random bit is set in the span context's trace flags

These mirror the existing IsSampled / WithSampled pattern.

Motivation

The W3C Trace Context spec defines a random bit in trace flags to indicate probabilistic sampling. This is required for TraceIdRatioBased sampler support, where the random bit is set when a trace is probabilistically sampled and is used for extrapolated span metrics.

Related

Part of #7928 (Support TraceIdRatioBased Sampler). This PR adds the trace API needed for that work; sampler implementation and tracestate th handling will follow in separate PRs.

Co-Author

Joshua MacDonald jmacd@users.noreply.github.com

Co-authored-by: Joshua MacDonald <jmacd@users.noreply.github.com>
@codecov
Copy link
Copy Markdown

codecov bot commented Mar 6, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 81.6%. Comparing base (9c5a5df) to head (30dc8a0).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@          Coverage Diff          @@
##            main   #8012   +/-   ##
=====================================
  Coverage   81.5%   81.6%           
=====================================
  Files        304     304           
  Lines      23444   23452    +8     
=====================================
+ Hits       19130   19137    +7     
- Misses      3930    3931    +1     
  Partials     384     384           
Files with missing lines Coverage Δ
trace/trace.go 98.2% <100.0%> (+<0.1%) ⬆️

... and 2 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@yuanyuanzhao3 yuanyuanzhao3 force-pushed the support-w3c-sampled-random-flags branch from a6b577b to 78be0a5 Compare March 6, 2026 20:10
Added new features for W3C tracecontext random flag support in TraceFlags and SpanContext.
@yuanyuanzhao3
Copy link
Copy Markdown
Contributor Author

FYI, @jmacd

@dashpole
Copy link
Copy Markdown
Contributor

dashpole commented Mar 9, 2026

Overall, this makes sense to me. Can you share more details about how you will use them? What are you trying to do that needs these?

@yuanyuanzhao3
Copy link
Copy Markdown
Contributor Author

Overall, this makes sense to me. Can you share more details about how you will use them? What are you trying to do that needs these?

done. please take a look there.

@yuanyuanzhao3
Copy link
Copy Markdown
Contributor Author

This is ready to merge whenever the maintainers are ready. Do we need a second approval? @MrAlias or @dmathieu FYI just in case.

@dmathieu
Copy link
Copy Markdown
Member

We do need a second approval.

@pellared pellared changed the title Add W3C tracecontext IsRandom and WithRandom methods. trace: add Random Trace ID Flag Mar 12, 2026
Co-authored-by: Robert Pająk <pellared@hotmail.com>
@yuanyuanzhao3
Copy link
Copy Markdown
Contributor Author

From the contribution guideline, it looks like this is ready to be merged by a maintainer? If so, can someone help to merge? Or let me know what else is needed. Thanks.

@dmathieu dmathieu merged commit 2ffde5a into open-telemetry:main Mar 13, 2026
31 checks passed
@pellared pellared added this to the v1.43.0 milestone Apr 1, 2026
dmathieu added a commit that referenced this pull request Apr 3, 2026
Release issue:
#8127

## Added

- Add `IsRandom` and `WithRandom` on `TraceFlags`, and `IsRandom` on
`SpanContext` in `go.opentelemetry.io/otel/trace`
for [W3C Trace Context Level 2 Random Trace ID
Flag](https://www.w3.org/TR/trace-context-2/#random-trace-id-flag)
support. (#8012)
- Add service detection with `WithService` in
`go.opentelemetry.io/otel/sdk/resource`. (#7642)
- Add `DefaultWithContext` and `EnvironmentWithContext` in
`go.opentelemetry.io/otel/sdk/resource` to support plumbing
`context.Context` through default and environment detectors. (#8051)
- Support attributes with empty value (`attribute.EMPTY`) in
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc`.
(#8038)
- Support attributes with empty value (`attribute.EMPTY`) in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc`.
(#8038)
- Support attributes with empty value (`attribute.EMPTY`) in
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc`. (#8038)
- Support attributes with empty value (`attribute.EMPTY`) in
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp`.
(#8038)
- Support attributes with empty value (`attribute.EMPTY`) in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp`.
(#8038)
- Support attributes with empty value (`attribute.EMPTY`) in
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp`. (#8038)
- Support attributes with empty value (`attribute.EMPTY`) in
`go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest`. (#8038)
- Add support for per-series start time tracking for cumulative metrics
in `go.opentelemetry.io/otel/sdk/metric`.
  Set `OTEL_GO_X_PER_SERIES_START_TIMESTAMPS=true` to enable. (#8060)
- Add `WithCardinalityLimitSelector` for metric reader for configuring
cardinality limits specific to the instrument kind. (#7855)

## Changed

- Introduce the `EMPTY` Type in `go.opentelemetry.io/otel/attribute` to
reflect that an empty value is now a valid value, with `INVALID`
remaining as a deprecated alias of `EMPTY`. (#8038)
- Refactor slice handling in `go.opentelemetry.io/otel/attribute` to
optimize short slice values with fixed-size fast paths. (#8039)
- Improve performance of span metric recording in
`go.opentelemetry.io/otel/sdk/trace` by returning early if
self-observability is not enabled. (#8067)
- Improve formatting of metric data diffs in
`go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest`. (#8073)

## Deprecated

- Deprecate `INVALID` in `go.opentelemetry.io/otel/attribute`. Use
`EMPTY` instead. (#8038)

## Fixed

- Return spec-compliant `TraceIdRatioBased` description. This is a
breaking behavioral change, but it is necessary to
make the implementation
[spec-compliant](https://opentelemetry.io/docs/specs/otel/trace/sdk/#traceidratiobased).
(#8027)
- Fix a race condition in `go.opentelemetry.io/otel/sdk/metric` where
the lastvalue aggregation could collect the value 0 even when no
zero-value measurements were recorded. (#8056)
- Limit HTTP response body to 4 MiB in
`go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp` to
mitigate excessive memory usage caused by a misconfigured or malicious
server.
Responses exceeding the limit are treated as non-retryable errors.
(#8108)
- Limit HTTP response body to 4 MiB in
`go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp` to
mitigate excessive memory usage caused by a misconfigured or malicious
server.
Responses exceeding the limit are treated as non-retryable errors.
(#8108)
- Limit HTTP response body to 4 MiB in
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` to
mitigate excessive memory usage caused by a misconfigured or malicious
server.
Responses exceeding the limit are treated as non-retryable errors.
(#8108)
- `WithHostID` detector in `go.opentelemetry.io/otel/sdk/resource` to
use full path for `kenv` command on BSD. (#8113)
- Fix missing `request.GetBody` in
`go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp` to
correctly handle HTTP2 GOAWAY frame. (#8096)

---------

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
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.

4 participants