mirror of
https://github.com/element-hq/synapse.git
synced 2026-11-04 13:28:04 +00:00
After `batch_persist_unpersisted_contexts`, an event's `EventContext` only had state group IDs, so every read of the state before the event went to the state store. For a new room that was eight state-group reads per `/createRoom`: six from `deduplicate_state_event`, one from the create-event check in `persist_and_notify_client_events`, and one from the persister working out the new current state. Keep the state map the batch was built from on the `EventContext`, as a private attribute that `get_prev_state_ids` prefers and that is not serialized, so a context sent to another worker reads the state group as before. A context that arrives with a state group of its own, which the batch then replaces, drops its map. `store_state_deltas_for_batched` also prefills the state group caches with the state after the last event of the batch, through the helper `store_state_group` now shares. On the trial harness (SQLite) a plain room drops from 35 to 27 database interactions, and `/createRoom` from 17 to 10 database transactions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PVLsNh6akt4ifEizY4D1ta