mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-07-23 17:40:36 -04:00
Faster joins: persist to database (#12012)
When we get a partial_state response from send_join, store information in the database about it: * store a record about the room as a whole having partial state, and stash the list of member servers too. * flag the join event itself as having partial state * also, for any new events whose prev-events are partial-stated, note that they will *also* be partial-stated. We don't yet make any attempt to interpret this data, so API calls (and a bunch of other things) are just going to get incorrect data.
This commit is contained in:
parent
4ccc2d09aa
commit
e2e1d90a5e
12 changed files with 297 additions and 32 deletions
|
@ -2145,6 +2145,14 @@ class PersistEventsStore:
|
|||
state_groups = {}
|
||||
for event, context in events_and_contexts:
|
||||
if event.internal_metadata.is_outlier():
|
||||
# double-check that we don't have any events that claim to be outliers
|
||||
# *and* have partial state (which is meaningless: we should have no
|
||||
# state at all for an outlier)
|
||||
if context.partial_state:
|
||||
raise ValueError(
|
||||
"Outlier event %s claims to have partial state", event.event_id
|
||||
)
|
||||
|
||||
continue
|
||||
|
||||
# if the event was rejected, just give it the same state as its
|
||||
|
@ -2155,6 +2163,23 @@ class PersistEventsStore:
|
|||
|
||||
state_groups[event.event_id] = context.state_group
|
||||
|
||||
# if we have partial state for these events, record the fact. (This happens
|
||||
# here rather than in _store_event_txn because it also needs to happen when
|
||||
# we de-outlier an event.)
|
||||
self.db_pool.simple_insert_many_txn(
|
||||
txn,
|
||||
table="partial_state_events",
|
||||
keys=("room_id", "event_id"),
|
||||
values=[
|
||||
(
|
||||
event.room_id,
|
||||
event.event_id,
|
||||
)
|
||||
for event, ctx in events_and_contexts
|
||||
if ctx.partial_state
|
||||
],
|
||||
)
|
||||
|
||||
self.db_pool.simple_upsert_many_txn(
|
||||
txn,
|
||||
table="event_to_state_groups",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue