mirror of
https://github.com/element-hq/synapse.git
synced 2026-11-04 17:47:28 +00:00
The queries of the per-room sync loop, on the native Postgres driver, each a port of the store method it is named after. A `SyncReader` is made per request and borrows a pooled connection for one group of statements at a time, so that a sync worker with hundreds of requests in flight does not pin a connection per room; a group that needs one snapshot runs in a `REPEATABLE READ READ ONLY` transaction. State groups are loaded whole, with the recursive CTE sent as one simple query per batch, and cached as full maps. The caches that copy a `@cached` function (rooms for user, room summary, partial state rooms, erased users, retention policies, event to state group, unread counts) live on the Rust store and are attached to the Python cache each names by the new `RustWorkerStore`, which also takes over building the Rust store. Unread counts are invalidated by room as well as by room and user, as the Python tree cache is. `tests/storage/test_sync_store.py` runs every query and the Python method against the same database, with multi-writer tokens, redactions of every kind, and the summary rotation of the unread counts. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0194eNQP5weBtVMg8NKtc6VU