Skip to content

Commit 1d4f129

Browse files
committed
context propagators
1 parent fd6abf6 commit 1d4f129

3 files changed

Lines changed: 43 additions & 17 deletions

File tree

opentelemetry/src/main/java/io/grpc/opentelemetry/GrpcOpenTelemetry.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ private GrpcOpenTelemetry(Builder builder) {
101101
this.optionalLabels = ImmutableList.copyOf(builder.optionalLabels);
102102
this.openTelemetryMetricsModule = new OpenTelemetryMetricsModule(
103103
STOPWATCH_SUPPLIER, resource, optionalLabels, builder.plugins,
104-
builder.targetFilter);
104+
builder.targetFilter, openTelemetrySdk.getPropagators());
105105
this.openTelemetryTracingModule = new OpenTelemetryTracingModule(openTelemetrySdk);
106106
this.sink = new OpenTelemetryMetricSink(meter, enableMetrics, disableDefault, optionalLabels);
107107
}

opentelemetry/src/main/java/io/grpc/opentelemetry/OpenTelemetryMetricsModule.java

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import io.opentelemetry.api.baggage.Baggage;
5050
import io.opentelemetry.api.common.AttributesBuilder;
5151
import io.opentelemetry.context.Context;
52+
import io.opentelemetry.context.propagation.ContextPropagators;
5253
import java.util.ArrayList;
5354
import java.util.Collection;
5455
import java.util.Collections;
@@ -103,22 +104,27 @@ final class OpenTelemetryMetricsModule {
103104
@Nullable
104105
private final TargetFilter targetAttributeFilter;
105106

107+
private final ContextPropagators contextPropagators;
108+
106109
OpenTelemetryMetricsModule(Supplier<Stopwatch> stopwatchSupplier,
107110
OpenTelemetryMetricsResource resource,
108-
Collection<String> optionalLabels, List<OpenTelemetryPlugin> plugins) {
109-
this(stopwatchSupplier, resource, optionalLabels, plugins, null);
111+
Collection<String> optionalLabels, List<OpenTelemetryPlugin> plugins,
112+
ContextPropagators contextPropagators) {
113+
this(stopwatchSupplier, resource, optionalLabels, plugins, null, contextPropagators);
110114
}
111115

112116
OpenTelemetryMetricsModule(Supplier<Stopwatch> stopwatchSupplier,
113117
OpenTelemetryMetricsResource resource,
114118
Collection<String> optionalLabels, List<OpenTelemetryPlugin> plugins,
115-
@Nullable TargetFilter targetAttributeFilter) {
119+
@Nullable TargetFilter targetAttributeFilter,
120+
ContextPropagators contextPropagators) {
116121
this.resource = checkNotNull(resource, "resource");
117122
this.stopwatchSupplier = checkNotNull(stopwatchSupplier, "stopwatchSupplier");
118123
this.localityEnabled = optionalLabels.contains(LOCALITY_KEY.getKey());
119124
this.backendServiceEnabled = optionalLabels.contains(BACKEND_SERVICE_KEY.getKey());
120125
this.plugins = ImmutableList.copyOf(plugins);
121126
this.targetAttributeFilter = targetAttributeFilter;
127+
this.contextPropagators = checkNotNull(contextPropagators, "contextPropagators");
122128
}
123129

124130
@VisibleForTesting
@@ -361,7 +367,10 @@ static final class CallAttemptsTracerFactory extends ClientStreamTracer.Factory
361367
this.callPlugins = checkNotNull(callPlugins, "callPlugins");
362368
this.attemptDelayStopwatch = module.stopwatchSupplier.get();
363369
this.callStopWatch = module.stopwatchSupplier.get().start();
364-
this.baggage = Baggage.fromContext(Context.current());
370+
Baggage currentBaggage = BAGGAGE_KEY.get();
371+
this.baggage = currentBaggage == null
372+
? Baggage.fromContext(Context.current())
373+
: currentBaggage;
365374

366375
io.opentelemetry.api.common.Attributes attribute = io.opentelemetry.api.common.Attributes.of(
367376
METHOD_KEY, fullMethodName,
@@ -569,11 +578,14 @@ private static final class ServerTracer extends ServerStreamTracer {
569578
private volatile long outboundWireSize;
570579
private volatile long inboundWireSize;
571580

581+
private final Baggage baggage;
582+
572583
ServerTracer(OpenTelemetryMetricsModule module, String fullMethodName,
573-
List<OpenTelemetryPlugin.ServerStreamPlugin> streamPlugins) {
584+
List<OpenTelemetryPlugin.ServerStreamPlugin> streamPlugins, @Nullable Baggage baggage) {
574585
this.module = checkNotNull(module, "module");
575586
this.fullMethodName = fullMethodName;
576587
this.streamPlugins = checkNotNull(streamPlugins, "streamPlugins");
588+
this.baggage = baggage;
577589
this.stopwatch = module.stopwatchSupplier.get().start();
578590
}
579591

@@ -621,7 +633,8 @@ public void inboundWireSize(long bytes) {
621633
*/
622634
@Override
623635
public void streamClosed(Status status) {
624-
Baggage baggage = BAGGAGE_KEY.get();
636+
Baggage grpcContextBaggage = BAGGAGE_KEY.get();
637+
Baggage baggage = grpcContextBaggage != null ? grpcContextBaggage : this.baggage;
625638
Context otelContext = otelContextWithBaggage(baggage);
626639
if (streamClosedUpdater != null) {
627640
if (streamClosedUpdater.getAndSet(this, 1) != 0) {
@@ -679,7 +692,11 @@ public ServerStreamTracer newServerStreamTracer(String fullMethodName, Metadata
679692
}
680693
streamPlugins = Collections.unmodifiableList(streamPluginsMutable);
681694
}
682-
return new ServerTracer(OpenTelemetryMetricsModule.this, fullMethodName, streamPlugins);
695+
Context context = contextPropagators.getTextMapPropagator().extract(
696+
Context.current(), headers, MetadataGetter.getInstance());
697+
Baggage baggage = Baggage.fromContext(context);
698+
return new ServerTracer(
699+
OpenTelemetryMetricsModule.this, fullMethodName, streamPlugins, baggage);
683700
}
684701
}
685702

opentelemetry/src/test/java/io/grpc/opentelemetry/OpenTelemetryMetricsModuleTest.java

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,7 +1246,8 @@ public void clientLocalityMetrics_present() {
12461246
OpenTelemetryMetricsResource resource = GrpcOpenTelemetry.createMetricInstruments(testMeter,
12471247
enabledMetricsMap, disableDefaultMetrics);
12481248
OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule(
1249-
fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.locality"), emptyList());
1249+
fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.locality"), emptyList(),
1250+
openTelemetryTesting.getOpenTelemetry().getPropagators());
12501251
OpenTelemetryMetricsModule.CallAttemptsTracerFactory callAttemptsTracerFactory =
12511252
new CallAttemptsTracerFactory(module, target, method.getFullMethodName(), emptyList());
12521253

@@ -1314,7 +1315,8 @@ public void clientLocalityMetrics_missing() {
13141315
OpenTelemetryMetricsResource resource = GrpcOpenTelemetry.createMetricInstruments(testMeter,
13151316
enabledMetricsMap, disableDefaultMetrics);
13161317
OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule(
1317-
fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.locality"), emptyList());
1318+
fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.locality"), emptyList(),
1319+
openTelemetryTesting.getOpenTelemetry().getPropagators());
13181320
OpenTelemetryMetricsModule.CallAttemptsTracerFactory callAttemptsTracerFactory =
13191321
new CallAttemptsTracerFactory(module, target, method.getFullMethodName(), emptyList());
13201322

@@ -1379,7 +1381,8 @@ public void clientBackendServiceMetrics_present() {
13791381
enabledMetricsMap, disableDefaultMetrics);
13801382
OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule(
13811383
fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.backend_service"),
1382-
emptyList());
1384+
emptyList(),
1385+
openTelemetryTesting.getOpenTelemetry().getPropagators());
13831386
OpenTelemetryMetricsModule.CallAttemptsTracerFactory callAttemptsTracerFactory =
13841387
new CallAttemptsTracerFactory(module, target, method.getFullMethodName(), emptyList());
13851388

@@ -1448,7 +1451,8 @@ public void clientBackendServiceMetrics_missing() {
14481451
enabledMetricsMap, disableDefaultMetrics);
14491452
OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule(
14501453
fakeClock.getStopwatchSupplier(), resource, Arrays.asList("grpc.lb.backend_service"),
1451-
emptyList());
1454+
emptyList(),
1455+
openTelemetryTesting.getOpenTelemetry().getPropagators());
14521456
OpenTelemetryMetricsModule.CallAttemptsTracerFactory callAttemptsTracerFactory =
14531457
new CallAttemptsTracerFactory(module, target, method.getFullMethodName(), emptyList());
14541458

@@ -1642,7 +1646,8 @@ public void clientBaggagePropagationToMetrics() {
16421646
.build();
16431647

16441648
OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule(
1645-
fakeClock.getStopwatchSupplier(), customResource, emptyList(), emptyList());
1649+
fakeClock.getStopwatchSupplier(), customResource, emptyList(), emptyList(),
1650+
openTelemetryTesting.getOpenTelemetry().getPropagators());
16461651

16471652
// Define the test baggage and create a Context with it
16481653
Baggage testBaggage = Baggage.builder()
@@ -1683,7 +1688,8 @@ public void clientBaggagePropagationToMetrics() {
16831688
public void serverBaggagePropagationToMetrics() {
16841689
// 1. Create module and tracer factory using the mock resource
16851690
OpenTelemetryMetricsModule module = new OpenTelemetryMetricsModule(
1686-
fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList());
1691+
fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList(),
1692+
openTelemetryTesting.getOpenTelemetry().getPropagators());
16871693
ServerStreamTracer.Factory tracerFactory = module.getServerTracerFactory();
16881694
ServerStreamTracer tracer =
16891695
tracerFactory.newServerStreamTracer(method.getFullMethodName(), new Metadata());
@@ -1852,13 +1858,15 @@ public void targetAttributeFilter_rejectsTarget_mapsToOther() {
18521858
private OpenTelemetryMetricsModule newOpenTelemetryMetricsModule(
18531859
OpenTelemetryMetricsResource resource) {
18541860
return new OpenTelemetryMetricsModule(
1855-
fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList());
1861+
fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList(),
1862+
openTelemetryTesting.getOpenTelemetry().getPropagators());
18561863
}
18571864

18581865
private OpenTelemetryMetricsModule newOpenTelemetryMetricsModule(
18591866
OpenTelemetryMetricsResource resource, TargetFilter filter) {
18601867
return new OpenTelemetryMetricsModule(
1861-
fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList(), filter);
1868+
fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList(), filter,
1869+
openTelemetryTesting.getOpenTelemetry().getPropagators());
18621870
}
18631871

18641872
static class CallInfo<ReqT, RespT> extends ServerCallInfo<ReqT, RespT> {
@@ -1898,7 +1906,8 @@ public void serverBaggagePropagation_EndToEnd() throws Exception {
18981906
OpenTelemetry otel = openTelemetryTesting.getOpenTelemetry();
18991907
OpenTelemetryTracingModule tracingModule = new OpenTelemetryTracingModule(otel);
19001908
OpenTelemetryMetricsModule metricsModule = new OpenTelemetryMetricsModule(
1901-
fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList());
1909+
fakeClock.getStopwatchSupplier(), resource, emptyList(), emptyList(),
1910+
openTelemetryTesting.getOpenTelemetry().getPropagators());
19021911

19031912
// 2. Create Server with *both* tracer factories
19041913
server = InProcessServerBuilder.forName(serverName)

0 commit comments

Comments
 (0)