a2aproject / a2aproject/a2a-python

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

Abierto
#1,231 0 comentarios 0 reacciones 0 asignados Ver en GitHub
component: server maintainers-only
Lenguaje dominante
Python
Estrellas
2.1k
Forks
496
Merge medio
4 d 17 h
PR fusionados (30 d)
12

Descripción

### 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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.