diff options
author | Mark Haines <mark.haines@matrix.org> | 2016-06-01 17:15:35 +0100 |
---|---|---|
committer | Mark Haines <mark.haines@matrix.org> | 2016-06-01 17:15:35 +0100 |
commit | 5b6373c895cd5232292a63bbb83c71f272c18650 (patch) | |
tree | 9a1f76bb2f42e7758cf1aad7572040e5ffd7a9cc | |
parent | Add infrastructure to the presence handler to track sync requests in external... (diff) | |
download | synapse-5b6373c895cd5232292a63bbb83c71f272c18650.tar.xz |
Expire stale entries for dead external processes
-rw-r--r-- | synapse/handlers/presence.py | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py index 047da7ff25..7ac31cf233 100644 --- a/synapse/handlers/presence.py +++ b/synapse/handlers/presence.py @@ -68,6 +68,10 @@ FEDERATION_TIMEOUT = 30 * 60 * 1000 # How often to resend presence to remote servers FEDERATION_PING_INTERVAL = 25 * 60 * 1000 +# How long we will wait before assuming that the syncs from an external process +# are dead. +EXTERNAL_PROCESS_EXPIRY = 5 * 60 * 1000 + assert LAST_ACTIVE_GRANULARITY < IDLE_TIMER @@ -283,13 +287,26 @@ class PresenceHandler(object): # Fetch the list of users that *may* have timed out. Things may have # changed since the timeout was set, so we won't necessarily have to # take any action. - users_to_check = self.wheel_timer.fetch(now) + users_to_check = set(self.wheel_timer.fetch(now)) + + # Check whether the lists of syncing processes from an external + # process have expired. + expired_process_ids = [ + process_id for process_id, last_update + in self.external_process_last_update.items() + if now - last_update > EXTERNAL_PROCESS_EXPIRY + ] + for process_id in expired_process_ids: + users_to_check.update( + self.external_process_to_current_syncs.pop(process_id, ()) + ) + self.external_process_last_update.pop(process_id) states = [ self.user_to_current_state.get( user_id, UserPresenceState.default(user_id) ) - for user_id in set(users_to_check) + for user_id in users_to_check ] timers_fired_counter.inc_by(len(states)) |