summary refs log tree commit diff
diff options
context:
space:
mode:
authorMark Haines <mjark@negativecurvature.net>2015-05-12 15:44:21 +0100
committerMark Haines <mjark@negativecurvature.net>2015-05-12 15:44:21 +0100
commitd7b3ac46f8ac32048559e06770e4fc2d57caeaf7 (patch)
treee49de335cd86d0d3cf528fe661f238b60ff4eb53
parentMerge pull request #143 from matrix-org/erikj/SYN-375 (diff)
downloadsynapse-d7b3ac46f8ac32048559e06770e4fc2d57caeaf7.tar.xz
Revert "Improvement to performance of presence event stream handling"
-rw-r--r--synapse/handlers/presence.py26
1 files changed, 6 insertions, 20 deletions
diff --git a/synapse/handlers/presence.py b/synapse/handlers/presence.py
index 28688d532d..1edab05492 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(
@@ -713,7 +704,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:
@@ -873,15 +864,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)):