From c550f480806f1ea38842d44bdca4dfd6f974cf1a Mon Sep 17 00:00:00 2001 From: rajeshvelicheti Date: Thu, 10 Jul 2025 08:09:09 +0100 Subject: [PATCH 1/5] Handle asyncio.cancellederror and raise it so it propagates back --- src/a2a/utils/telemetry.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/a2a/utils/telemetry.py b/src/a2a/utils/telemetry.py index 655127cc2..73234f2d0 100644 --- a/src/a2a/utils/telemetry.py +++ b/src/a2a/utils/telemetry.py @@ -53,6 +53,7 @@ def internal_method(self): ``` """ +import asyncio import functools import inspect import logging @@ -167,6 +168,12 @@ async def async_wrapper(*args, **kwargs) -> Any: span.record_exception(e) span.set_status(StatusCode.ERROR, description=str(e)) raise + # asyncio.CancelledError extends from BaseException + except asyncio.CancelledError as ce: + logger.debug(f'CancelledError in span {actual_span_name}') + span.record_exception(ce) + span.set_status(StatusCode.ERROR, description=str(ce)) + raise finally: if attribute_extractor: try: From 390be5f01bf82d6e3009b35d1ec59a5f15a2e957 Mon Sep 17 00:00:00 2001 From: rajeshvelicheti Date: Thu, 10 Jul 2025 08:31:08 +0100 Subject: [PATCH 2/5] Do not treat cancellation as span error --- src/a2a/utils/telemetry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/a2a/utils/telemetry.py b/src/a2a/utils/telemetry.py index 73234f2d0..a615b3d10 100644 --- a/src/a2a/utils/telemetry.py +++ b/src/a2a/utils/telemetry.py @@ -170,9 +170,9 @@ async def async_wrapper(*args, **kwargs) -> Any: raise # asyncio.CancelledError extends from BaseException except asyncio.CancelledError as ce: + exception = ce logger.debug(f'CancelledError in span {actual_span_name}') span.record_exception(ce) - span.set_status(StatusCode.ERROR, description=str(ce)) raise finally: if attribute_extractor: From db60f816183993a4d393d85ebf1170abbc015c77 Mon Sep 17 00:00:00 2001 From: rajeshvelicheti Date: Thu, 10 Jul 2025 08:37:58 +0100 Subject: [PATCH 3/5] Fix: exception order --- src/a2a/utils/telemetry.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/a2a/utils/telemetry.py b/src/a2a/utils/telemetry.py index a615b3d10..0715dd15f 100644 --- a/src/a2a/utils/telemetry.py +++ b/src/a2a/utils/telemetry.py @@ -163,17 +163,17 @@ async def async_wrapper(*args, **kwargs) -> Any: span.set_status(StatusCode.OK) return result - except Exception as e: - exception = e - span.record_exception(e) - span.set_status(StatusCode.ERROR, description=str(e)) - raise # asyncio.CancelledError extends from BaseException except asyncio.CancelledError as ce: - exception = ce + exception = None logger.debug(f'CancelledError in span {actual_span_name}') span.record_exception(ce) raise + except Exception as e: + exception = e + span.record_exception(e) + span.set_status(StatusCode.ERROR, description=str(e)) + raise finally: if attribute_extractor: try: From fcd7297cd36157470a7e45cc933bd32a6d9ed4e8 Mon Sep 17 00:00:00 2001 From: rajeshvelicheti Date: Thu, 10 Jul 2025 18:37:35 +0100 Subject: [PATCH 4/5] Fix: exception order --- src/a2a/utils/telemetry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/a2a/utils/telemetry.py b/src/a2a/utils/telemetry.py index 0715dd15f..5617f7cbf 100644 --- a/src/a2a/utils/telemetry.py +++ b/src/a2a/utils/telemetry.py @@ -165,7 +165,7 @@ async def async_wrapper(*args, **kwargs) -> Any: # asyncio.CancelledError extends from BaseException except asyncio.CancelledError as ce: - exception = None + exception = ce logger.debug(f'CancelledError in span {actual_span_name}') span.record_exception(ce) raise From 3f22768af4937042edb4bdf24a63c6e3e9c6fef9 Mon Sep 17 00:00:00 2001 From: rajeshvelicheti Date: Thu, 10 Jul 2025 18:40:17 +0100 Subject: [PATCH 5/5] Fix: exception order --- src/a2a/utils/telemetry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/a2a/utils/telemetry.py b/src/a2a/utils/telemetry.py index 5617f7cbf..0715dd15f 100644 --- a/src/a2a/utils/telemetry.py +++ b/src/a2a/utils/telemetry.py @@ -165,7 +165,7 @@ async def async_wrapper(*args, **kwargs) -> Any: # asyncio.CancelledError extends from BaseException except asyncio.CancelledError as ce: - exception = ce + exception = None logger.debug(f'CancelledError in span {actual_span_name}') span.record_exception(ce) raise