From 4168c2cff1768810530c12fc640e23542b6fc2c0 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Mon, 21 Jun 2021 13:34:18 +0100 Subject: [PATCH 1/5] Fix performance of responding to user key requests over federation We were repeatedly looking up a config option in a loop (using the unclassed config style), which is expensive enough that it can cause large CPU usage. --- synapse/config/_base.pyi | 2 ++ synapse/storage/databases/main/end_to_end_keys.py | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/synapse/config/_base.pyi b/synapse/config/_base.pyi index 844ecd470802..23ca0c83c16e 100644 --- a/synapse/config/_base.pyi +++ b/synapse/config/_base.pyi @@ -11,6 +11,7 @@ from synapse.config import ( database, emailconfig, experimental, + federation, groups, jwt, key, @@ -87,6 +88,7 @@ class RootConfig: tracer: tracer.TracerConfig redis: redis.RedisConfig modules: modules.ModulesConfig + federation: federation.FederationConfig config_classes: List = ... def __init__(self) -> None: ... diff --git a/synapse/storage/databases/main/end_to_end_keys.py b/synapse/storage/databases/main/end_to_end_keys.py index 9ba5778a8826..0e3dd4e9cac9 100644 --- a/synapse/storage/databases/main/end_to_end_keys.py +++ b/synapse/storage/databases/main/end_to_end_keys.py @@ -62,6 +62,13 @@ def __init__(self, database: DatabasePool, db_conn: Connection, hs: "HomeServer" class EndToEndKeyWorkerStore(EndToEndKeyBackgroundStore): + def __init__(self, database: DatabasePool, db_conn: Connection, hs: "HomeServer"): + super().__init__(database, db_conn, hs) + + self._allow_device_name_lookup_over_federation = ( + self.hs.config.federation.allow_device_name_lookup_over_federation + ) + async def get_e2e_device_keys_for_federation_query( self, user_id: str ) -> Tuple[int, List[JsonDict]]: @@ -85,7 +92,7 @@ async def get_e2e_device_keys_for_federation_query( result["keys"] = keys device_display_name = None - if self.hs.config.allow_device_name_lookup_over_federation: + if self._allow_device_name_lookup_over_federation: device_display_name = device.display_name if device_display_name: result["device_display_name"] = device_display_name From 50f5300aa17aa77322f4a0d1bc7afe683092bea3 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Mon, 21 Jun 2021 13:35:50 +0100 Subject: [PATCH 2/5] Newsfile --- changelog.d/10221.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 changelog.d/10221.bugfix diff --git a/changelog.d/10221.bugfix b/changelog.d/10221.bugfix new file mode 100644 index 000000000000..af6b08ff1777 --- /dev/null +++ b/changelog.d/10221.bugfix @@ -0,0 +1 @@ +Fix performance of responding to user key requests over federation. From 441db1ccbc6fefb4a90c4234a8e902cb48596e5c Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Mon, 21 Jun 2021 13:44:07 +0100 Subject: [PATCH 3/5] Update changelog --- changelog.d/10221.bugfix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.d/10221.bugfix b/changelog.d/10221.bugfix index af6b08ff1777..a7025250d9c9 100644 --- a/changelog.d/10221.bugfix +++ b/changelog.d/10221.bugfix @@ -1 +1 @@ -Fix performance of responding to user key requests over federation. +Fix performance of responding to user key requests over federation. Introduced in v1.34.0. From 72e2509a482aa436ad37231ec443517634b25a0f Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Mon, 21 Jun 2021 13:44:48 +0100 Subject: [PATCH 4/5] Update changelog --- changelog.d/10221.bugfix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.d/10221.bugfix b/changelog.d/10221.bugfix index a7025250d9c9..4f4ca97ea0f7 100644 --- a/changelog.d/10221.bugfix +++ b/changelog.d/10221.bugfix @@ -1 +1 @@ -Fix performance of responding to user key requests over federation. Introduced in v1.34.0. +Fix performance of responding to user key requests over federation. Introduced in v1.34.0rc1. From 272aeae5df413ba8f3a76d06077db38b1fde53a5 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Mon, 21 Jun 2021 14:08:44 +0100 Subject: [PATCH 5/5] Update changelog.d/10221.bugfix Co-authored-by: Richard van der Hoff <1389908+richvdh@users.noreply.github.com> --- changelog.d/10221.bugfix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.d/10221.bugfix b/changelog.d/10221.bugfix index 4f4ca97ea0f7..8853a9bf4e13 100644 --- a/changelog.d/10221.bugfix +++ b/changelog.d/10221.bugfix @@ -1 +1 @@ -Fix performance of responding to user key requests over federation. Introduced in v1.34.0rc1. +Fix performance regression in responding to user key requests over federation. Introduced in v1.34.0rc1.