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

Commit 76c43f0

Browse files
authored
Do not assume calls to runInteraction return Deferreds. (#8133)
1 parent 12aebdf commit 76c43f0

File tree

7 files changed

+41
-31
lines changed

7 files changed

+41
-31
lines changed

changelog.d/8133.misc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Convert various parts of the codebase to async/await.

synapse/crypto/keyring.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -757,9 +757,8 @@ async def get_key(key_to_fetch_item):
757757
except Exception:
758758
logger.exception("Error getting keys %s from %s", key_ids, server_name)
759759

760-
return await yieldable_gather_results(
761-
get_key, keys_to_fetch.items()
762-
).addCallback(lambda _: results)
760+
await yieldable_gather_results(get_key, keys_to_fetch.items())
761+
return results
763762

764763
async def get_server_verify_key_v2_direct(self, server_name, key_ids):
765764
"""
@@ -769,7 +768,7 @@ async def get_server_verify_key_v2_direct(self, server_name, key_ids):
769768
key_ids (iterable[str]):
770769
771770
Returns:
772-
Deferred[dict[str, FetchKeyResult]]: map from key ID to lookup result
771+
dict[str, FetchKeyResult]: map from key ID to lookup result
773772
774773
Raises:
775774
KeyLookupError if there was a problem making the lookup

synapse/module_api/__init__.py

+7-3
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,10 @@ def record_user_external_id(
167167
external_id: id on that system
168168
user_id: complete mxid that it is mapped to
169169
"""
170-
return self._store.record_user_external_id(
171-
auth_provider_id, remote_user_id, registered_user_id
170+
return defer.ensureDeferred(
171+
self._store.record_user_external_id(
172+
auth_provider_id, remote_user_id, registered_user_id
173+
)
172174
)
173175

174176
def generate_short_term_login_token(
@@ -223,7 +225,9 @@ def run_db_interaction(self, desc, func, *args, **kwargs):
223225
Returns:
224226
Deferred[object]: result of func
225227
"""
226-
return self._store.db_pool.runInteraction(desc, func, *args, **kwargs)
228+
return defer.ensureDeferred(
229+
self._store.db_pool.runInteraction(desc, func, *args, **kwargs)
230+
)
227231

228232
def complete_sso_login(
229233
self, registered_user_id: str, request: SynapseRequest, client_redirect_url: str

synapse/spam_checker_api/__init__.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,10 @@ def get_state_events_in_room(self, room_id: str, types: tuple) -> defer.Deferred
4848
twisted.internet.defer.Deferred[list(synapse.events.FrozenEvent)]:
4949
The filtered state events in the room.
5050
"""
51-
state_ids = yield self._store.get_filtered_current_state_ids(
52-
room_id=room_id, state_filter=StateFilter.from_types(types)
51+
state_ids = yield defer.ensureDeferred(
52+
self._store.get_filtered_current_state_ids(
53+
room_id=room_id, state_filter=StateFilter.from_types(types)
54+
)
5355
)
5456
state = yield defer.ensureDeferred(self._store.get_events(state_ids.values()))
5557
return state.values()

synapse/storage/databases/main/group_server.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -341,14 +341,15 @@ def _get_users_for_summary_txn(txn):
341341
"get_users_for_summary_by_role", _get_users_for_summary_txn
342342
)
343343

344-
def is_user_in_group(self, user_id, group_id):
345-
return self.db_pool.simple_select_one_onecol(
344+
async def is_user_in_group(self, user_id: str, group_id: str) -> bool:
345+
result = await self.db_pool.simple_select_one_onecol(
346346
table="group_users",
347347
keyvalues={"group_id": group_id, "user_id": user_id},
348348
retcol="user_id",
349349
allow_none=True,
350350
desc="is_user_in_group",
351-
).addCallback(lambda r: bool(r))
351+
)
352+
return bool(result)
352353

353354
def is_user_admin_in_group(self, group_id, user_id):
354355
return self.db_pool.simple_select_one_onecol(

synapse/storage/databases/main/keys.py

+16-12
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import itertools
1818
import logging
19+
from typing import Iterable, Tuple
1920

2021
from signedjson.key import decode_verify_key_bytes
2122

@@ -88,12 +89,17 @@ def _txn(txn):
8889

8990
return self.db_pool.runInteraction("get_server_verify_keys", _txn)
9091

91-
def store_server_verify_keys(self, from_server, ts_added_ms, verify_keys):
92+
async def store_server_verify_keys(
93+
self,
94+
from_server: str,
95+
ts_added_ms: int,
96+
verify_keys: Iterable[Tuple[str, str, FetchKeyResult]],
97+
) -> None:
9298
"""Stores NACL verification keys for remote servers.
9399
Args:
94-
from_server (str): Where the verification keys were looked up
95-
ts_added_ms (int): The time to record that the key was added
96-
verify_keys (iterable[tuple[str, str, FetchKeyResult]]):
100+
from_server: Where the verification keys were looked up
101+
ts_added_ms: The time to record that the key was added
102+
verify_keys:
97103
keys to be stored. Each entry is a triplet of
98104
(server_name, key_id, key).
99105
"""
@@ -115,13 +121,7 @@ def store_server_verify_keys(self, from_server, ts_added_ms, verify_keys):
115121
# param, which is itself the 2-tuple (server_name, key_id).
116122
invalidations.append((server_name, key_id))
117123

118-
def _invalidate(res):
119-
f = self._get_server_verify_key.invalidate
120-
for i in invalidations:
121-
f((i,))
122-
return res
123-
124-
return self.db_pool.runInteraction(
124+
await self.db_pool.runInteraction(
125125
"store_server_verify_keys",
126126
self.db_pool.simple_upsert_many_txn,
127127
table="server_signature_keys",
@@ -134,7 +134,11 @@ def _invalidate(res):
134134
"verify_key",
135135
),
136136
value_values=value_values,
137-
).addCallback(_invalidate)
137+
)
138+
139+
invalidate = self._get_server_verify_key.invalidate
140+
for i in invalidations:
141+
invalidate((i,))
138142

139143
def store_server_keys_json(
140144
self, server_name, key_id, from_server, ts_now_ms, ts_expires_ms, key_json_bytes

synapse/storage/databases/main/user_erasure_store.py

+6-7
Original file line numberDiff line numberDiff line change
@@ -13,30 +13,29 @@
1313
# See the License for the specific language governing permissions and
1414
# limitations under the License.
1515

16-
import operator
17-
1816
from synapse.storage._base import SQLBaseStore
1917
from synapse.util.caches.descriptors import cached, cachedList
2018

2119

2220
class UserErasureWorkerStore(SQLBaseStore):
2321
@cached()
24-
def is_user_erased(self, user_id):
22+
async def is_user_erased(self, user_id: str) -> bool:
2523
"""
2624
Check if the given user id has requested erasure
2725
2826
Args:
29-
user_id (str): full user id to check
27+
user_id: full user id to check
3028
3129
Returns:
32-
Deferred[bool]: True if the user has requested erasure
30+
True if the user has requested erasure
3331
"""
34-
return self.db_pool.simple_select_onecol(
32+
result = await self.db_pool.simple_select_onecol(
3533
table="erased_users",
3634
keyvalues={"user_id": user_id},
3735
retcol="1",
3836
desc="is_user_erased",
39-
).addCallback(operator.truth)
37+
)
38+
return bool(result)
4039

4140
@cachedList(cached_method_name="is_user_erased", list_name="user_ids")
4241
async def are_users_erased(self, user_ids):

0 commit comments

Comments
 (0)