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

Commit e19de43

Browse files
authored
Convert streams to async. (#8014)
1 parent 916cf2d commit e19de43

File tree

10 files changed

+27
-30
lines changed

10 files changed

+27
-30
lines changed

changelog.d/8014.misc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Convert various parts of the codebase to async/await.

synapse/handlers/initial_sync.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ async def _snapshot_all_rooms(
109109

110110
rooms_ret = []
111111

112-
now_token = await self.hs.get_event_sources().get_current_token()
112+
now_token = self.hs.get_event_sources().get_current_token()
113113

114114
presence_stream = self.hs.get_event_sources().sources["presence"]
115115
pagination_config = PaginationConfig(from_token=now_token)
@@ -360,7 +360,7 @@ async def _room_initial_sync_joined(
360360
current_state.values(), time_now
361361
)
362362

363-
now_token = await self.hs.get_event_sources().get_current_token()
363+
now_token = self.hs.get_event_sources().get_current_token()
364364

365365
limit = pagin_config.limit if pagin_config else None
366366
if limit is None:

synapse/handlers/pagination.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,7 @@ async def get_messages(
309309
room_token = pagin_config.from_token.room_key
310310
else:
311311
pagin_config.from_token = (
312-
await self.hs.get_event_sources().get_current_token_for_pagination()
312+
self.hs.get_event_sources().get_current_token_for_pagination()
313313
)
314314
room_token = pagin_config.from_token.room_key
315315

synapse/handlers/room.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import math
2323
import string
2424
from collections import OrderedDict
25-
from typing import Optional, Tuple
25+
from typing import Awaitable, Optional, Tuple
2626

2727
from synapse.api.constants import (
2828
EventTypes,
@@ -1041,7 +1041,7 @@ async def get_new_events(
10411041
):
10421042
# We just ignore the key for now.
10431043

1044-
to_key = await self.get_current_key()
1044+
to_key = self.get_current_key()
10451045

10461046
from_token = RoomStreamToken.parse(from_key)
10471047
if from_token.topological:
@@ -1081,10 +1081,10 @@ async def get_new_events(
10811081

10821082
return (events, end_key)
10831083

1084-
def get_current_key(self):
1085-
return self.store.get_room_events_max_id()
1084+
def get_current_key(self) -> str:
1085+
return "s%d" % (self.store.get_room_max_stream_ordering(),)
10861086

1087-
def get_current_key_for_room(self, room_id):
1087+
def get_current_key_for_room(self, room_id: str) -> Awaitable[str]:
10881088
return self.store.get_room_events_max_id(room_id)
10891089

10901090

synapse/handlers/search.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ async def search(self, user, content, batch=None):
340340
# If client has asked for "context" for each event (i.e. some surrounding
341341
# events and state), fetch that
342342
if event_context is not None:
343-
now_token = await self.hs.get_event_sources().get_current_token()
343+
now_token = self.hs.get_event_sources().get_current_token()
344344

345345
contexts = {}
346346
for event in allowed_events:

synapse/handlers/sync.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -961,7 +961,7 @@ async def generate_sync_result(
961961
# this is due to some of the underlying streams not supporting the ability
962962
# to query up to a given point.
963963
# Always use the `now_token` in `SyncResultBuilder`
964-
now_token = await self.event_sources.get_current_token()
964+
now_token = self.event_sources.get_current_token()
965965

966966
logger.debug(
967967
"Calculating sync response for %r between %s and %s",

synapse/notifier.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ async def wait_for_events(
320320
"""
321321
user_stream = self.user_to_user_stream.get(user_id)
322322
if user_stream is None:
323-
current_token = await self.event_sources.get_current_token()
323+
current_token = self.event_sources.get_current_token()
324324
if room_ids is None:
325325
room_ids = await self.store.get_rooms_for_user(user_id)
326326
user_stream = _NotifierUserStream(
@@ -397,7 +397,7 @@ async def get_events_for(
397397
"""
398398
from_token = pagination_config.from_token
399399
if not from_token:
400-
from_token = await self.event_sources.get_current_token()
400+
from_token = self.event_sources.get_current_token()
401401

402402
limit = pagination_config.limit
403403

synapse/storage/data_stores/main/stream.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import abc
4040
import logging
4141
from collections import namedtuple
42+
from typing import Optional
4243

4344
from twisted.internet import defer
4445

@@ -557,19 +558,18 @@ def _f(txn):
557558

558559
return self.db.runInteraction("get_room_event_before_stream_ordering", _f)
559560

560-
@defer.inlineCallbacks
561-
def get_room_events_max_id(self, room_id=None):
561+
async def get_room_events_max_id(self, room_id: Optional[str] = None) -> str:
562562
"""Returns the current token for rooms stream.
563563
564564
By default, it returns the current global stream token. Specifying a
565565
`room_id` causes it to return the current room specific topological
566566
token.
567567
"""
568-
token = yield self.get_room_max_stream_ordering()
568+
token = self.get_room_max_stream_ordering()
569569
if room_id is None:
570570
return "s%d" % (token,)
571571
else:
572-
topo = yield self.db.runInteraction(
572+
topo = await self.db.runInteraction(
573573
"_get_max_topological_txn", self._get_max_topological_txn, room_id
574574
)
575575
return "t%d-%d" % (topo, token)

synapse/streams/events.py

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515

1616
from typing import Any, Dict
1717

18-
from twisted.internet import defer
19-
2018
from synapse.handlers.account_data import AccountDataEventSource
2119
from synapse.handlers.presence import PresenceEventSource
2220
from synapse.handlers.receipts import ReceiptEventSource
@@ -40,39 +38,37 @@ def __init__(self, hs):
4038
} # type: Dict[str, Any]
4139
self.store = hs.get_datastore()
4240

43-
@defer.inlineCallbacks
44-
def get_current_token(self):
41+
def get_current_token(self) -> StreamToken:
4542
push_rules_key, _ = self.store.get_push_rules_stream_token()
4643
to_device_key = self.store.get_to_device_stream_token()
4744
device_list_key = self.store.get_device_stream_token()
4845
groups_key = self.store.get_group_stream_token()
4946

5047
token = StreamToken(
51-
room_key=(yield self.sources["room"].get_current_key()),
52-
presence_key=(yield self.sources["presence"].get_current_key()),
53-
typing_key=(yield self.sources["typing"].get_current_key()),
54-
receipt_key=(yield self.sources["receipt"].get_current_key()),
55-
account_data_key=(yield self.sources["account_data"].get_current_key()),
48+
room_key=self.sources["room"].get_current_key(),
49+
presence_key=self.sources["presence"].get_current_key(),
50+
typing_key=self.sources["typing"].get_current_key(),
51+
receipt_key=self.sources["receipt"].get_current_key(),
52+
account_data_key=self.sources["account_data"].get_current_key(),
5653
push_rules_key=push_rules_key,
5754
to_device_key=to_device_key,
5855
device_list_key=device_list_key,
5956
groups_key=groups_key,
6057
)
6158
return token
6259

63-
@defer.inlineCallbacks
64-
def get_current_token_for_pagination(self):
60+
def get_current_token_for_pagination(self) -> StreamToken:
6561
"""Get the current token for a given room to be used to paginate
6662
events.
6763
6864
The returned token does not have the current values for fields other
6965
than `room`, since they are not used during pagination.
7066
7167
Returns:
72-
Deferred[StreamToken]
68+
The current token for pagination.
7369
"""
7470
token = StreamToken(
75-
room_key=(yield self.sources["room"].get_current_key()),
71+
room_key=self.sources["room"].get_current_key(),
7672
presence_key=0,
7773
typing_key=0,
7874
receipt_key=0,

tests/server_notices/test_resource_limits_server_notices.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ def test_server_notice_only_sent_once(self):
275275
self.server_notices_manager.get_or_create_notice_room_for_user(self.user_id)
276276
)
277277

278-
token = self.get_success(self.event_source.get_current_token())
278+
token = self.event_source.get_current_token()
279279
events, _ = self.get_success(
280280
self.store.get_recent_events_for_room(
281281
room_id, limit=100, end_token=token.room_key

0 commit comments

Comments
 (0)