From bf7ce92bf7307ded3643d8cc5ee01aee21f23f58 Mon Sep 17 00:00:00 2001 From: Sean Quah <8349537+squahtx@users.noreply.github.com> Date: Wed, 11 May 2022 17:22:34 +0100 Subject: Enable cancellation of `GET /members` and `GET /state` requests (#12708) Enable cancellation of `GET /rooms/$room_id/members`, `GET /rooms/$room_id/state` and `GET /rooms/$room_id/state/$state_key/*` requests. Signed-off-by: Sean Quah --- changelog.d/12708.misc | 1 + synapse/http/server.py | 4 +++- synapse/rest/client/room.py | 6 +++++- 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 changelog.d/12708.misc diff --git a/changelog.d/12708.misc b/changelog.d/12708.misc new file mode 100644 index 0000000000..aa99e7311b --- /dev/null +++ b/changelog.d/12708.misc @@ -0,0 +1 @@ +Enable cancellation of `GET /rooms/$room_id/members`, `GET /rooms/$room_id/state` and `GET /rooms/$room_id/state/$event_type/*` requests. diff --git a/synapse/http/server.py b/synapse/http/server.py index 756c6e1aee..e3dcc3f3dd 100644 --- a/synapse/http/server.py +++ b/synapse/http/server.py @@ -139,7 +139,9 @@ def cancellable(method: F) -> F: async def on_GET(self, request: SynapseRequest) -> ...: ... """ - if method.__name__ not in _cancellable_method_names: + if method.__name__ not in _cancellable_method_names and not any( + method.__name__.startswith(prefix) for prefix in _cancellable_method_names + ): raise ValueError( "@cancellable decorator can only be applied to servlet methods." ) diff --git a/synapse/rest/client/room.py b/synapse/rest/client/room.py index 906fe09e97..4b8bfbffcb 100644 --- a/synapse/rest/client/room.py +++ b/synapse/rest/client/room.py @@ -34,7 +34,7 @@ from synapse.api.errors import ( ) from synapse.api.filtering import Filter from synapse.events.utils import format_event_for_client_v2 -from synapse.http.server import HttpServer +from synapse.http.server import HttpServer, cancellable from synapse.http.servlet import ( ResolveRoomIdMixin, RestServlet, @@ -143,6 +143,7 @@ class RoomStateEventRestServlet(TransactionRestServlet): self.__class__.__name__, ) + @cancellable def on_GET_no_state_key( self, request: SynapseRequest, room_id: str, event_type: str ) -> Awaitable[Tuple[int, JsonDict]]: @@ -153,6 +154,7 @@ class RoomStateEventRestServlet(TransactionRestServlet): ) -> Awaitable[Tuple[int, JsonDict]]: return self.on_PUT(request, room_id, event_type, "") + @cancellable async def on_GET( self, request: SynapseRequest, room_id: str, event_type: str, state_key: str ) -> Tuple[int, JsonDict]: @@ -481,6 +483,7 @@ class RoomMemberListRestServlet(RestServlet): self.auth = hs.get_auth() self.store = hs.get_datastores().main + @cancellable async def on_GET( self, request: SynapseRequest, room_id: str ) -> Tuple[int, JsonDict]: @@ -602,6 +605,7 @@ class RoomStateRestServlet(RestServlet): self.message_handler = hs.get_message_handler() self.auth = hs.get_auth() + @cancellable async def on_GET( self, request: SynapseRequest, room_id: str ) -> Tuple[int, List[JsonDict]]: -- cgit 1.4.1