Skip to content

Commit 9014077

Browse files
Fix hexadecimal flag parsing in Jaeger propagator (#8975)
Co-authored-by: Jack Berg <34418638+jack-berg@users.noreply.github.com>
1 parent 73de125 commit 9014077

2 files changed

Lines changed: 24 additions & 1 deletion

File tree

‎extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/JaegerPropagator.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,7 +402,7 @@ private static SpanContext buildSpanContext(String traceId, String spanId, Strin
402402
try {
403403
String otelTraceId = StringUtils.padLeft(traceId, MAX_TRACE_ID_LENGTH);
404404
String otelSpanId = StringUtils.padLeft(spanId, MAX_SPAN_ID_LENGTH);
405-
int flagsInt = Integer.parseInt(flags);
405+
int flagsInt = Integer.parseInt(flags, 16);
406406
return SpanContext.createFromRemoteParent(
407407
otelTraceId,
408408
otelSpanId,

‎extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/JaegerPropagatorTest.java‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,6 +366,29 @@ void extract_SampledContext() {
366366
TRACE_ID, SPAN_ID, TraceFlags.getSampled(), TraceState.getDefault()));
367367
}
368368

369+
@ParameterizedTest
370+
@MethodSource
371+
void extract_HexadecimalFlags(byte flags, String encodedFlags, TraceFlags expectedTraceFlags) {
372+
Map<String, String> carrier = new LinkedHashMap<>();
373+
JaegerSpanContext context =
374+
new JaegerSpanContext(
375+
TRACE_ID_HI, TRACE_ID_LOW, SPAN_ID_LONG, DEPRECATED_PARENT_SPAN_LONG, flags);
376+
carrier.put(PROPAGATION_HEADER, TextMapCodec.contextAsString(context));
377+
378+
assertThat(carrier.get(PROPAGATION_HEADER)).endsWith(":" + encodedFlags);
379+
assertThat(getSpanContext(jaegerPropagator.extract(Context.root(), carrier, getter)))
380+
.isEqualTo(
381+
SpanContext.createFromRemoteParent(
382+
TRACE_ID, SPAN_ID, expectedTraceFlags, TraceState.getDefault()));
383+
}
384+
385+
static Stream<Arguments> extract_HexadecimalFlags() {
386+
return Stream.of(
387+
Arguments.argumentSet("sampled debug firehose", (byte) 0x0b, "b", TraceFlags.getSampled()),
388+
Arguments.argumentSet("unsampled hex", (byte) 0x0a, "a", TraceFlags.getDefault()),
389+
Arguments.argumentSet("two-digit hex", (byte) 0xff, "ff", TraceFlags.getSampled()));
390+
}
391+
369392
@Test
370393
void extract_NotSampledContext() {
371394
Map<String, String> carrier = new LinkedHashMap<>();

0 commit comments

Comments
 (0)