-
-
Notifications
You must be signed in to change notification settings - Fork 128
Postgres backend: handle connection loss #66
base: master
Are you sure you want to change the base?
Conversation
|
Hi @asafc - this was a good start. |
|
Hi @dariosky, I don't believe automatically reconnecting is a good idea: when connection is loss messages could be missed, On our use case - disconnecting (marked by ending the iterator) is more than enough (then the caller can reconnect). WDYT? |
|
Having an on_reconnect parameter is a good idea - so the caller can handle the eventual gap-filling... |
|
Not sure I understand - have you pushed that fix? (or plan on pushing it?) |
|
I didn't (I asked above if it can be useful) - let me add it here :) |
|
See here: permitio#4 |
| await queue.put(event) | ||
|
|
||
| # Ubsubscribe all | ||
| for queue in sum([list(qs) for qs in self._subscribers.values()], []): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# Unsubscribe all
for queue_set in self._subscribers.values():
for queue in queue_set:
await queue.put(None)Seems like a lot less wasteful / clear what's going on.
As far as I know, you can loop over sets directly in python, no need
to convert to a list.
|
This requires extra testing. Will not include in 0.3 |
This bugfix handle a situation where broadcaster does not detect the Postgres backend terminating the connection.
A user of Broadcaster will not be able to handle disconnects in their code.
i.e: the next loop will not exit:
when either:
idle_session_timeoutoridle_in_transaction_session_timeout(see here)