Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit e8d0853

Browse files
Generalise _maybe_store_room_on_invite (#8754)
There's a handy function called maybe_store_room_on_invite which allows us to create an entry in the rooms table for a room and its version for which we aren't joined to yet, but we can reference when ingesting events about. This is currently used for invites where we receive some stripped state about the room and pass it down via /sync to the client, without us being in the room yet. There is a similar requirement for knocking, where we will eventually do the same thing, and need an entry in the rooms table as well. Thus, reusing this function works, however its name needs to be generalised a bit. Separated out from #6739.
1 parent 34226ec commit e8d0853

File tree

4 files changed

+18
-13
lines changed

4 files changed

+18
-13
lines changed

changelog.d/8754.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Generalise `RoomStore.maybe_store_room_on_invite` to handle other, non-invite membership events.

synapse/handlers/federation.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
from synapse.replication.http.federation import (
6868
ReplicationCleanRoomRestServlet,
6969
ReplicationFederationSendEventsRestServlet,
70-
ReplicationStoreRoomOnInviteRestServlet,
70+
ReplicationStoreRoomOnOutlierMembershipRestServlet,
7171
)
7272
from synapse.state import StateResolutionStore
7373
from synapse.storage.databases.main.events_worker import EventRedactBehaviour
@@ -152,12 +152,14 @@ def __init__(self, hs: "HomeServer"):
152152
self._user_device_resync = ReplicationUserDevicesResyncRestServlet.make_client(
153153
hs
154154
)
155-
self._maybe_store_room_on_invite = ReplicationStoreRoomOnInviteRestServlet.make_client(
155+
self._maybe_store_room_on_outlier_membership = ReplicationStoreRoomOnOutlierMembershipRestServlet.make_client(
156156
hs
157157
)
158158
else:
159159
self._device_list_updater = hs.get_device_handler().device_list_updater
160-
self._maybe_store_room_on_invite = self.store.maybe_store_room_on_invite
160+
self._maybe_store_room_on_outlier_membership = (
161+
self.store.maybe_store_room_on_outlier_membership
162+
)
161163

162164
# When joining a room we need to queue any events for that room up.
163165
# For each room, a list of (pdu, origin) tuples.
@@ -1617,7 +1619,7 @@ async def on_invite_request(
16171619
# keep a record of the room version, if we don't yet know it.
16181620
# (this may get overwritten if we later get a different room version in a
16191621
# join dance).
1620-
await self._maybe_store_room_on_invite(
1622+
await self._maybe_store_room_on_outlier_membership(
16211623
room_id=event.room_id, room_version=room_version
16221624
)
16231625

synapse/replication/http/federation.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -254,20 +254,20 @@ async def _handle_request(self, request, room_id):
254254
return 200, {}
255255

256256

257-
class ReplicationStoreRoomOnInviteRestServlet(ReplicationEndpoint):
257+
class ReplicationStoreRoomOnOutlierMembershipRestServlet(ReplicationEndpoint):
258258
"""Called to clean up any data in DB for a given room, ready for the
259259
server to join the room.
260260
261261
Request format:
262262
263-
POST /_synapse/replication/store_room_on_invite/:room_id/:txn_id
263+
POST /_synapse/replication/store_room_on_outlier_membership/:room_id/:txn_id
264264
265265
{
266266
"room_version": "1",
267267
}
268268
"""
269269

270-
NAME = "store_room_on_invite"
270+
NAME = "store_room_on_outlier_membership"
271271
PATH_ARGS = ("room_id",)
272272

273273
def __init__(self, hs):
@@ -282,7 +282,7 @@ async def _serialize_payload(room_id, room_version):
282282
async def _handle_request(self, request, room_id):
283283
content = parse_json_object_from_request(request)
284284
room_version = KNOWN_ROOM_VERSIONS[content["room_version"]]
285-
await self.store.maybe_store_room_on_invite(room_id, room_version)
285+
await self.store.maybe_store_room_on_outlier_membership(room_id, room_version)
286286
return 200, {}
287287

288288

@@ -291,4 +291,4 @@ def register_servlets(hs, http_server):
291291
ReplicationFederationSendEduRestServlet(hs).register(http_server)
292292
ReplicationGetQueryRestServlet(hs).register(http_server)
293293
ReplicationCleanRoomRestServlet(hs).register(http_server)
294-
ReplicationStoreRoomOnInviteRestServlet(hs).register(http_server)
294+
ReplicationStoreRoomOnOutlierMembershipRestServlet(hs).register(http_server)

synapse/storage/databases/main/room.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,13 +1240,15 @@ def store_room_txn(txn, next_id):
12401240
logger.error("store_room with room_id=%s failed: %s", room_id, e)
12411241
raise StoreError(500, "Problem creating room.")
12421242

1243-
async def maybe_store_room_on_invite(self, room_id: str, room_version: RoomVersion):
1243+
async def maybe_store_room_on_outlier_membership(
1244+
self, room_id: str, room_version: RoomVersion
1245+
):
12441246
"""
1245-
When we receive an invite over federation, store the version of the room if we
1246-
don't already know the room version.
1247+
When we receive an invite or any other event over federation that may relate to a room
1248+
we are not in, store the version of the room if we don't already know the room version.
12471249
"""
12481250
await self.db_pool.simple_upsert(
1249-
desc="maybe_store_room_on_invite",
1251+
desc="maybe_store_room_on_outlier_membership",
12501252
table="rooms",
12511253
keyvalues={"room_id": room_id},
12521254
values={},

0 commit comments

Comments
 (0)