a2aproject / a2aproject/a2a-python

[Bug]: get_info_for_dispatch default resolves to empty owner in multi-owner deployments

Open
#1,231 0 comments 0 reactions 0 assignees View on GitHub
component: server maintainers-only
Dominant language
Python
Stars
2.1k
Forks
496
Avg merge
4d 17h
Merged PRs (30d)
12

Description

### What happened?

PushNotificationConfigStore.get_info_for_dispatch(task_id) is the cross-owner read used by the dispatch loop it must return every config for a task regardless of which owner registered it. But the shipped (non-abstract) default falls back to an owner-scoped get_info with an empty context:

```
# push_notification_config_store.py (v1.1.3) — default fallback
async def get_info_for_dispatch(self, task_id):
logger.warning('%s does not override get_info_for_dispatch ...', type(self).__name__)
return await self.get_info(task_id, ServerCallContext()) # empty context
```
get_info resolves the owner partition from that context:
```
# inmemory_push_notification_config_store.py — get_info
owner = self.owner_resolver(context) # empty ctx -> empty-string owner
owner_infos = self._get_owner_push_notification_infos(owner)
return list(owner_infos.get(task_id, [])) # that partition is empty -> []
```
So ServerCallContext() -> empty-string owner -> returns [] -> every push notification is silently dropped in any multi-owner deployment. The only signal is a per-call logger.warning.

__Proposed fix:__ #1180 fixes this by __marking the method as abstractmethod__. However, the method shipped as non-abstract (latest released versions at this time - v1.1.4), so this is a breaking change to a public ABC (existing subclasses fail to instantiate on upgrade) and should be a part of a major release.

### Relevant log output

```shell

```

### Code of Conduct

- [x] I agree to follow this project's Code of Conduct

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.