未验证 提交 9a419fd8 编写于 作者: K kezhenxu94 提交者: GitHub

[Core][Defect] Validate carrier before using it (#29)

上级 26879f83
......@@ -47,7 +47,7 @@ class Carrier(CarrierItem):
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 @@ class Carrier(CarrierItem):
'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 @@ class Carrier(CarrierItem):
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
......
......@@ -55,7 +55,7 @@ class SpanContext(object):
)
span.op = op
if carrier is not None:
if carrier is not None and carrier.is_valid:
span.extract(carrier=carrier)
return span
......
......@@ -31,7 +31,7 @@ class SegmentRef(object):
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
......
......@@ -165,7 +165,7 @@ class EntrySpan(StackedSpan):
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 @@ class ExitSpan(StackedSpan):
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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册