diff --git a/skywalking/trace/carrier/__init__.py b/skywalking/trace/carrier/__init__.py index 0b958612..468997bc 100644 --- a/skywalking/trace/carrier/__init__.py +++ b/skywalking/trace/carrier/__init__.py @@ -47,7 +47,7 @@ def __init__(self): super(Carrier, self).__init__(key='sw8') self.trace_id = '' # type: str self.segment_id = '' # type: str - self.span_id = -1 # type: int + self.span_id = '' # type: str self.service = '' # type: str self.service_instance = '' # type: str self.endpoint = '' # type: str @@ -61,7 +61,7 @@ def val(self) -> str: '1', b64encode(self.trace_id), b64encode(self.segment_id), - str(self.span_id), + self.span_id, b64encode(self.service), b64encode(self.service_instance), b64encode(self.endpoint), @@ -74,14 +74,27 @@ def val(self, val: str): if not val: return parts = val.split('-') + if len(parts) != 8: + return self.trace_id = b64decode(parts[1]) self.segment_id = b64decode(parts[2]) - self.span_id = int(parts[3]) + self.span_id = parts[3] self.service = b64decode(parts[4]) self.service_instance = b64decode(parts[5]) self.endpoint = b64decode(parts[6]) self.client_address = b64decode(parts[7]) + @property + def is_valid(self): + # type: () -> bool + return len(self.trace_id) > 0 and \ + len(self.segment_id) > 0 and \ + len(self.service) > 0 and \ + len(self.service_instance) > 0 and \ + len(self.endpoint) > 0 and \ + len(self.client_address) > 0 and \ + self.span_id.isnumeric() + def __iter__(self): self.__iter_index = 0 return self diff --git a/skywalking/trace/context/__init__.py b/skywalking/trace/context/__init__.py index dce8d68b..190121f1 100644 --- a/skywalking/trace/context/__init__.py +++ b/skywalking/trace/context/__init__.py @@ -55,7 +55,7 @@ def new_entry_span(self, op: str, carrier: 'Carrier' = None) -> Span: ) span.op = op - if carrier is not None: + if carrier is not None and carrier.is_valid: span.extract(carrier=carrier) return span diff --git a/skywalking/trace/segment/__init__.py b/skywalking/trace/segment/__init__.py index 44f5b874..bf1a71ee 100644 --- a/skywalking/trace/segment/__init__.py +++ b/skywalking/trace/segment/__init__.py @@ -31,7 +31,7 @@ def __init__(self, carrier: 'Carrier'): self.ref_type = 'CrossProcess' # type: str self.trace_id = carrier.trace_id # type: str self.segment_id = carrier.segment_id # type: str - self.span_id = carrier.span_id # type: int + self.span_id = int(carrier.span_id) # type: int self.service = carrier.service # type: str self.service_instance = carrier.service_instance # type: str self.endpoint = carrier.endpoint # type: str diff --git a/skywalking/trace/span/__init__.py b/skywalking/trace/span/__init__.py index e448424b..ec77a9b7 100644 --- a/skywalking/trace/span/__init__.py +++ b/skywalking/trace/span/__init__.py @@ -165,7 +165,7 @@ def start(self): def extract(self, carrier: 'Carrier') -> 'Span': Span.extract(self, carrier) - if carrier is None: + if carrier is None or not carrier.is_valid: return self ref = SegmentRef(carrier=carrier) @@ -203,7 +203,7 @@ def __init__( def inject(self, carrier: 'Carrier') -> 'Span': carrier.trace_id = str(self.context.segment.related_traces[0]) carrier.segment_id = str(self.context.segment.segment_id) - carrier.span_id = self.sid + carrier.span_id = str(self.sid) carrier.service = config.service_name carrier.service_instance = config.service_instance carrier.endpoint = self.op