Skip to content
This repository was archived by the owner on Jul 11, 2022. It is now read-only.

Commit 143e77a

Browse files
Fix B3Codec's trace_id zero-padding for 32bit IDs (#322)
* fix B3Codec inject bug for traceid Signed-off-by: mizhexiaoxiao <[email protected]> * add unit test Signed-off-by: mizhexiaoxiao <[email protected]> * format Signed-off-by: mizhexiaoxiao <[email protected]> * make lint Signed-off-by: mizhexiaoxiao <[email protected]>
1 parent 9ccc29c commit 143e77a

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

jaeger_client/codecs.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,10 +334,16 @@ class B3Codec(Codec):
334334
flags_header = 'X-B3-Flags'
335335
_flags_header_lc = flags_header.lower()
336336

337+
def __init__(self, generate_128bit_trace_id=False):
338+
self.generate_128bit_trace_id = generate_128bit_trace_id
339+
337340
def inject(self, span_context, carrier):
338341
if not isinstance(carrier, dict):
339342
raise InvalidCarrierException('carrier not a dictionary')
340-
carrier[self.trace_header] = format(span_context.trace_id, 'x').zfill(16)
343+
if self.generate_128bit_trace_id:
344+
carrier[self.trace_header] = format(span_context.trace_id, 'x').zfill(32)
345+
else:
346+
carrier[self.trace_header] = format(span_context.trace_id, 'x').zfill(16)
341347
carrier[self.span_header] = format(span_context.span_id, 'x').zfill(16)
342348
if span_context.parent_id is not None:
343349
carrier[self.parent_span_header] = format(span_context.parent_id, 'x').zfill(16)

jaeger_client/config.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,9 @@ def propagation(self):
314314
propagation = self.config.get('propagation')
315315
if propagation == 'b3':
316316
# replace the codec with a B3 enabled instance
317-
return {Format.HTTP_HEADERS: B3Codec()}
317+
return {Format.HTTP_HEADERS: B3Codec(
318+
generate_128bit_trace_id=self.generate_128bit_trace_id
319+
)}
318320
return {}
319321

320322
def throttler_group(self):

tests/test_codecs.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,17 @@ def test_zipkin_b3_codec_extract_injected(self):
376376
assert extracted.parent_id == ctx.parent_id
377377
assert extracted.flags == ctx.flags
378378

379+
def test_128bit_trace_id_with_zero_padding(self):
380+
codec = B3Codec(generate_128bit_trace_id=True)
381+
382+
carrier_1 = {'X-B3-SpanId': '39fe73de0012a0e5', 'X-B3-ParentSpanId': '3dbf8a511e159b05',
383+
'X-B3-TraceId': '023f352eaefd8b887a06732f5312e2de', 'X-B3-Flags': '0'}
384+
span_context = codec.extract(carrier_1)
385+
386+
carrier_2 = {}
387+
codec.inject(span_context=span_context, carrier=carrier_2)
388+
assert carrier_1['X-B3-TraceId'] == carrier_2['X-B3-TraceId']
389+
379390
def test_binary_codec(self):
380391
codec = BinaryCodec()
381392
with self.assertRaises(InvalidCarrierException):

0 commit comments

Comments
 (0)