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

Commit 937393a

Browse files
committed
Move resolve_events_with_store into StateResolutionHandler
1 parent c2bdf04 commit 937393a

File tree

2 files changed

+55
-50
lines changed

2 files changed

+55
-50
lines changed

synapse/handlers/federation.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import logging
2222
from collections.abc import Container
2323
from http import HTTPStatus
24-
from typing import Dict, Iterable, List, Optional, Sequence, Tuple, Union
24+
from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Sequence, Tuple, Union
2525

2626
import attr
2727
from signedjson.key import decode_verify_key_bytes
@@ -69,7 +69,7 @@
6969
ReplicationFederationSendEventsRestServlet,
7070
ReplicationStoreRoomOnInviteRestServlet,
7171
)
72-
from synapse.state import StateResolutionStore, resolve_events_with_store
72+
from synapse.state import StateResolutionStore
7373
from synapse.storage.databases.main.events_worker import EventRedactBehaviour
7474
from synapse.types import (
7575
JsonDict,
@@ -85,6 +85,9 @@
8585
from synapse.util.stringutils import shortstr
8686
from synapse.visibility import filter_events_for_server
8787

88+
if TYPE_CHECKING:
89+
from synapse.server import HomeServer
90+
8891
logger = logging.getLogger(__name__)
8992

9093

@@ -116,7 +119,7 @@ class FederationHandler(BaseHandler):
116119
rooms.
117120
"""
118121

119-
def __init__(self, hs):
122+
def __init__(self, hs: "HomeServer"):
120123
super().__init__(hs)
121124

122125
self.hs = hs
@@ -126,6 +129,7 @@ def __init__(self, hs):
126129
self.state_store = self.storage.state
127130
self.federation_client = hs.get_federation_client()
128131
self.state_handler = hs.get_state_handler()
132+
self._state_resolution_handler = hs.get_state_resolution_handler()
129133
self.server_name = hs.hostname
130134
self.keyring = hs.get_keyring()
131135
self.action_generator = hs.get_action_generator()
@@ -381,8 +385,7 @@ async def on_receive_pdu(self, origin, pdu, sent_to_us_directly=False) -> None:
381385
event_map[x.event_id] = x
382386

383387
room_version = await self.store.get_room_version_id(room_id)
384-
state_map = await resolve_events_with_store(
385-
self.clock,
388+
state_map = await self._state_resolution_handler.resolve_events_with_store(
386389
room_id,
387390
room_version,
388391
state_maps,

synapse/state/__init__.py

Lines changed: 47 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,7 @@ async def resolve_events(
449449
state_map = {ev.event_id: ev for st in state_sets for ev in st}
450450

451451
with Measure(self.clock, "state._resolve_events"):
452-
new_state = await resolve_events_with_store(
453-
self.clock,
452+
new_state = await self._state_resolution_handler.resolve_events_with_store(
454453
event.room_id,
455454
room_version,
456455
state_set_ids,
@@ -531,8 +530,7 @@ async def resolve_state_groups(
531530
state_groups_histogram.observe(len(state_groups_ids))
532531

533532
with Measure(self.clock, "state._resolve_events"):
534-
new_state = await resolve_events_with_store(
535-
self.clock,
533+
new_state = await self.resolve_events_with_store(
536534
room_id,
537535
room_version,
538536
list(state_groups_ids.values()),
@@ -552,6 +550,51 @@ async def resolve_state_groups(
552550

553551
return cache
554552

553+
def resolve_events_with_store(
554+
self,
555+
room_id: str,
556+
room_version: str,
557+
state_sets: Sequence[StateMap[str]],
558+
event_map: Optional[Dict[str, EventBase]],
559+
state_res_store: "StateResolutionStore",
560+
) -> Awaitable[StateMap[str]]:
561+
"""
562+
Args:
563+
room_id: the room we are working in
564+
565+
room_version: Version of the room
566+
567+
state_sets: List of dicts of (type, state_key) -> event_id,
568+
which are the different state groups to resolve.
569+
570+
event_map:
571+
a dict from event_id to event, for any events that we happen to
572+
have in flight (eg, those currently being persisted). This will be
573+
used as a starting point fof finding the state we need; any missing
574+
events will be requested via state_map_factory.
575+
576+
If None, all events will be fetched via state_res_store.
577+
578+
state_res_store: a place to fetch events from
579+
580+
Returns:
581+
a map from (type, state_key) to event_id.
582+
"""
583+
v = KNOWN_ROOM_VERSIONS[room_version]
584+
if v.state_res == StateResolutionVersions.V1:
585+
return v1.resolve_events_with_store(
586+
room_id, state_sets, event_map, state_res_store.get_events
587+
)
588+
else:
589+
return v2.resolve_events_with_store(
590+
self.clock,
591+
room_id,
592+
room_version,
593+
state_sets,
594+
event_map,
595+
state_res_store,
596+
)
597+
555598

556599
def _make_state_cache_entry(
557600
new_state: StateMap[str], state_groups_ids: Dict[int, StateMap[str]]
@@ -605,47 +648,6 @@ def _make_state_cache_entry(
605648
)
606649

607650

608-
def resolve_events_with_store(
609-
clock: Clock,
610-
room_id: str,
611-
room_version: str,
612-
state_sets: Sequence[StateMap[str]],
613-
event_map: Optional[Dict[str, EventBase]],
614-
state_res_store: "StateResolutionStore",
615-
) -> Awaitable[StateMap[str]]:
616-
"""
617-
Args:
618-
room_id: the room we are working in
619-
620-
room_version: Version of the room
621-
622-
state_sets: List of dicts of (type, state_key) -> event_id,
623-
which are the different state groups to resolve.
624-
625-
event_map:
626-
a dict from event_id to event, for any events that we happen to
627-
have in flight (eg, those currently being persisted). This will be
628-
used as a starting point fof finding the state we need; any missing
629-
events will be requested via state_map_factory.
630-
631-
If None, all events will be fetched via state_res_store.
632-
633-
state_res_store: a place to fetch events from
634-
635-
Returns:
636-
a map from (type, state_key) to event_id.
637-
"""
638-
v = KNOWN_ROOM_VERSIONS[room_version]
639-
if v.state_res == StateResolutionVersions.V1:
640-
return v1.resolve_events_with_store(
641-
room_id, state_sets, event_map, state_res_store.get_events
642-
)
643-
else:
644-
return v2.resolve_events_with_store(
645-
clock, room_id, room_version, state_sets, event_map, state_res_store
646-
)
647-
648-
649651
@attr.s(slots=True)
650652
class StateResolutionStore:
651653
"""Interface that allows state resolution algorithms to access the database

0 commit comments

Comments
 (0)