Allow /createRoom to be run on workers (#10564)
Fixes https://github.com/matrix-org/synapse/issues/7867
This commit is contained in:
parent
84469bdac7
commit
703e3a9e85
|
@ -0,0 +1 @@
|
||||||
|
Add support for routing `/createRoom` to workers.
|
|
@ -214,6 +214,7 @@ expressions:
|
||||||
^/_matrix/federation/v1/send/
|
^/_matrix/federation/v1/send/
|
||||||
|
|
||||||
# Client API requests
|
# Client API requests
|
||||||
|
^/_matrix/client/(api/v1|r0|unstable)/createRoom$
|
||||||
^/_matrix/client/(api/v1|r0|unstable)/publicRooms$
|
^/_matrix/client/(api/v1|r0|unstable)/publicRooms$
|
||||||
^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/joined_members$
|
^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/joined_members$
|
||||||
^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/context/.*$
|
^/_matrix/client/(api/v1|r0|unstable)/rooms/.*/context/.*$
|
||||||
|
|
|
@ -1141,10 +1141,10 @@ def register_servlets(hs: "HomeServer", http_server, is_worker=False):
|
||||||
JoinedRoomsRestServlet(hs).register(http_server)
|
JoinedRoomsRestServlet(hs).register(http_server)
|
||||||
RoomAliasListServlet(hs).register(http_server)
|
RoomAliasListServlet(hs).register(http_server)
|
||||||
SearchRestServlet(hs).register(http_server)
|
SearchRestServlet(hs).register(http_server)
|
||||||
|
RoomCreateRestServlet(hs).register(http_server)
|
||||||
|
|
||||||
# Some servlets only get registered for the main process.
|
# Some servlets only get registered for the main process.
|
||||||
if not is_worker:
|
if not is_worker:
|
||||||
RoomCreateRestServlet(hs).register(http_server)
|
|
||||||
RoomForgetRestServlet(hs).register(http_server)
|
RoomForgetRestServlet(hs).register(http_server)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,40 @@ class RoomWorkerStore(SQLBaseStore):
|
||||||
|
|
||||||
self.config = hs.config
|
self.config = hs.config
|
||||||
|
|
||||||
|
async def store_room(
|
||||||
|
self,
|
||||||
|
room_id: str,
|
||||||
|
room_creator_user_id: str,
|
||||||
|
is_public: bool,
|
||||||
|
room_version: RoomVersion,
|
||||||
|
):
|
||||||
|
"""Stores a room.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
room_id: The desired room ID, can be None.
|
||||||
|
room_creator_user_id: The user ID of the room creator.
|
||||||
|
is_public: True to indicate that this room should appear in
|
||||||
|
public room lists.
|
||||||
|
room_version: The version of the room
|
||||||
|
Raises:
|
||||||
|
StoreError if the room could not be stored.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
await self.db_pool.simple_insert(
|
||||||
|
"rooms",
|
||||||
|
{
|
||||||
|
"room_id": room_id,
|
||||||
|
"creator": room_creator_user_id,
|
||||||
|
"is_public": is_public,
|
||||||
|
"room_version": room_version.identifier,
|
||||||
|
"has_auth_chain_index": True,
|
||||||
|
},
|
||||||
|
desc="store_room",
|
||||||
|
)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error("store_room with room_id=%s failed: %s", room_id, e)
|
||||||
|
raise StoreError(500, "Problem creating room.")
|
||||||
|
|
||||||
async def get_room(self, room_id: str) -> dict:
|
async def get_room(self, room_id: str) -> dict:
|
||||||
"""Retrieve a room.
|
"""Retrieve a room.
|
||||||
|
|
||||||
|
@ -1342,40 +1376,6 @@ class RoomStore(RoomBackgroundUpdateStore, RoomWorkerStore, SearchStore):
|
||||||
lock=False,
|
lock=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def store_room(
|
|
||||||
self,
|
|
||||||
room_id: str,
|
|
||||||
room_creator_user_id: str,
|
|
||||||
is_public: bool,
|
|
||||||
room_version: RoomVersion,
|
|
||||||
):
|
|
||||||
"""Stores a room.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
room_id: The desired room ID, can be None.
|
|
||||||
room_creator_user_id: The user ID of the room creator.
|
|
||||||
is_public: True to indicate that this room should appear in
|
|
||||||
public room lists.
|
|
||||||
room_version: The version of the room
|
|
||||||
Raises:
|
|
||||||
StoreError if the room could not be stored.
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
await self.db_pool.simple_insert(
|
|
||||||
"rooms",
|
|
||||||
{
|
|
||||||
"room_id": room_id,
|
|
||||||
"creator": room_creator_user_id,
|
|
||||||
"is_public": is_public,
|
|
||||||
"room_version": room_version.identifier,
|
|
||||||
"has_auth_chain_index": True,
|
|
||||||
},
|
|
||||||
desc="store_room",
|
|
||||||
)
|
|
||||||
except Exception as e:
|
|
||||||
logger.error("store_room with room_id=%s failed: %s", room_id, e)
|
|
||||||
raise StoreError(500, "Problem creating room.")
|
|
||||||
|
|
||||||
async def maybe_store_room_on_outlier_membership(
|
async def maybe_store_room_on_outlier_membership(
|
||||||
self, room_id: str, room_version: RoomVersion
|
self, room_id: str, room_version: RoomVersion
|
||||||
):
|
):
|
||||||
|
|
Loading…
Reference in New Issue