broadcaster icon indicating copy to clipboard operation
broadcaster copied to clipboard

`KeyError` triggered by `ConnectionError: Connection closed by server`.

Open JoseKilo opened this issue 1 year ago • 1 comments

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 discard instead of remove
  • maybe moving the _backend.subscribe call outside the try block: when that call fails you can probably skip self._backend.unsubscribe. You'd still need to put a None in the queue though.

I could prepare a PR with any of those if they make sense.

JoseKilo avatar Sep 23 '24 12:09 JoseKilo

Could you please provide a minimal reproducible example?

alex-oleshkevich avatar Mar 16 '25 13:03 alex-oleshkevich