Skip to content

[Bug]: queue_manager passed to DefaultRequestHandler is silently ignored since v2 #1135

Description

@mredvard

What happened?

We run an A2A server on multiple replicas behind a load balancer. To make streaming work across replicas, we pass a custom QueueManager (Redis-backed) to DefaultRequestHandler that way a client can reconnect to a task's stream even if it lands on a different replica.

After upgrading the SDK, streaming across replicas stopped working, with no error or warning. The cause: since #933, DefaultRequestHandler points to DefaultRequestHandlerV2, which still accepts queue_manager in its constructor but never uses it:

queue_manager: Any | None = None,  # Kept for backward compat in signature

Our queue manager's methods are simply never called anymore. Everything compiles and runs, and single-replica setups look fine, so this is very easy to miss.

What I expected

Either the parameter keeps working, or passing one raises / warns that it's no longer supported. Accepting it and dropping it silently is the worst case the code says the old wiring works when it doesn't.

How to reproduce

Pass any QueueManager subclass that records calls to DefaultRequestHandler, run a message/stream request, and check the recorder:

class SpyQueueManager(InMemoryQueueManager):
    async def create_or_tap(self, task_id):
        print("called!")  # never prints on 1.0.x / 1.1.0
        return await super().create_or_tap(task_id)

On LegacyRequestHandler the same spy is called as before. That's our current workaround: use LegacyRequestHandler and pin the SDK version.

Is there an intended replacement for this use case (sharing event queues across replicas) in the v2 design? Happy to provide more detail.

Code of Conduct

  • I agree to follow this project's Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions