Skip to content

Commit f11f03c

Browse files
andremmemdnetoxrmx
authored
Avoid calls to context.detach with None token (#3673)
* fixes #3351 * Add changelog entry about #3673 --------- Co-authored-by: Emídio Neto <[email protected]> Co-authored-by: Riccardo Magliocchetti <[email protected]>
1 parent bbcdf8b commit f11f03c

File tree

12 files changed

+30
-13
lines changed
  • instrumentation
    • opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika
    • opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client
    • opentelemetry-instrumentation-aiokafka/src/opentelemetry/instrumentation/aiokafka
    • opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda
    • opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs
    • opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka
    • opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc
    • opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka
    • opentelemetry-instrumentation-pika/src/opentelemetry/instrumentation/pika
  • opentelemetry-instrumentation/src/opentelemetry/instrumentation
  • util/opentelemetry-util-http/src/opentelemetry/util/http

12 files changed

+30
-13
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111
1212
## Unreleased
1313

14+
### Fixed
15+
16+
- `opentelemetry-instrumentation`: Avoid calls to `context.detach` with `None` token.
17+
([#3673](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3673))
18+
1419
## Version 1.36.0/0.57b0 (2025-07-29)
1520

1621
### Fixed

instrumentation/opentelemetry-instrumentation-aio-pika/src/opentelemetry/instrumentation/aio_pika/callback_decorator.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ async def decorated(message: AbstractIncomingMessage):
5353
with trace.use_span(span, end_on_exit=True):
5454
return_value = await callback(message)
5555
finally:
56-
context.detach(token)
56+
if token:
57+
context.detach(token)
5758
return return_value
5859

5960
return decorated

instrumentation/opentelemetry-instrumentation-aiohttp-client/src/opentelemetry/instrumentation/aiohttp_client/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,8 @@ def create_trace_config(
273273

274274
def _end_trace(trace_config_ctx: types.SimpleNamespace):
275275
elapsed_time = max(default_timer() - trace_config_ctx.start_time, 0)
276-
context_api.detach(trace_config_ctx.token)
276+
if trace_config_ctx.token:
277+
context_api.detach(trace_config_ctx.token)
277278
trace_config_ctx.span.end()
278279

279280
if trace_config_ctx.duration_histogram_old is not None:

instrumentation/opentelemetry-instrumentation-aiokafka/src/opentelemetry/instrumentation/aiokafka/utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,8 @@ async def _create_consumer_span(
490490
await async_consume_hook(span, record, args, kwargs)
491491
except Exception as hook_exception: # pylint: disable=W0703
492492
_LOG.exception(hook_exception)
493-
context.detach(token)
493+
if token:
494+
context.detach(token)
494495

495496
return span
496497

instrumentation/opentelemetry-instrumentation-aws-lambda/src/opentelemetry/instrumentation/aws_lambda/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -384,7 +384,8 @@ def _instrumented_lambda_handler_call( # noqa pylint: disable=too-many-branches
384384
result.get("statusCode"),
385385
)
386386
finally:
387-
context_api.detach(token)
387+
if token:
388+
context_api.detach(token)
388389

389390
now = time.time()
390391
_tracer_provider = tracer_provider or get_tracer_provider()

instrumentation/opentelemetry-instrumentation-boto3sqs/src/opentelemetry/instrumentation/boto3sqs/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,9 @@ def _safe_end_processing_span(receipt_handle: str) -> None:
180180
Boto3SQSInstrumentor.current_span_related_to_token
181181
== started_span
182182
):
183-
context.detach(Boto3SQSInstrumentor.current_context_token)
184-
Boto3SQSInstrumentor.current_context_token = None
183+
if Boto3SQSInstrumentor.current_context_token:
184+
context.detach(Boto3SQSInstrumentor.current_context_token)
185+
Boto3SQSInstrumentor.current_context_token = None
185186
started_span.end()
186187

187188
@staticmethod

instrumentation/opentelemetry-instrumentation-confluent-kafka/src/opentelemetry/instrumentation/confluent_kafka/utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ def set(self, carrier: textmap.CarrierT, key: str, value: str) -> None:
8282

8383

8484
def _end_current_consume_span(instance):
85-
context.detach(instance._current_context_token)
85+
if instance._current_context_token:
86+
context.detach(instance._current_context_token)
8687
instance._current_context_token = None
8788
instance._current_consume_span.end()
8889
instance._current_consume_span = None

instrumentation/opentelemetry-instrumentation-grpc/src/opentelemetry/instrumentation/grpc/_server.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,8 @@ def _set_remote_context(self, servicer_context):
209209
try:
210210
yield
211211
finally:
212-
detach(token)
212+
if token:
213+
detach(token)
213214
else:
214215
yield
215216

instrumentation/opentelemetry-instrumentation-kafka-python/src/opentelemetry/instrumentation/kafka/utils.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ def _create_consumer_span(
196196
consume_hook(span, record, args, kwargs)
197197
except Exception as hook_exception: # pylint: disable=W0703
198198
_LOG.exception(hook_exception)
199-
context.detach(token)
199+
if token:
200+
context.detach(token)
200201

201202

202203
def _wrap_next(

instrumentation/opentelemetry-instrumentation-pika/src/opentelemetry/instrumentation/pika/utils.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,8 @@ def decorated_callback(
8080
_LOG.exception(hook_exception)
8181
retval = callback(channel, method, properties, body)
8282
finally:
83-
context.detach(token)
83+
if token:
84+
context.detach(token)
8485
return retval
8586

8687
return decorated_callback
@@ -252,7 +253,8 @@ def popleft(self, *args, **kwargs):
252253
operation=MessagingOperationValues.RECEIVE,
253254
)
254255
try:
255-
context.detach(message_ctx_token)
256+
if message_ctx_token:
257+
context.detach(message_ctx_token)
256258
self._self_active_token = context.attach(
257259
trace.set_span_in_context(span)
258260
)

0 commit comments

Comments
 (0)