Skip to content
Snippets Groups Projects
Unverified Commit ff0e8946 authored by reivilibre's avatar reivilibre Committed by GitHub
Browse files

Drop federation transmission queues during a significant remote outage. (#7864)


* Empty federation transmission queues when we are backing off.

Fixes #7828.

Signed-off-by: default avatarOlivier Wilkinson (reivilibre) <olivier@librepush.net>

* Address feedback

Signed-off-by: default avatarOlivier Wilkinson (reivilibre) <olivier@librepush.net>

* Reword newsfile
parent dd8f28bd
No related branches found
No related tags found
No related merge requests found
Fix a memory leak by limiting the length of time that messages will be queued for a remote server that has been unreachable.
......@@ -337,6 +337,28 @@ class PerDestinationQueue(object):
(e.retry_last_ts + e.retry_interval) / 1000.0
),
)
if e.retry_interval > 60 * 60 * 1000:
# we won't retry for another hour!
# (this suggests a significant outage)
# We drop pending PDUs and EDUs because otherwise they will
# rack up indefinitely.
# Note that:
# - the EDUs that are being dropped here are those that we can
# afford to drop (specifically, only typing notifications,
# read receipts and presence updates are being dropped here)
# - Other EDUs such as to_device messages are queued with a
# different mechanism
# - this is all volatile state that would be lost if the
# federation sender restarted anyway
# dropping read receipts is a bit sad but should be solved
# through another mechanism, because this is all volatile!
self._pending_pdus = []
self._pending_edus = []
self._pending_edus_keyed = {}
self._pending_presence = {}
self._pending_rrs = {}
except FederationDeniedError as e:
logger.info(e)
except HttpResponseException as e:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment