5
5
from instana .log import logger
6
6
from instana .propagators .base_propagator import BasePropagator
7
7
from instana .util .ids import define_server_timing , hex_id_limited
8
+ from instana .span_context import SpanContext
8
9
9
10
from opentelemetry .trace .span import format_span_id
10
11
@@ -27,7 +28,26 @@ def inject(self, span_context, carrier, disable_w3c_trace_context=False):
27
28
# Suppression `level` made in the child context or in the parent context
28
29
# has priority over any non-suppressed `level` setting
29
30
child_level = int (self .extract_instana_headers (dictionary_carrier )[2 ] or "1" )
30
- span_context .level = min (child_level , span_context .level )
31
+ new_level = min (child_level , span_context .level )
32
+
33
+ if new_level != span_context .level :
34
+ # Create a new span context with the updated level
35
+ span_context = SpanContext (
36
+ trace_id = span_context .trace_id ,
37
+ span_id = span_context .span_id ,
38
+ is_remote = span_context .is_remote ,
39
+ trace_flags = span_context .trace_flags ,
40
+ trace_state = span_context .trace_state ,
41
+ level = new_level ,
42
+ synthetic = span_context .synthetic ,
43
+ trace_parent = span_context .trace_parent ,
44
+ instana_ancestor = span_context .instana_ancestor ,
45
+ long_trace_id = span_context .long_trace_id ,
46
+ correlation_type = span_context .correlation_type ,
47
+ correlation_id = span_context .correlation_id ,
48
+ traceparent = span_context .traceparent ,
49
+ tracestate = span_context .tracestate
50
+ )
31
51
32
52
serializable_level = str (span_context .level )
33
53
0 commit comments