summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2022-09-01 17:07:01 +0200
committerGitHub <noreply@github.com>2022-09-01 16:07:01 +0100
commit9d2823ab70e69a90f4a54256bd32cd85eab130d9 (patch)
tree71a3666ba8377a63dfd3b84f808d0eb8db62616a
parentAdd monthly active users documentation (#13617) (diff)
downloadsynapse-9d2823ab70e69a90f4a54256bd32cd85eab130d9.tar.xz
Cache `is_partial_state_room` (#13693)
Fixes #13613.
-rw-r--r--changelog.d/13693.misc1
-rw-r--r--synapse/storage/databases/main/room.py11
2 files changed, 8 insertions, 4 deletions
diff --git a/changelog.d/13693.misc b/changelog.d/13693.misc
new file mode 100644
index 0000000000..31490191c9
--- /dev/null
+++ b/changelog.d/13693.misc
@@ -0,0 +1 @@
+Add cache to `is_partial_state_room`.
diff --git a/synapse/storage/databases/main/room.py b/synapse/storage/databases/main/room.py
index 367424b4a8..bef66f1992 100644
--- a/synapse/storage/databases/main/room.py
+++ b/synapse/storage/databases/main/room.py
@@ -1185,8 +1185,9 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
             )
             return False
 
-    @staticmethod
-    def _clear_partial_state_room_txn(txn: LoggingTransaction, room_id: str) -> None:
+    def _clear_partial_state_room_txn(
+        self, txn: LoggingTransaction, room_id: str
+    ) -> None:
         DatabasePool.simple_delete_txn(
             txn,
             table="partial_state_rooms_servers",
@@ -1197,7 +1198,9 @@ class RoomWorkerStore(CacheInvalidationWorkerStore):
             table="partial_state_rooms",
             keyvalues={"room_id": room_id},
         )
+        self._invalidate_cache_and_stream(txn, self.is_partial_state_room, (room_id,))
 
+    @cached()
     async def is_partial_state_room(self, room_id: str) -> bool:
         """Checks if this room has partial state.
 
@@ -1771,9 +1774,8 @@ class RoomStore(RoomBackgroundUpdateStore, RoomWorkerStore):
             servers,
         )
 
-    @staticmethod
     def _store_partial_state_room_txn(
-        txn: LoggingTransaction, room_id: str, servers: Collection[str]
+        self, txn: LoggingTransaction, room_id: str, servers: Collection[str]
     ) -> None:
         DatabasePool.simple_insert_txn(
             txn,
@@ -1788,6 +1790,7 @@ class RoomStore(RoomBackgroundUpdateStore, RoomWorkerStore):
             keys=("room_id", "server_name"),
             values=((room_id, s) for s in servers),
         )
+        self._invalidate_cache_and_stream(txn, self.is_partial_state_room, (room_id,))
 
     async def maybe_store_room_on_outlier_membership(
         self, room_id: str, room_version: RoomVersion