mirror of
https://github.com/element-hq/synapse.git
synced 2026-11-04 17:47:28 +00:00
Motivated by work on MSC4354, because the sticky events MSC specs that `received_ts` is used to calculate the start of an event's stickiness. (It would therefore be convenient to have it available as part of event metadata, so an event can expose a cheap helper method to check if it is sticky.) This commit adds `received_ts` into the `event.internal_metadata` struct, alongside `stream_ordering`. I conceptually treat it as a sibling to `stream_ordering` and populate it in all the same places where `stream_ordering` is populated. Because this needs `received_ts` to be added to the HTTP replication response for event persistence, I also add a temporary compatibility measure that keeps rolling worker upgrades working during this transition. I intend to remove the compatibility code in the next release. I have manually tested that ``` SYNAPSE_POSTGRES=1 SYNAPSE_POSTGRES_USER=postgres SYNAPSE_POSTGRES_HOST=localhost SYNAPSE_POSTGRES_PASSWORD=postgres poetry run trial -j 6 tests.replication.test_sharded_event_persister ``` fails only when both the compatibility code is removed and the `"received_ts"` key is commented out in the response (to omit it). The compatibility code causes the test to pass even when `"received_ts"` is commented out. --------- Signed-off-by: Olivier 'reivilibre <oliverw@matrix.org>