diff --git a/synapse/crypto/keyring.py b/synapse/crypto/keyring.py
index 9e9b1c1c86..0860411218 100644
--- a/synapse/crypto/keyring.py
+++ b/synapse/crypto/keyring.py
@@ -43,7 +43,11 @@ from synapse.api.errors import (
from synapse.config.key import TrustedKeyServer
from synapse.events import EventBase
from synapse.events.utils import prune_event_dict
-from synapse.logging.context import make_deferred_yieldable, run_in_background
+from synapse.logging.context import (
+ defer_to_thread,
+ make_deferred_yieldable,
+ run_in_background,
+)
from synapse.storage.keys import FetchKeyResult
from synapse.types import JsonDict
from synapse.util import unwrapFirstError
@@ -161,6 +165,7 @@ class Keyring:
self, hs: "HomeServer", key_fetchers: "Optional[Iterable[KeyFetcher]]" = None
):
self.clock = hs.get_clock()
+ self.reactor = hs.get_reactor()
if key_fetchers is None:
key_fetchers = (
@@ -288,7 +293,9 @@ class Keyring:
verify_key = key_result.verify_key
json_object = verify_request.get_json_object()
try:
- verify_signed_json(
+ await defer_to_thread(
+ self.reactor,
+ verify_signed_json,
json_object,
verify_request.server_name,
verify_key,
@@ -544,22 +551,18 @@ class BaseV2KeyFetcher(KeyFetcher):
key_json_bytes = encode_canonical_json(response_json)
- await make_deferred_yieldable(
- defer.gatherResults(
- [
- run_in_background(
- self.store.store_server_keys_json,
- server_name=server_name,
- key_id=key_id,
- from_server=from_server,
- ts_now_ms=time_added_ms,
- ts_expires_ms=ts_valid_until_ms,
- key_json_bytes=key_json_bytes,
- )
- for key_id in verify_keys
- ],
- consumeErrors=True,
- ).addErrback(unwrapFirstError)
+ await self.store.store_server_keys_json_multi(
+ [
+ (
+ server_name,
+ key_id,
+ from_server,
+ time_added_ms,
+ ts_valid_until_ms,
+ key_json_bytes,
+ )
+ for key_id in verify_keys
+ ],
)
return verify_keys
|