mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-05 12:34:58 -04:00
Bundle aggregations outside of the serialization method. (#11612)
This makes the serialization of events synchronous (and it no longer access the database), but we must manually calculate and provide the bundled aggregations. Overall this should cause no change in behavior, but is prep work for other improvements.
This commit is contained in:
parent
6c68e874b1
commit
6bf81a7a61
17 changed files with 248 additions and 155 deletions
|
@ -17,7 +17,6 @@ from collections import defaultdict
|
|||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
Any,
|
||||
Awaitable,
|
||||
Callable,
|
||||
Dict,
|
||||
Iterable,
|
||||
|
@ -395,7 +394,7 @@ class SyncRestServlet(RestServlet):
|
|||
"""
|
||||
invited = {}
|
||||
for room in rooms:
|
||||
invite = await self._event_serializer.serialize_event(
|
||||
invite = self._event_serializer.serialize_event(
|
||||
room.invite,
|
||||
time_now,
|
||||
token_id=token_id,
|
||||
|
@ -432,7 +431,7 @@ class SyncRestServlet(RestServlet):
|
|||
"""
|
||||
knocked = {}
|
||||
for room in rooms:
|
||||
knock = await self._event_serializer.serialize_event(
|
||||
knock = self._event_serializer.serialize_event(
|
||||
room.knock,
|
||||
time_now,
|
||||
token_id=token_id,
|
||||
|
@ -525,21 +524,14 @@ class SyncRestServlet(RestServlet):
|
|||
The room, encoded in our response format
|
||||
"""
|
||||
|
||||
def serialize(events: Iterable[EventBase]) -> Awaitable[List[JsonDict]]:
|
||||
def serialize(
|
||||
events: Iterable[EventBase],
|
||||
aggregations: Optional[Dict[str, Dict[str, Any]]] = None,
|
||||
) -> List[JsonDict]:
|
||||
return self._event_serializer.serialize_events(
|
||||
events,
|
||||
time_now=time_now,
|
||||
# Don't bother to bundle aggregations if the timeline is unlimited,
|
||||
# as clients will have all the necessary information.
|
||||
# bundle_aggregations=room.timeline.limited,
|
||||
#
|
||||
# richvdh 2021-12-15: disable this temporarily as it has too high an
|
||||
# overhead for initialsyncs. We need to figure out a way that the
|
||||
# bundling can be done *before* the events are stored in the
|
||||
# SyncResponseCache so that this part can be synchronous.
|
||||
#
|
||||
# Ensure to re-enable the test at tests/rest/client/test_relations.py::RelationsTestCase.test_bundled_aggregations.
|
||||
bundle_aggregations=False,
|
||||
bundle_aggregations=aggregations,
|
||||
token_id=token_id,
|
||||
event_format=event_formatter,
|
||||
only_event_fields=only_fields,
|
||||
|
@ -561,8 +553,21 @@ class SyncRestServlet(RestServlet):
|
|||
event.room_id,
|
||||
)
|
||||
|
||||
serialized_state = await serialize(state_events)
|
||||
serialized_timeline = await serialize(timeline_events)
|
||||
serialized_state = serialize(state_events)
|
||||
# Don't bother to bundle aggregations if the timeline is unlimited,
|
||||
# as clients will have all the necessary information.
|
||||
# bundle_aggregations=room.timeline.limited,
|
||||
#
|
||||
# richvdh 2021-12-15: disable this temporarily as it has too high an
|
||||
# overhead for initialsyncs. We need to figure out a way that the
|
||||
# bundling can be done *before* the events are stored in the
|
||||
# SyncResponseCache so that this part can be synchronous.
|
||||
#
|
||||
# Ensure to re-enable the test at tests/rest/client/test_relations.py::RelationsTestCase.test_bundled_aggregations.
|
||||
# if room.timeline.limited:
|
||||
# aggregations = await self.store.get_bundled_aggregations(timeline_events)
|
||||
aggregations = None
|
||||
serialized_timeline = serialize(timeline_events, aggregations)
|
||||
|
||||
account_data = room.account_data
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue