Skip to content

Commit 8d49759

Browse files
committed
adding check for repeated baggage
1 parent 94cd99a commit 8d49759

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
kotlin version: 2.0.21
2+
error message: The daemon has terminated unexpectedly on startup attempt #1 with error code: 0. The daemon process output:
3+
1. Kotlin compile daemon is ready
4+

dd-java-agent/instrumentation/armeria/armeria-grpc-0.84/src/main/java/datadog/trace/instrumentation/armeria/grpc/client/GrpcInjectAdapter.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ public final class GrpcInjectAdapter implements CarrierSetter<Metadata> {
1111

1212
@Override
1313
public void set(final Metadata carrier, final String key, final String value) {
14-
carrier.put(Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER), value);
14+
Metadata.Key<String> metadataKey = Metadata.Key.of(key, Metadata.ASCII_STRING_MARSHALLER);
15+
if(!key.startsWith("ot-baggage-*") || !carrier.containsKey(metadataKey)){
16+
carrier.put(metadataKey, value);
17+
}
1518
}
1619
}

dd-trace-core/src/test/groovy/datadog/trace/core/propagation/HttpInjectorTest.groovy

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,35 @@ class HttpInjectorTest extends DDCoreSpecification {
218218
style << [DATADOG, TRACECONTEXT, HAYSTACK]
219219
}
220220

221+
def "inject ot-baggage-* in http headers only once"() {
222+
setup:
223+
Config config = Mock(Config)
224+
def baggage = [
225+
'k1': 'v1',
226+
'k2': 'v2',
227+
]
228+
def mapping = baggage.keySet().collectEntries { [(it):it]} as Map<String, String>
229+
def injector = HttpCodec.createInjector(config, [DATADOG, TRACECONTEXT].toSet(), mapping)
230+
def traceId = DDTraceId.ONE
231+
def spanId = 2
232+
def writer = new ListWriter()
233+
def tracer = tracerBuilder().writer(writer).build()
234+
final DDSpanContext mockedContext = mockedContext(tracer, traceId, spanId, UNSET, null, baggage)
235+
final Map<String, String> carrier = Mock()
236+
mockedContext.beginEndToEnd()
237+
238+
when:
239+
injector.inject(mockedContext, carrier, MapSetter.INSTANCE)
240+
241+
then:
242+
1 * carrier.put('k1', 'v1')
243+
1 * carrier.put('k2', 'v2')
244+
1 * carrier.put('ot-baggage-t0', "${(long) (mockedContext.endToEndStartTime / 1000000L)}")
245+
246+
cleanup:
247+
tracer.close()
248+
}
249+
221250
static DDSpanContext mockedContext(CoreTracer tracer, DDTraceId traceId, long spanId, int samplingPriority, String origin, Map<String, String> baggage) {
222251
return new DDSpanContext(
223252
traceId,

0 commit comments

Comments
 (0)