You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@skywalking.apache.org by wu...@apache.org on 2020/07/01 23:38:36 UTC
[skywalking-python] branch master updated: [Core][Defect] Validate
carrier before using it (#29)
This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking-python.git
The following commit(s) were added to refs/heads/master by this push:
new 9a419fd [Core][Defect] Validate carrier before using it (#29)
9a419fd is described below
commit 9a419fd88393a65118b493c3c175795f265bcf61
Author: kezhenxu94 <ke...@apache.org>
AuthorDate: Thu Jul 2 07:38:27 2020 +0800
[Core][Defect] Validate carrier before using it (#29)
---
skywalking/trace/carrier/__init__.py | 19 ++++++++++++++++---
skywalking/trace/context/__init__.py | 2 +-
skywalking/trace/segment/__init__.py | 2 +-
skywalking/trace/span/__init__.py | 4 ++--
4 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/skywalking/trace/carrier/__init__.py b/skywalking/trace/carrier/__init__.py
index 0b95861..468997b 100644
--- a/skywalking/trace/carrier/__init__.py
+++ b/skywalking/trace/carrier/__init__.py
@@ -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
diff --git a/skywalking/trace/context/__init__.py b/skywalking/trace/context/__init__.py
index dce8d68..190121f 100644
--- a/skywalking/trace/context/__init__.py
+++ b/skywalking/trace/context/__init__.py
@@ -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
diff --git a/skywalking/trace/segment/__init__.py b/skywalking/trace/segment/__init__.py
index 44f5b87..bf1a71e 100644
--- a/skywalking/trace/segment/__init__.py
+++ b/skywalking/trace/segment/__init__.py
@@ -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
diff --git a/skywalking/trace/span/__init__.py b/skywalking/trace/span/__init__.py
index e448424..ec77a9b 100644
--- a/skywalking/trace/span/__init__.py
+++ b/skywalking/trace/span/__init__.py
@@ -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