@@ -68,14 +68,19 @@ class SpanProcessor:
68
68
in the same order as they were registered.
69
69
"""
70
70
71
- def on_start (self , span : "Span" ) -> None :
71
+ def on_start (
72
+ self ,
73
+ span : "Span" ,
74
+ parent_context : Optional [context_api .Context ] = None ,
75
+ ) -> None :
72
76
"""Called when a :class:`opentelemetry.trace.Span` is started.
73
77
74
78
This method is called synchronously on the thread that starts the
75
79
span, therefore it should not block or throw an exception.
76
80
77
81
Args:
78
82
span: The :class:`opentelemetry.trace.Span` that just started.
83
+ parent_context: The parent context of the span that just started.
79
84
"""
80
85
81
86
def on_end (self , span : "Span" ) -> None :
@@ -124,9 +129,13 @@ def add_span_processor(self, span_processor: SpanProcessor) -> None:
124
129
with self ._lock :
125
130
self ._span_processors = self ._span_processors + (span_processor ,)
126
131
127
- def on_start (self , span : "Span" ) -> None :
132
+ def on_start (
133
+ self ,
134
+ span : "Span" ,
135
+ parent_context : Optional [context_api .Context ] = None ,
136
+ ) -> None :
128
137
for sp in self ._span_processors :
129
- sp .on_start (span )
138
+ sp .on_start (span , parent_context = parent_context )
130
139
131
140
def on_end (self , span : "Span" ) -> None :
132
141
for sp in self ._span_processors :
@@ -192,17 +201,26 @@ def add_span_processor(self, span_processor: SpanProcessor) -> None:
192
201
self ._span_processors = self ._span_processors + (span_processor ,)
193
202
194
203
def _submit_and_await (
195
- self , func : Callable [[SpanProcessor ], Callable [..., None ]], * args : Any
204
+ self ,
205
+ func : Callable [[SpanProcessor ], Callable [..., None ]],
206
+ * args : Any ,
207
+ ** kwargs : Any
196
208
):
197
209
futures = []
198
210
for sp in self ._span_processors :
199
- future = self ._executor .submit (func (sp ), * args )
211
+ future = self ._executor .submit (func (sp ), * args , ** kwargs )
200
212
futures .append (future )
201
213
for future in futures :
202
214
future .result ()
203
215
204
- def on_start (self , span : "Span" ) -> None :
205
- self ._submit_and_await (lambda sp : sp .on_start , span )
216
+ def on_start (
217
+ self ,
218
+ span : "Span" ,
219
+ parent_context : Optional [context_api .Context ] = None ,
220
+ ) -> None :
221
+ self ._submit_and_await (
222
+ lambda sp : sp .on_start , span , parent_context = parent_context
223
+ )
206
224
207
225
def on_end (self , span : "Span" ) -> None :
208
226
self ._submit_and_await (lambda sp : sp .on_end , span )
@@ -584,7 +602,11 @@ def add_event(
584
602
)
585
603
)
586
604
587
- def start (self , start_time : Optional [int ] = None ) -> None :
605
+ def start (
606
+ self ,
607
+ start_time : Optional [int ] = None ,
608
+ parent_context : Optional [context_api .Context ] = None ,
609
+ ) -> None :
588
610
with self ._lock :
589
611
if not self .is_recording ():
590
612
return
@@ -596,7 +618,7 @@ def start(self, start_time: Optional[int] = None) -> None:
596
618
if has_started :
597
619
logger .warning ("Calling start() on a started span." )
598
620
return
599
- self .span_processor .on_start (self )
621
+ self .span_processor .on_start (self , parent_context = parent_context )
600
622
601
623
def end (self , end_time : Optional [int ] = None ) -> None :
602
624
with self ._lock :
@@ -764,7 +786,7 @@ def start_span( # pylint: disable=too-many-locals
764
786
if sampling_result .decision .is_sampled ()
765
787
else trace_api .TraceFlags (trace_api .TraceFlags .DEFAULT )
766
788
)
767
- context = trace_api .SpanContext (
789
+ span_context = trace_api .SpanContext (
768
790
trace_id ,
769
791
self .source .ids_generator .generate_span_id (),
770
792
is_remote = False ,
@@ -777,7 +799,7 @@ def start_span( # pylint: disable=too-many-locals
777
799
# pylint:disable=protected-access
778
800
span = _Span (
779
801
name = name ,
780
- context = context ,
802
+ context = span_context ,
781
803
parent = parent_span_context ,
782
804
sampler = self .source .sampler ,
783
805
resource = self .source .resource ,
@@ -788,9 +810,9 @@ def start_span( # pylint: disable=too-many-locals
788
810
instrumentation_info = self .instrumentation_info ,
789
811
set_status_on_exception = set_status_on_exception ,
790
812
)
791
- span .start (start_time = start_time )
813
+ span .start (start_time = start_time , parent_context = context )
792
814
else :
793
- span = trace_api .DefaultSpan (context = context )
815
+ span = trace_api .DefaultSpan (context = span_context )
794
816
return span
795
817
796
818
@contextmanager
0 commit comments