Skip to content

Baggage header not propagated on outgoing WebClient (Reactor Netty) requests #11510

@ls-adrian-chong

Description

@ls-adrian-chong

Summary

dd-trace-java does not inject the W3C baggage header on outgoing HTTP requests made via Spring WebClient (Reactor Netty transport). Trace headers (traceparent, x-datadog-*) are injected correctly, but baggage is consistently missing.

Environment

  • dd-java-agent: 1.62.0
  • Java: 17 and 25 (Amazon Corretto) — tested both, same result
  • Spring Boot: 3.4.13 and 3.5.14 — tested both, same result
  • Reactor Netty: 1.2.6 and 1.2.17 — tested both, same result

Configuration

DD_TRACE_PROPAGATION_STYLE=tracecontext,baggage,datadog
DD_TRACE_INTEGRATION_REACTOR_HOOKS_ENABLED=true
OTEL_PROPAGATORS=tracecontext,baggage

Also tried via JVM properties:

-Ddd.trace.propagation.style.extract=tracecontext,baggage,datadog
-Ddd.trace.propagation.style.inject=tracecontext,baggage,datadog
-Ddd.trace.integration.reactor-hooks.enabled=true

Reproduction

Minimal Spring Boot app with a single endpoint that receives a baggage header and proxies via WebClient:

@GetMapping("/proxy-netty")
public String proxyNetty() {
    return WebClient.builder().build()
        .get()
        .uri("http://localhost:9090/downstream")
        .retrieve()
        .bodyToMono(String.class)
        .block();
}

Steps:

  1. Start an echo server on port 9090 (prints received headers)
  2. Start the app with dd-java-agent attached
  3. Send: curl -H "baggage: userId=12345,sessionId=abc" http://localhost:8080/proxy-netty
  4. Observe echo server output

Expected: Echo server receives baggage: userId=12345,sessionId=abc
Actual: Echo server receives traceparent and x-datadog-* headers but no baggage

Notes

  • The same baggage header IS propagated correctly when using RestClient with JdkClientHttpRequestFactory or raw java.net.http.HttpClient.
  • This suggests the issue is specific to the Reactor Netty instrumentation path.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions