summary refs log tree commit diff
path: root/synapse/streams
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-10-24 13:35:51 +0100
committerErik Johnston <erik@matrix.org>2016-10-24 13:35:51 +0100
commitd04e2ff3a43cca3f7d393a4770f022c7bf1a372c (patch)
tree272dbeb66fc94a830c874945522cb188d42403e1 /synapse/streams
parentMerge pull request #1177 from matrix-org/paul/standard-metric-names (diff)
downloadsynapse-d04e2ff3a43cca3f7d393a4770f022c7bf1a372c.tar.xz
Fix incredubly slow back pagination query
If a client didn't specify a from token when paginating backwards
synapse would attempt to query the (global) maximum topological token.
This a) doesn't make much sense since they're room specific and b) there
are no indices that lets postgres do this efficiently.
Diffstat (limited to '')
-rw-r--r--synapse/streams/events.py30
1 files changed, 28 insertions, 2 deletions
diff --git a/synapse/streams/events.py b/synapse/streams/events.py
index 6bf21d6f5e..4018dbde56 100644
--- a/synapse/streams/events.py
+++ b/synapse/streams/events.py
@@ -41,13 +41,39 @@ class EventSources(object):
         self.store = hs.get_datastore()
 
     @defer.inlineCallbacks
-    def get_current_token(self, direction='f'):
+    def get_current_token(self):
         push_rules_key, _ = self.store.get_push_rules_stream_token()
         to_device_key = self.store.get_to_device_stream_token()
 
         token = StreamToken(
             room_key=(
-                yield self.sources["room"].get_current_key(direction)
+                yield self.sources["room"].get_current_key()
+            ),
+            presence_key=(
+                yield self.sources["presence"].get_current_key()
+            ),
+            typing_key=(
+                yield self.sources["typing"].get_current_key()
+            ),
+            receipt_key=(
+                yield self.sources["receipt"].get_current_key()
+            ),
+            account_data_key=(
+                yield self.sources["account_data"].get_current_key()
+            ),
+            push_rules_key=push_rules_key,
+            to_device_key=to_device_key,
+        )
+        defer.returnValue(token)
+
+    @defer.inlineCallbacks
+    def get_current_token_for_room(self, room_id):
+        push_rules_key, _ = self.store.get_push_rules_stream_token()
+        to_device_key = self.store.get_to_device_stream_token()
+
+        token = StreamToken(
+            room_key=(
+                yield self.sources["room"].get_current_key()
             ),
             presence_key=(
                 yield self.sources["presence"].get_current_key()