From 6ba029c976808c854b234933de7f6142e73f469f Mon Sep 17 00:00:00 2001 From: Naveen Kumar Baskaran Date: Sat, 2 May 2026 22:24:40 +0530 Subject: [PATCH] fix: add exclude_list to @trace_class on high-frequency event classes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addresses #1034 — the @trace_class decorator on EventQueue and related classes generates 1500+ spans per LLM streaming session from high-frequency internal methods (enqueue_event, dequeue_event, task_done, etc.). Added exclude_list to @trace_class on: - EventQueueLegacy: excludes enqueue_event, dequeue_event, task_done, is_closed - EventQueueSource: excludes enqueue_event, dequeue_event, task_done, is_closed - EventConsumer: excludes consume_all - InMemoryQueueManager: excludes add, get, create_or_tap This reduces tracing spans from 1500+ to ~53 per session (97% reduction) while preserving useful RequestHandler-level traces. The existing exclude_list mechanism in trace_class is used — no new API surface or breaking changes. --- src/a2a/server/events/event_consumer.py | 5 ++++- src/a2a/server/events/event_queue.py | 5 ++++- src/a2a/server/events/event_queue_v2.py | 5 ++++- src/a2a/server/events/in_memory_queue_manager.py | 5 ++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/a2a/server/events/event_consumer.py b/src/a2a/server/events/event_consumer.py index 8414e2d17..c220e96c8 100644 --- a/src/a2a/server/events/event_consumer.py +++ b/src/a2a/server/events/event_consumer.py @@ -18,7 +18,10 @@ logger = logging.getLogger(__name__) -@trace_class(kind=SpanKind.SERVER) +@trace_class( + kind=SpanKind.SERVER, + exclude_list=['consume_all'], +) class EventConsumer: """Consumer to read events from the agent event queue.""" diff --git a/src/a2a/server/events/event_queue.py b/src/a2a/server/events/event_queue.py index bb4d7b9b4..9e1ebd84f 100644 --- a/src/a2a/server/events/event_queue.py +++ b/src/a2a/server/events/event_queue.py @@ -93,7 +93,10 @@ async def enqueue_event(self, event: Event) -> None: """ -@trace_class(kind=SpanKind.SERVER) +@trace_class( + kind=SpanKind.SERVER, + exclude_list=['enqueue_event', 'dequeue_event', 'task_done', 'is_closed'], +) class EventQueueLegacy(EventQueue): """Event queue for A2A responses from agent. diff --git a/src/a2a/server/events/event_queue_v2.py b/src/a2a/server/events/event_queue_v2.py index 224cb8e56..9c29cb063 100644 --- a/src/a2a/server/events/event_queue_v2.py +++ b/src/a2a/server/events/event_queue_v2.py @@ -20,7 +20,10 @@ logger = logging.getLogger(__name__) -@trace_class(kind=SpanKind.SERVER) +@trace_class( + kind=SpanKind.SERVER, + exclude_list=['enqueue_event', 'dequeue_event', 'task_done', 'is_closed'], +) class EventQueueSource(EventQueue): """The Parent EventQueue. diff --git a/src/a2a/server/events/in_memory_queue_manager.py b/src/a2a/server/events/in_memory_queue_manager.py index 0beb354f9..365ed525a 100644 --- a/src/a2a/server/events/in_memory_queue_manager.py +++ b/src/a2a/server/events/in_memory_queue_manager.py @@ -9,7 +9,10 @@ from a2a.utils.telemetry import SpanKind, trace_class -@trace_class(kind=SpanKind.SERVER) +@trace_class( + kind=SpanKind.SERVER, + exclude_list=['add', 'get', 'create_or_tap'], +) class InMemoryQueueManager(QueueManager): """InMemoryQueueManager is used for a single binary management.