Skip to content

Commit 64c6421

Browse files
Add implementation for context propagation based on changed in OpenTelemetry 0.9.0. (#8884)
* Update to use implementation of context propagator object according to OpenTelemetry 0.9.0. * Add test for checking correct tracing context propagation. Co-authored-by: David Burns <[email protected]>
1 parent f89bec1 commit 64c6421

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

java/client/test/org/openqa/selenium/remote/tracing/opentelemetry/BUILD.bazel

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ java_test_suite(
1313
artifact("io.opentelemetry:opentelemetry-sdk"),
1414
artifact("io.opentelemetry:opentelemetry-sdk-common"),
1515
artifact("io.opentelemetry:opentelemetry-sdk-tracing"),
16+
artifact("io.opentelemetry:opentelemetry-context-prop"),
1617
artifact("junit:junit"),
1718
artifact("org.assertj:assertj-core"),
1819
],

java/client/test/org/openqa/selenium/remote/tracing/opentelemetry/TracerTest.java

+28-1
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,16 @@
2020
import io.opentelemetry.OpenTelemetry;
2121
import io.opentelemetry.common.AttributeKey;
2222
import io.opentelemetry.common.Attributes;
23+
import io.opentelemetry.context.propagation.ContextPropagators;
24+
import io.opentelemetry.context.propagation.DefaultContextPropagators;
2325
import io.opentelemetry.sdk.OpenTelemetrySdk;
2426
import io.opentelemetry.sdk.common.CompletableResultCode;
2527
import io.opentelemetry.sdk.trace.TracerSdkProvider;
2628
import io.opentelemetry.sdk.trace.data.SpanData;
2729
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
2830
import io.opentelemetry.sdk.trace.export.SpanExporter;
2931
import io.opentelemetry.trace.StatusCanonicalCode;
32+
import io.opentelemetry.trace.propagation.HttpTraceContext;
3033
import org.junit.Test;
3134
import org.openqa.selenium.grid.web.CombinedHandler;
3235
import org.openqa.selenium.remote.http.HttpRequest;
@@ -85,6 +88,27 @@ public void shouldBeAbleToCreateATracer() {
8588

8689
}
8790

91+
@Test
92+
public void shouldBeAbleToInjectContext() {
93+
List<SpanData> allSpans = new ArrayList<>();
94+
Tracer tracer = createTracer(allSpans);
95+
96+
HttpRequest cheeseReq = new HttpRequest(GET, "/cheeses");
97+
98+
assertThat(cheeseReq.getHeaderNames()).size().isEqualTo(0);
99+
100+
try (Span span = tracer.getCurrentContext().createSpan("parent")) {
101+
span.setAttribute("cheese", "gouda");
102+
span.setStatus(Status.NOT_FOUND);
103+
tracer.getPropagator().inject(tracer.getCurrentContext(),
104+
cheeseReq,
105+
(req, key, value) -> req.setHeader("cheese", "gouda"));
106+
}
107+
108+
assertThat(cheeseReq.getHeaderNames()).size().isEqualTo(1);
109+
assertThat(cheeseReq.getHeaderNames()).element(0).isEqualTo("cheese");
110+
}
111+
88112
@Test
89113
public void shouldBeAbleToCreateASpanWithAEvent() {
90114
List<SpanData> allSpans = new ArrayList<>();
@@ -568,8 +592,11 @@ public CompletableResultCode shutdown() {
568592
}).build());
569593

570594
io.opentelemetry.trace.Tracer otTracer = provider.get("get");
595+
ContextPropagators propagators = DefaultContextPropagators.builder()
596+
.addTextMapPropagator(HttpTraceContext.getInstance()).build();
597+
571598
return new OpenTelemetryTracer(
572599
otTracer,
573-
OpenTelemetry.getPropagators().getTextMapPropagator());
600+
propagators.getTextMapPropagator());
574601
}
575602
}

java/server/src/org/openqa/selenium/grid/log/LoggingOptions.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import io.opentelemetry.common.AttributeConsumer;
2222
import io.opentelemetry.common.AttributeKey;
2323
import io.opentelemetry.common.Attributes;
24+
import io.opentelemetry.context.propagation.ContextPropagators;
25+
import io.opentelemetry.context.propagation.DefaultContextPropagators;
2426
import io.opentelemetry.sdk.OpenTelemetrySdk;
2527
import io.opentelemetry.sdk.common.CompletableResultCode;
2628
import io.opentelemetry.sdk.trace.MultiSpanProcessor;
@@ -30,6 +32,7 @@
3032
import io.opentelemetry.sdk.trace.data.SpanData.Event;
3133
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
3234
import io.opentelemetry.sdk.trace.export.SpanExporter;
35+
import io.opentelemetry.trace.propagation.HttpTraceContext;
3336
import org.openqa.selenium.grid.config.Config;
3437
import org.openqa.selenium.internal.Require;
3538
import org.openqa.selenium.json.Json;
@@ -177,9 +180,14 @@ public CompletableResultCode shutdown() {
177180
exporter -> exporters.add(SimpleSpanProcessor.newBuilder(exporter).build()));
178181
tracerFactory.addSpanProcessor(MultiSpanProcessor.create(exporters));
179182

183+
// OpenTelemetry default propagators are no-op since version 0.9.0.
184+
// Hence, required propagators need to defined and added.
185+
ContextPropagators propagators = DefaultContextPropagators.builder()
186+
.addTextMapPropagator(HttpTraceContext.getInstance()).build();
187+
180188
return new OpenTelemetryTracer(
181189
tracerFactory.get("default"),
182-
OpenTelemetry.getPropagators().getTextMapPropagator());
190+
propagators.getTextMapPropagator());
183191
}
184192

185193
public void configureLogging() {

0 commit comments

Comments
 (0)