diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py
index 7db4b062d2..afde49c004 100644
--- a/synapse/handlers/presence.py
+++ b/synapse/handlers/presence.py
@@ -26,7 +26,6 @@ import synapse.metrics
from ._base import BaseHandler
import logging
-from collections import OrderedDict
logger = logging.getLogger(__name__)
@@ -144,7 +143,7 @@ class PresenceHandler(BaseHandler):
self._remote_offline_serials = []
# map any user to a UserPresenceCache
- self._user_cachemap = OrderedDict() # keep them sorted by serial
+ self._user_cachemap = {}
self._user_cachemap_latest_serial = 0
metrics.register_callback(
@@ -166,14 +165,6 @@ class PresenceHandler(BaseHandler):
else:
return UserPresenceCache()
- def _bump_serial(self, user=None):
- self._user_cachemap_latest_serial += 1
-
- if user:
- # Move to end
- cache = self._user_cachemap.pop(user)
- self._user_cachemap[user] = cache
-
def registered_user(self, user):
return self.store.create_presence(user.localpart)
@@ -309,7 +300,7 @@ class PresenceHandler(BaseHandler):
def changed_presencelike_data(self, user, state):
statuscache = self._get_or_make_usercache(user)
- self._bump_serial(user=user)
+ self._user_cachemap_latest_serial += 1
statuscache.update(state, serial=self._user_cachemap_latest_serial)
return self.push_presence(user, statuscache=statuscache)
@@ -331,7 +322,7 @@ class PresenceHandler(BaseHandler):
# No actual update but we need to bump the serial anyway for the
# event source
- self._bump_serial()
+ self._user_cachemap_latest_serial += 1
statuscache.update({}, serial=self._user_cachemap_latest_serial)
self.push_update_to_local_and_remote(
@@ -715,7 +706,7 @@ class PresenceHandler(BaseHandler):
statuscache = self._get_or_make_usercache(user)
- self._bump_serial(user=user)
+ self._user_cachemap_latest_serial += 1
statuscache.update(state, serial=self._user_cachemap_latest_serial)
if not observers and not room_ids:
@@ -877,15 +868,10 @@ class PresenceEventSource(object):
updates = []
# TODO(paul): use a DeferredList ? How to limit concurrency.
- for observed_user in reversed(cachemap.keys()):
+ for observed_user in cachemap.keys():
cached = cachemap[observed_user]
- # Since this is ordered in descending order of serial, we can just
- # stop once we've seen enough
- if cached.serial <= from_key:
- break
-
- if cached.serial > max_serial:
+ if cached.serial <= from_key or cached.serial > max_serial:
continue
if not (yield self.is_visible(observer_user, observed_user)):
|