This repository was archived by the owner on Jul 11, 2022. It is now read-only.
File tree Expand file tree Collapse file tree 3 files changed +21
-2
lines changed
Expand file tree Collapse file tree 3 files changed +21
-2
lines changed Original file line number Diff line number Diff 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 )
Original file line number Diff line number Diff 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 ):
Original file line number Diff line number Diff 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 ):
You can’t perform that action at this time.
0 commit comments