From 846533464d41c01deeb21ba1ef867246cad0d3da Mon Sep 17 00:00:00 2001 From: Sean Quah Date: Fri, 6 May 2022 20:15:04 +0100 Subject: [PATCH 1/6] Allow `@cancellable` to be used on methods whose names have suffixes Signed-off-by: Sean Quah --- synapse/http/server.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/synapse/http/server.py b/synapse/http/server.py index 756c6e1aeeda..b9fa44eadb53 100644 --- a/synapse/http/server.py +++ b/synapse/http/server.py @@ -139,7 +139,9 @@ class SomeServlet(RestServlet): 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(name) for name in _cancellable_method_names + ): raise ValueError( "@cancellable decorator can only be applied to servlet methods." ) From 1b90a82437bd124dab714e39d6ac92e2d2c743e9 Mon Sep 17 00:00:00 2001 From: Sean Quah Date: Fri, 6 May 2022 20:20:05 +0100 Subject: [PATCH 2/6] Enable cancellation of `GET /rooms//members` requests Signed-off-by: Sean Quah --- synapse/rest/client/room.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/synapse/rest/client/room.py b/synapse/rest/client/room.py index 906fe09e9713..e7a6064f5f57 100644 --- a/synapse/rest/client/room.py +++ b/synapse/rest/client/room.py @@ -34,7 +34,7 @@ ) 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, @@ -481,6 +481,7 @@ def __init__(self, hs: "HomeServer"): 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]: From 5b301d897d826c73205887c3a70d2765a1aa8d58 Mon Sep 17 00:00:00 2001 From: Sean Quah Date: Fri, 6 May 2022 20:20:45 +0100 Subject: [PATCH 3/6] Enable cancellation of `GET /rooms//state` requests Signed-off-by: Sean Quah --- synapse/rest/client/room.py | 1 + 1 file changed, 1 insertion(+) diff --git a/synapse/rest/client/room.py b/synapse/rest/client/room.py index e7a6064f5f57..8f66777b5025 100644 --- a/synapse/rest/client/room.py +++ b/synapse/rest/client/room.py @@ -603,6 +603,7 @@ def __init__(self, hs: "HomeServer"): 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]]: From 7acab5797d5ae03a70bbf72aab6b9df2acc26224 Mon Sep 17 00:00:00 2001 From: Sean Quah Date: Fri, 6 May 2022 20:21:14 +0100 Subject: [PATCH 4/6] Enable cancellation of `GET /rooms//state//*` requests Signed-off-by: Sean Quah --- synapse/rest/client/room.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/synapse/rest/client/room.py b/synapse/rest/client/room.py index 8f66777b5025..4b8bfbffcb36 100644 --- a/synapse/rest/client/room.py +++ b/synapse/rest/client/room.py @@ -143,6 +143,7 @@ def register(self, http_server: HttpServer) -> None: 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 @@ def on_PUT_no_state_key( ) -> 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]: From 05e6b685aca6fef0608d238e5e00e37928b0f9fb Mon Sep 17 00:00:00 2001 From: Sean Quah Date: Wed, 11 May 2022 14:56:33 +0100 Subject: [PATCH 5/6] Add newsfile --- changelog.d/12708.misc | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/12708.misc diff --git a/changelog.d/12708.misc b/changelog.d/12708.misc new file mode 100644 index 000000000000..aa99e7311b97 --- /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. From f24217ded4fd7e959faf718db73f61734754cca0 Mon Sep 17 00:00:00 2001 From: Sean Quah Date: Wed, 11 May 2022 16:36:20 +0100 Subject: [PATCH 6/6] Improve variable name (thanks dmr!) --- synapse/http/server.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/synapse/http/server.py b/synapse/http/server.py index b9fa44eadb53..e3dcc3f3dd06 100644 --- a/synapse/http/server.py +++ b/synapse/http/server.py @@ -140,7 +140,7 @@ async def on_GET(self, request: SynapseRequest) -> ...: ... """ if method.__name__ not in _cancellable_method_names and not any( - method.__name__.startswith(name) for name in _cancellable_method_names + method.__name__.startswith(prefix) for prefix in _cancellable_method_names ): raise ValueError( "@cancellable decorator can only be applied to servlet methods."