Skip to content

Commit 965761a

Browse files
feat(bigquery): add opentelemetry W3C Trace Context to headers (#12203)
This adds header value using OpenTelemetry's [W3C Trace Context Propagation](https://www.w3.org/TR/trace-context-1/#trace-context-http-headers-format). --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent 8d23279 commit 965761a

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

java-bigquery/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import io.opentelemetry.api.common.AttributeKey;
2424
import io.opentelemetry.api.trace.Span;
2525
import io.opentelemetry.api.trace.Tracer;
26+
import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator;
27+
import io.opentelemetry.context.Context;
2628
import java.io.IOException;
2729

2830
/**
@@ -76,6 +78,10 @@ public void initialize(HttpRequest request) throws IOException {
7678
// No active span to exists, skip instrumentation
7779
return;
7880
}
81+
// propagate the W3C Trace Context (traceID and spanID) from the active span in headers
82+
W3CTraceContextPropagator.getInstance()
83+
.inject(Context.current(), request.getHeaders(), HttpHeaders::set);
84+
7985
addInitialHttpAttributesToSpan(span, request);
8086

8187
HttpResponseInterceptor originalInterceptor = request.getResponseInterceptor();

java-bigquery/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/telemetry/HttpTracingRequestInitializerTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,23 @@ public void testNoSpanIsCreatedIfNoActiveSpan() throws IOException {
145145
verify(delegateInitializer, times(1)).initialize(any(HttpRequest.class));
146146
}
147147

148+
@Test
149+
public void testTraceContextIsPropagatedInHeaders() throws IOException {
150+
HttpTransport transport = createTransport();
151+
HttpRequest request = buildGetRequest(transport, initializer, BASE_URL);
152+
153+
HttpResponse response = request.execute();
154+
response.disconnect();
155+
156+
assertEquals(
157+
String.format(
158+
"00-%s-%s-%s",
159+
parentSpan.getSpanContext().getTraceId(),
160+
parentSpan.getSpanContext().getSpanId(),
161+
parentSpan.getSpanContext().getTraceFlags().asHex()),
162+
request.getHeaders().get("traceparent"));
163+
}
164+
148165
@Test
149166
public void testDelegateInitializerIsCalled() throws IOException {
150167
HttpRequestInitializer delegateInitializer = mock(HttpRequestInitializer.class);

0 commit comments

Comments
 (0)