summary refs log tree commit diff
path: root/synapse/notifier.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-01-29 15:21:38 +0000
committerErik Johnston <erik@matrix.org>2016-01-29 15:22:17 +0000
commit4a6eb5eb45c8c77c02a38b9cd3448174a1cf018a (patch)
treecb19a986ddd94ab773071777e8fa0bf9203456ec /synapse/notifier.py
parentBump AccountDataAndTagsChangeCache size (diff)
downloadsynapse-4a6eb5eb45c8c77c02a38b9cd3448174a1cf018a.tar.xz
Make /events always return a newer token, if one exists
Diffstat (limited to 'synapse/notifier.py')
-rw-r--r--synapse/notifier.py19
1 files changed, 10 insertions, 9 deletions
diff --git a/synapse/notifier.py b/synapse/notifier.py
index 6eaa65071e..acd4019a91 100644
--- a/synapse/notifier.py
+++ b/synapse/notifier.py
@@ -22,6 +22,8 @@ from synapse.util.async import run_on_reactor, ObservableDeferred
 from synapse.types import StreamToken
 import synapse.metrics
 
+from collections import namedtuple
+
 import logging
 
 
@@ -118,6 +120,11 @@ class _NotifierUserStream(object):
             return _NotificationListener(self.notify_deferred.observe())
 
 
+class EventStreamResult(namedtuple("EventStreamResult", ("events", "tokens"))):
+    def __nonzero__(self):
+        return bool(self.events)
+
+
 class Notifier(object):
     """ This class is responsible for notifying any listeners when there are
     new events available for it.
@@ -356,7 +363,7 @@ class Notifier(object):
         @defer.inlineCallbacks
         def check_for_updates(before_token, after_token):
             if not after_token.is_after(before_token):
-                defer.returnValue(None)
+                defer.returnValue(EventStreamResult([], (before_token, before_token)))
 
             events = []
             end_token = from_token
@@ -372,7 +379,7 @@ class Notifier(object):
                 new_events, new_key = yield source.get_new_events(
                     user=user,
                     from_key=getattr(from_token, keyname),
-                    limit=limit,
+                    limit=max(limit * 2, 10),
                     is_guest=is_peeking,
                     room_ids=room_ids,
                 )
@@ -388,10 +395,7 @@ class Notifier(object):
                 events.extend(new_events)
                 end_token = end_token.copy_and_replace(keyname, new_key)
 
-            if events:
-                defer.returnValue((events, (from_token, end_token)))
-            else:
-                defer.returnValue(None)
+            defer.returnValue(EventStreamResult(events, (from_token, end_token)))
 
         user_id_for_stream = user.to_string()
         if is_peeking:
@@ -415,9 +419,6 @@ class Notifier(object):
             from_token=from_token,
         )
 
-        if result is None:
-            result = ([], (from_token, from_token))
-
         defer.returnValue(result)
 
     @defer.inlineCallbacks