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

Commit 2231dff

Browse files
authored
Make StreamIdGen get_next and get_next_mult async (#8161)
This is mainly so that `StreamIdGenerator` and `MultiWriterIdGenerator` will have the same interface, allowing them to be used interchangeably.
1 parent 74bf8d4 commit 2231dff

14 files changed

+54
-49
lines changed

changelog.d/8161.misc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Refactor `StreamIdGenerator` and `MultiWriterIdGenerator` to have the same interface.

synapse/storage/databases/main/account_data.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -336,7 +336,7 @@ async def add_account_data_to_room(
336336
"""
337337
content_json = json_encoder.encode(content)
338338

339-
with self._account_data_id_gen.get_next() as next_id:
339+
with await self._account_data_id_gen.get_next() as next_id:
340340
# no need to lock here as room_account_data has a unique constraint
341341
# on (user_id, room_id, account_data_type) so simple_upsert will
342342
# retry if there is a conflict.
@@ -384,7 +384,7 @@ async def add_account_data_for_user(
384384
"""
385385
content_json = json_encoder.encode(content)
386386

387-
with self._account_data_id_gen.get_next() as next_id:
387+
with await self._account_data_id_gen.get_next() as next_id:
388388
# no need to lock here as account_data has a unique constraint on
389389
# (user_id, account_data_type) so simple_upsert will retry if
390390
# there is a conflict.

synapse/storage/databases/main/deviceinbox.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,7 @@ def add_messages_txn(txn, now_ms, stream_id):
362362
rows.append((destination, stream_id, now_ms, edu_json))
363363
txn.executemany(sql, rows)
364364

365-
with self._device_inbox_id_gen.get_next() as stream_id:
365+
with await self._device_inbox_id_gen.get_next() as stream_id:
366366
now_ms = self.clock.time_msec()
367367
await self.db_pool.runInteraction(
368368
"add_messages_to_device_inbox", add_messages_txn, now_ms, stream_id
@@ -411,7 +411,7 @@ def add_messages_txn(txn, now_ms, stream_id):
411411
txn, stream_id, local_messages_by_user_then_device
412412
)
413413

414-
with self._device_inbox_id_gen.get_next() as stream_id:
414+
with await self._device_inbox_id_gen.get_next() as stream_id:
415415
now_ms = self.clock.time_msec()
416416
await self.db_pool.runInteraction(
417417
"add_messages_from_remote_to_device_inbox",

synapse/storage/databases/main/devices.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -380,7 +380,7 @@ async def add_user_signature_change_to_streams(
380380
THe new stream ID.
381381
"""
382382

383-
with self._device_list_id_gen.get_next() as stream_id:
383+
with await self._device_list_id_gen.get_next() as stream_id:
384384
await self.db_pool.runInteraction(
385385
"add_user_sig_change_to_streams",
386386
self._add_user_signature_change_txn,
@@ -1146,7 +1146,9 @@ async def add_device_change_to_streams(
11461146
if not device_ids:
11471147
return
11481148

1149-
with self._device_list_id_gen.get_next_mult(len(device_ids)) as stream_ids:
1149+
with await self._device_list_id_gen.get_next_mult(
1150+
len(device_ids)
1151+
) as stream_ids:
11501152
await self.db_pool.runInteraction(
11511153
"add_device_change_to_stream",
11521154
self._add_device_change_to_stream_txn,
@@ -1159,7 +1161,7 @@ async def add_device_change_to_streams(
11591161
return stream_ids[-1]
11601162

11611163
context = get_active_span_text_map()
1162-
with self._device_list_id_gen.get_next_mult(
1164+
with await self._device_list_id_gen.get_next_mult(
11631165
len(hosts) * len(device_ids)
11641166
) as stream_ids:
11651167
await self.db_pool.runInteraction(

synapse/storage/databases/main/end_to_end_keys.py

+23-20
Original file line numberDiff line numberDiff line change
@@ -648,7 +648,7 @@ def delete_e2e_keys_by_device_txn(txn):
648648
"delete_e2e_keys_by_device", delete_e2e_keys_by_device_txn
649649
)
650650

651-
def _set_e2e_cross_signing_key_txn(self, txn, user_id, key_type, key):
651+
def _set_e2e_cross_signing_key_txn(self, txn, user_id, key_type, key, stream_id):
652652
"""Set a user's cross-signing key.
653653
654654
Args:
@@ -658,6 +658,7 @@ def _set_e2e_cross_signing_key_txn(self, txn, user_id, key_type, key):
658658
for a master key, 'self_signing' for a self-signing key, or
659659
'user_signing' for a user-signing key
660660
key (dict): the key data
661+
stream_id (int)
661662
"""
662663
# the 'key' dict will look something like:
663664
# {
@@ -695,37 +696,39 @@ def _set_e2e_cross_signing_key_txn(self, txn, user_id, key_type, key):
695696
)
696697

697698
# and finally, store the key itself
698-
with self._cross_signing_id_gen.get_next() as stream_id:
699-
self.db_pool.simple_insert_txn(
700-
txn,
701-
"e2e_cross_signing_keys",
702-
values={
703-
"user_id": user_id,
704-
"keytype": key_type,
705-
"keydata": json_encoder.encode(key),
706-
"stream_id": stream_id,
707-
},
708-
)
699+
self.db_pool.simple_insert_txn(
700+
txn,
701+
"e2e_cross_signing_keys",
702+
values={
703+
"user_id": user_id,
704+
"keytype": key_type,
705+
"keydata": json_encoder.encode(key),
706+
"stream_id": stream_id,
707+
},
708+
)
709709

710710
self._invalidate_cache_and_stream(
711711
txn, self._get_bare_e2e_cross_signing_keys, (user_id,)
712712
)
713713

714-
def set_e2e_cross_signing_key(self, user_id, key_type, key):
714+
async def set_e2e_cross_signing_key(self, user_id, key_type, key):
715715
"""Set a user's cross-signing key.
716716
717717
Args:
718718
user_id (str): the user to set the user-signing key for
719719
key_type (str): the type of cross-signing key to set
720720
key (dict): the key data
721721
"""
722-
return self.db_pool.runInteraction(
723-
"add_e2e_cross_signing_key",
724-
self._set_e2e_cross_signing_key_txn,
725-
user_id,
726-
key_type,
727-
key,
728-
)
722+
723+
with await self._cross_signing_id_gen.get_next() as stream_id:
724+
return await self.db_pool.runInteraction(
725+
"add_e2e_cross_signing_key",
726+
self._set_e2e_cross_signing_key_txn,
727+
user_id,
728+
key_type,
729+
key,
730+
stream_id,
731+
)
729732

730733
def store_e2e_cross_signing_signatures(self, user_id, signatures):
731734
"""Stores cross-signing signatures.

synapse/storage/databases/main/events.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,11 @@ async def _persist_events_and_state_updates(
153153
# Note: Multiple instances of this function cannot be in flight at
154154
# the same time for the same room.
155155
if backfilled:
156-
stream_ordering_manager = self._backfill_id_gen.get_next_mult(
156+
stream_ordering_manager = await self._backfill_id_gen.get_next_mult(
157157
len(events_and_contexts)
158158
)
159159
else:
160-
stream_ordering_manager = self._stream_id_gen.get_next_mult(
160+
stream_ordering_manager = await self._stream_id_gen.get_next_mult(
161161
len(events_and_contexts)
162162
)
163163

synapse/storage/databases/main/group_server.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1182,7 +1182,7 @@ def _register_user_group_membership_txn(txn, next_id):
11821182

11831183
return next_id
11841184

1185-
with self._group_updates_id_gen.get_next() as next_id:
1185+
with await self._group_updates_id_gen.get_next() as next_id:
11861186
res = await self.db_pool.runInteraction(
11871187
"register_user_group_membership",
11881188
_register_user_group_membership_txn,

synapse/storage/databases/main/presence.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
class PresenceStore(SQLBaseStore):
2525
async def update_presence(self, presence_states):
26-
stream_ordering_manager = self._presence_id_gen.get_next_mult(
26+
stream_ordering_manager = await self._presence_id_gen.get_next_mult(
2727
len(presence_states)
2828
)
2929

synapse/storage/databases/main/push_rule.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,7 @@ async def add_push_rule(
338338
) -> None:
339339
conditions_json = json_encoder.encode(conditions)
340340
actions_json = json_encoder.encode(actions)
341-
with self._push_rules_stream_id_gen.get_next() as stream_id:
341+
with await self._push_rules_stream_id_gen.get_next() as stream_id:
342342
event_stream_ordering = self._stream_id_gen.get_current_token()
343343

344344
if before or after:
@@ -560,7 +560,7 @@ def delete_push_rule_txn(txn, stream_id, event_stream_ordering):
560560
txn, stream_id, event_stream_ordering, user_id, rule_id, op="DELETE"
561561
)
562562

563-
with self._push_rules_stream_id_gen.get_next() as stream_id:
563+
with await self._push_rules_stream_id_gen.get_next() as stream_id:
564564
event_stream_ordering = self._stream_id_gen.get_current_token()
565565

566566
await self.db_pool.runInteraction(
@@ -571,7 +571,7 @@ def delete_push_rule_txn(txn, stream_id, event_stream_ordering):
571571
)
572572

573573
async def set_push_rule_enabled(self, user_id, rule_id, enabled) -> None:
574-
with self._push_rules_stream_id_gen.get_next() as stream_id:
574+
with await self._push_rules_stream_id_gen.get_next() as stream_id:
575575
event_stream_ordering = self._stream_id_gen.get_current_token()
576576

577577
await self.db_pool.runInteraction(
@@ -646,7 +646,7 @@ def set_push_rule_actions_txn(txn, stream_id, event_stream_ordering):
646646
data={"actions": actions_json},
647647
)
648648

649-
with self._push_rules_stream_id_gen.get_next() as stream_id:
649+
with await self._push_rules_stream_id_gen.get_next() as stream_id:
650650
event_stream_ordering = self._stream_id_gen.get_current_token()
651651

652652
await self.db_pool.runInteraction(

synapse/storage/databases/main/pusher.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ async def add_pusher(
281281
last_stream_ordering,
282282
profile_tag="",
283283
) -> None:
284-
with self._pushers_id_gen.get_next() as stream_id:
284+
with await self._pushers_id_gen.get_next() as stream_id:
285285
# no need to lock because `pushers` has a unique key on
286286
# (app_id, pushkey, user_name) so simple_upsert will retry
287287
await self.db_pool.simple_upsert(
@@ -344,7 +344,7 @@ def delete_pusher_txn(txn, stream_id):
344344
},
345345
)
346346

347-
with self._pushers_id_gen.get_next() as stream_id:
347+
with await self._pushers_id_gen.get_next() as stream_id:
348348
await self.db_pool.runInteraction(
349349
"delete_pusher", delete_pusher_txn, stream_id
350350
)

synapse/storage/databases/main/receipts.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -520,8 +520,7 @@ def graph_to_linear(txn):
520520
"insert_receipt_conv", graph_to_linear
521521
)
522522

523-
stream_id_manager = self._receipts_id_gen.get_next()
524-
with stream_id_manager as stream_id:
523+
with await self._receipts_id_gen.get_next() as stream_id:
525524
event_ts = await self.db_pool.runInteraction(
526525
"insert_linearized_receipt",
527526
self.insert_linearized_receipt_txn,

synapse/storage/databases/main/room.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1129,7 +1129,7 @@ def store_room_txn(txn, next_id):
11291129
},
11301130
)
11311131

1132-
with self._public_room_id_gen.get_next() as next_id:
1132+
with await self._public_room_id_gen.get_next() as next_id:
11331133
await self.db_pool.runInteraction(
11341134
"store_room_txn", store_room_txn, next_id
11351135
)
@@ -1196,7 +1196,7 @@ def set_room_is_public_txn(txn, next_id):
11961196
},
11971197
)
11981198

1199-
with self._public_room_id_gen.get_next() as next_id:
1199+
with await self._public_room_id_gen.get_next() as next_id:
12001200
await self.db_pool.runInteraction(
12011201
"set_room_is_public", set_room_is_public_txn, next_id
12021202
)
@@ -1276,7 +1276,7 @@ def set_room_is_public_appservice_txn(txn, next_id):
12761276
},
12771277
)
12781278

1279-
with self._public_room_id_gen.get_next() as next_id:
1279+
with await self._public_room_id_gen.get_next() as next_id:
12801280
await self.db_pool.runInteraction(
12811281
"set_room_is_public_appservice",
12821282
set_room_is_public_appservice_txn,

synapse/storage/databases/main/tags.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def add_tag_txn(txn, next_id):
210210
)
211211
self._update_revision_txn(txn, user_id, room_id, next_id)
212212

213-
with self._account_data_id_gen.get_next() as next_id:
213+
with await self._account_data_id_gen.get_next() as next_id:
214214
await self.db_pool.runInteraction("add_tag", add_tag_txn, next_id)
215215

216216
self.get_tags_for_user.invalidate((user_id,))
@@ -232,7 +232,7 @@ def remove_tag_txn(txn, next_id):
232232
txn.execute(sql, (user_id, room_id, tag))
233233
self._update_revision_txn(txn, user_id, room_id, next_id)
234234

235-
with self._account_data_id_gen.get_next() as next_id:
235+
with await self._account_data_id_gen.get_next() as next_id:
236236
await self.db_pool.runInteraction("remove_tag", remove_tag_txn, next_id)
237237

238238
self.get_tags_for_user.invalidate((user_id,))

synapse/storage/util/id_generators.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ class StreamIdGenerator(object):
8080
upwards, -1 to grow downwards.
8181
8282
Usage:
83-
with stream_id_gen.get_next() as stream_id:
83+
with await stream_id_gen.get_next() as stream_id:
8484
# ... persist event ...
8585
"""
8686

@@ -95,10 +95,10 @@ def __init__(self, db_conn, table, column, extra_tables=[], step=1):
9595
)
9696
self._unfinished_ids = deque() # type: Deque[int]
9797

98-
def get_next(self):
98+
async def get_next(self):
9999
"""
100100
Usage:
101-
with stream_id_gen.get_next() as stream_id:
101+
with await stream_id_gen.get_next() as stream_id:
102102
# ... persist event ...
103103
"""
104104
with self._lock:
@@ -117,10 +117,10 @@ def manager():
117117

118118
return manager()
119119

120-
def get_next_mult(self, n):
120+
async def get_next_mult(self, n):
121121
"""
122122
Usage:
123-
with stream_id_gen.get_next(n) as stream_ids:
123+
with await stream_id_gen.get_next(n) as stream_ids:
124124
# ... persist events ...
125125
"""
126126
with self._lock:

0 commit comments

Comments
 (0)