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

Commit a5cd05b

Browse files
authored
Fix performance of responding to user key requests over federation (#10221)
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.
1 parent 1821471 commit a5cd05b

File tree

3 files changed

+11
-1
lines changed

3 files changed

+11
-1
lines changed

changelog.d/10221.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix performance regression in responding to user key requests over federation. Introduced in v1.34.0rc1.

synapse/config/_base.pyi

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ from synapse.config import (
1111
database,
1212
emailconfig,
1313
experimental,
14+
federation,
1415
groups,
1516
jwt,
1617
key,
@@ -87,6 +88,7 @@ class RootConfig:
8788
tracer: tracer.TracerConfig
8889
redis: redis.RedisConfig
8990
modules: modules.ModulesConfig
91+
federation: federation.FederationConfig
9092

9193
config_classes: List = ...
9294
def __init__(self) -> None: ...

synapse/storage/databases/main/end_to_end_keys.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,13 @@ def __init__(self, database: DatabasePool, db_conn: Connection, hs: "HomeServer"
6262

6363

6464
class EndToEndKeyWorkerStore(EndToEndKeyBackgroundStore):
65+
def __init__(self, database: DatabasePool, db_conn: Connection, hs: "HomeServer"):
66+
super().__init__(database, db_conn, hs)
67+
68+
self._allow_device_name_lookup_over_federation = (
69+
self.hs.config.federation.allow_device_name_lookup_over_federation
70+
)
71+
6572
async def get_e2e_device_keys_for_federation_query(
6673
self, user_id: str
6774
) -> Tuple[int, List[JsonDict]]:
@@ -85,7 +92,7 @@ async def get_e2e_device_keys_for_federation_query(
8592
result["keys"] = keys
8693

8794
device_display_name = None
88-
if self.hs.config.allow_device_name_lookup_over_federation:
95+
if self._allow_device_name_lookup_over_federation:
8996
device_display_name = device.display_name
9097
if device_display_name:
9198
result["device_display_name"] = device_display_name

0 commit comments

Comments
 (0)