From 2e0b5bd60155833fcee000281772c3815acc1bda Mon Sep 17 00:00:00 2001 From: Gabriel Gravel Date: Thu, 31 May 2018 00:09:09 -0400 Subject: [PATCH] Fix handling of missing ParentSpanId for B3 codec (#182) Signed-off-by: Gabriel Gravel --- jaeger_client/codecs.py | 5 ++++- tests/test_codecs.py | 5 +++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/jaeger_client/codecs.py b/jaeger_client/codecs.py index 12f39ecf..e8da6e5d 100644 --- a/jaeger_client/codecs.py +++ b/jaeger_client/codecs.py @@ -254,6 +254,7 @@ def header_to_hex(header): class B3Codec(Codec): """ Support B3 header properties + https://github.com/openzipkin/b3-propagation """ def __init__(self): @@ -277,7 +278,9 @@ def extract(self, carrier): raise InvalidCarrierException('carrier not a dictionary') trace_id = header_to_hex(carrier.get(self.trace_header.lower())) span_id = header_to_hex(carrier.get(self.span_header.lower())) - parent_id = header_to_hex(carrier.get(self.parent_span_header.lower())) + parent_id = carrier.get(self.parent_span_header.lower(), None) + if parent_id: + parent_id = header_to_hex(parent_id) flags = 0x00 sampled = carrier.get(self.sampled_header.lower()) if sampled == '1': diff --git a/tests/test_codecs.py b/tests/test_codecs.py index 52a23bf8..0b92fea3 100644 --- a/tests/test_codecs.py +++ b/tests/test_codecs.py @@ -337,6 +337,11 @@ def test_b3_extract(self): assert span_context.parent_id == int('0020000000000001', 16) assert span_context.flags == 0x02 + # validate that missing parentspanid does not cause an error + carrier.pop('x-b3-parentspanid') + span_context = codec.extract(carrier) + assert span_context.parent_id is None + carrier.update({'x-b3-sampled': '1'}) span_context = codec.extract(carrier)