mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-02 14:06:02 -04:00
Faster remote room joins: stream the un-partial-stating of events over replication. [rei:frrj/streams/unpsr] (#14545)
This commit is contained in:
parent
24a97b3e71
commit
fb60cb16fe
8 changed files with 204 additions and 10 deletions
|
@ -42,7 +42,10 @@ from synapse.replication.tcp.streams._base import (
|
|||
)
|
||||
from synapse.replication.tcp.streams.events import EventsStream
|
||||
from synapse.replication.tcp.streams.federation import FederationStream
|
||||
from synapse.replication.tcp.streams.partial_state import UnPartialStatedRoomStream
|
||||
from synapse.replication.tcp.streams.partial_state import (
|
||||
UnPartialStatedEventStream,
|
||||
UnPartialStatedRoomStream,
|
||||
)
|
||||
|
||||
STREAMS_MAP = {
|
||||
stream.NAME: stream
|
||||
|
@ -63,6 +66,7 @@ STREAMS_MAP = {
|
|||
AccountDataStream,
|
||||
UserSignatureStream,
|
||||
UnPartialStatedRoomStream,
|
||||
UnPartialStatedEventStream,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -83,4 +87,5 @@ __all__ = [
|
|||
"AccountDataStream",
|
||||
"UserSignatureStream",
|
||||
"UnPartialStatedRoomStream",
|
||||
"UnPartialStatedEventStream",
|
||||
]
|
||||
|
|
|
@ -46,3 +46,31 @@ class UnPartialStatedRoomStream(Stream):
|
|||
current_token_without_instance(store.get_un_partial_stated_rooms_token),
|
||||
store.get_un_partial_stated_rooms_from_stream,
|
||||
)
|
||||
|
||||
|
||||
@attr.s(slots=True, frozen=True, auto_attribs=True)
|
||||
class UnPartialStatedEventStreamRow:
|
||||
# ID of the event that has been un-partial-stated.
|
||||
event_id: str
|
||||
|
||||
# True iff the rejection status of the event changed as a result of being
|
||||
# un-partial-stated.
|
||||
rejection_status_changed: bool
|
||||
|
||||
|
||||
class UnPartialStatedEventStream(Stream):
|
||||
"""
|
||||
Stream to notify about events becoming un-partial-stated.
|
||||
"""
|
||||
|
||||
NAME = "un_partial_stated_event"
|
||||
ROW_TYPE = UnPartialStatedEventStreamRow
|
||||
|
||||
def __init__(self, hs: "HomeServer"):
|
||||
store = hs.get_datastores().main
|
||||
super().__init__(
|
||||
hs.get_instance_name(),
|
||||
# TODO(faster_joins, multiple writers): we need to account for instance names
|
||||
current_token_without_instance(store.get_un_partial_stated_events_token),
|
||||
store.get_un_partial_stated_events_from_stream,
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue