Skip to content

Commit 91ae29b

Browse files
committed
Add generic Baggage propagator which can be used in the same situation where PropagatorBasedSpanLinksExtractor is used
1 parent bacd3d3 commit 91ae29b

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.instrumentation.api.internal;
7+
8+
import io.opentelemetry.api.baggage.Baggage;
9+
import io.opentelemetry.api.common.Attributes;
10+
import io.opentelemetry.context.Context;
11+
import io.opentelemetry.context.propagation.TextMapGetter;
12+
import io.opentelemetry.context.propagation.TextMapPropagator;
13+
import io.opentelemetry.instrumentation.api.instrumenter.ContextCustomizer;
14+
15+
/**
16+
* This class is internal and is hence not for public use. Its APIs are unstable and can change at
17+
* any time.
18+
*/
19+
public class PropagatorBasedBaggageExtractor<REQUEST> implements ContextCustomizer<REQUEST> {
20+
21+
private final TextMapPropagator propagator;
22+
private final TextMapGetter<REQUEST> getter;
23+
24+
public PropagatorBasedBaggageExtractor(
25+
TextMapPropagator propagator, TextMapGetter<REQUEST> getter) {
26+
this.propagator = propagator;
27+
this.getter = getter;
28+
}
29+
30+
@Override
31+
public Context onStart(Context parentContext, REQUEST request, Attributes startAttributes) {
32+
Context extracted = propagator.extract(parentContext, request, getter);
33+
Baggage baggage = Baggage.fromContext(extracted);
34+
return baggage.storeInContext(parentContext);
35+
}
36+
}

instrumentation/jms/jms-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/jms/JmsInstrumenterFactory.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import io.opentelemetry.instrumentation.api.instrumenter.Instrumenter;
1919
import io.opentelemetry.instrumentation.api.instrumenter.InstrumenterBuilder;
2020
import io.opentelemetry.instrumentation.api.instrumenter.SpanKindExtractor;
21+
import io.opentelemetry.instrumentation.api.internal.PropagatorBasedBaggageExtractor;
2122
import io.opentelemetry.instrumentation.api.internal.PropagatorBasedSpanLinksExtractor;
2223
import java.util.ArrayList;
2324
import java.util.Collection;
@@ -79,6 +80,10 @@ public Instrumenter<MessageWithDestination, Void> createConsumerReceiveInstrumen
7980
new PropagatorBasedSpanLinksExtractor<>(
8081
openTelemetry.getPropagators().getTextMapPropagator(),
8182
MessagePropertyGetter.INSTANCE));
83+
builder.addContextCustomizer(
84+
new PropagatorBasedBaggageExtractor<>(
85+
openTelemetry.getPropagators().getTextMapPropagator(),
86+
MessagePropertyGetter.INSTANCE));
8287
}
8388
return builder.buildInstrumenter(SpanKindExtractor.alwaysConsumer());
8489
}
@@ -101,6 +106,10 @@ public Instrumenter<MessageWithDestination, Void> createConsumerProcessInstrumen
101106
new PropagatorBasedSpanLinksExtractor<>(
102107
openTelemetry.getPropagators().getTextMapPropagator(),
103108
MessagePropertyGetter.INSTANCE));
109+
builder.addContextCustomizer(
110+
new PropagatorBasedBaggageExtractor<>(
111+
openTelemetry.getPropagators().getTextMapPropagator(),
112+
MessagePropertyGetter.INSTANCE));
104113
return builder.buildInstrumenter(SpanKindExtractor.alwaysConsumer());
105114
} else {
106115
return builder.buildConsumerInstrumenter(MessagePropertyGetter.INSTANCE);

0 commit comments

Comments
 (0)