broadcaster
broadcaster copied to clipboard
`KeyError` triggered by `ConnectionError: Connection closed by server`.
Hi maintainers, thank you for the package !
This line can fail with a ConnectionError, at least when using the Redis backend, possibly others too:
https://github.com/encode/broadcaster/blob/69cf29a41066f53a45498f0dfa36288befd73dd7/broadcaster/_base.py#L95
When that happens, queue is never added to self._subscribers[channel].
But the finally block will try to remove it nonetheless, causing a KeyError and hiding the original issue:
https://github.com/encode/broadcaster/blob/69cf29a41066f53a45498f0dfa36288befd73dd7/broadcaster/_base.py#L102
Possible solutions:
- Using
discardinstead ofremove - maybe moving the
_backend.subscribecall outside thetryblock: when that call fails you can probably skipself._backend.unsubscribe. You'd still need to put aNonein the queue though.
I could prepare a PR with any of those if they make sense.
Could you please provide a minimal reproducible example?