summary refs log tree commit diff
diff options
context:
space:
mode:
authorMathieu Velten <mathieuv@matrix.org>2023-01-18 12:38:48 +0100
committerMathieu Velten <mathieuv@matrix.org>2023-01-18 12:38:48 +0100
commit6472178a41fff06c8f0e494abb645bf6e427d98d (patch)
tree1c7c3693bf814bc0683b3d92360afa3b17a26fa5
parentoups whitespace (diff)
downloadsynapse-6472178a41fff06c8f0e494abb645bf6e427d98d.tar.xz
Optimize get_un_partial_stated_rooms_between
-rw-r--r--synapse/handlers/sync.py1
-rw-r--r--synapse/storage/databases/main/room.py11
2 files changed, 9 insertions, 3 deletions
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index 5d6e6a4c07..44a818d6f0 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -1831,6 +1831,7 @@ class SyncHandler:
                 await self.store.get_un_partial_stated_rooms_between(
                     un_partial_stated_rooms_since,
                     sync_result_builder.now_token.un_partial_stated_rooms_key,
+                    sync_result_builder.joined_room_ids,
                 )
             )
 
diff --git a/synapse/storage/databases/main/room.py b/synapse/storage/databases/main/room.py
index 2b200099bb..7a16d27627 100644
--- a/synapse/storage/databases/main/room.py
+++ b/synapse/storage/databases/main/room.py
@@ -1287,7 +1287,7 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
         return self._un_partial_stated_rooms_stream_id_gen.get_current_token()
 
     async def get_un_partial_stated_rooms_between(
-        self, last_id: int, current_id: int
+        self, last_id: int, current_id: int, room_ids: Collection[str]
     ) -> Set[str]:
         """Get all rooms that got un partial stated between `last_id` exclusive and
         `current_id` inclusive.
@@ -1304,9 +1304,14 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
         ) -> Set[str]:
             sql = """
                 SELECT DISTINCT room_id FROM un_partial_stated_room_stream
-                WHERE ? < stream_id AND stream_id <= ?
+                WHERE ? < stream_id AND stream_id <= ? AND
             """
-            txn.execute(sql, (last_id, current_id))
+
+            clause, args = make_in_list_sql_clause(
+                self.database_engine, "room_id", room_ids
+            )
+
+            txn.execute(sql + clause, [last_id, current_id] + list(args))
 
             return {r[0] for r in txn}