mirror of
https://github.com/element-hq/synapse.git
synced 2026-10-24 21:33:40 +00:00
Part of: MSC4354 (Experimental Feature tracking issue #19409) Follows: #20165 (Sticky Event federation backlog + catch-up transactions) The MSC says that we need to tell a newly-joining server about all of our sticky events (yes, even the ones before the server joined the room). This PR introduces the mechanism, building on the 'Sticky Event backlog' mechanism introduced in #20165, to make that happen. Most of the logic is taken from the original Sticky Events PR #18968, but the Sticky Event backlog system did not exist back then. (The benefit of having the persistent Sticky Event backlog is that we don't need to rely on the federation senders not crashing to make sure we get around to sending the Sticky Events out.) - Add NEW_SERVER_JOINED replication command. (This is a cross-worker 'wake-up call' to check for a sticky event backlog) We send it when persisting a state change that causes a new server to be in the room. We handle it by waking up federation senders for the destination, including checking the sticky event backlog tables. - When a server newly joins a room, we insert a sticky event backlog row for that server, if there are any Sticky Events needing to be sent. --------- Signed-off-by: Olivier 'reivilibre <oliverw@matrix.org>