synapse/synapse/storage
Erik Johnston 3943d2fde7
Fix up logic for delaying sending read receipts over federation. (#17933)
For context of why we delay read receipts, see
https://github.com/matrix-org/synapse/issues/4730.

Element Web often sends read receipts in quick succession, if it reloads
the timeline it'll send one for the last message in the old timeline and
again for the last message in the new timeline. This caused remote users
to see a read receipt for older messages come through quickly, but then
the second read receipt taking a while to arrive for the most recent
message.

There are two things going on in this PR:
1. There was a mismatch between seconds and milliseconds, and so we
ended up delaying for far longer than intended.
2. Changing the logic to reuse the `DestinationWakeupQueue` (used for
presence)

The changes in logic are:
- Treat the first receipt and subsequent receipts in a room in the same
way
- Whitelist certain classes of receipts to never delay being sent, i.e.
receipts in small rooms, receipts for events that were sent within the
last 60s, and sending receipts to the event sender's server.
- The maximum delay a receipt can have before being sent to a server is
30s, and we'll send out receipts to remotes at least at 50Hz (by
default)

The upshot is that this should make receipts feel more snappy over
federation.

This new logic should send roughly between 10%–20% of transactions
immediately on matrix.org.
2024-11-25 18:12:33 +00:00
..
controllers Fix MSC4222 returning full state (#17915) 2024-11-08 16:41:24 +00:00
databases Fix up logic for delaying sending read receipts over federation. (#17933) 2024-11-25 18:12:33 +00:00
engines Sliding sync: Store the per-connection state in the database. (#17599) 2024-08-29 16:26:58 +01:00
schema Fix incorrect comment in new schema delta (#17936) 2024-11-20 17:12:17 +00:00
util Fix sync waiting for an invalid token from the "future" (#17386) 2024-07-02 12:39:49 +01:00
__init__.py Correctly mention previous copyright (#16820) 2024-01-23 11:26:48 +00:00
_base.py Sliding Sync: Make sure we get up-to-date information from get_sliding_sync_rooms_for_user(...) (#17692) 2024-09-11 12:13:54 -05:00
background_updates.py Sliding Sync: Shortcut for checking if certain background updates have completed (#17724) 2024-09-18 13:12:14 -05:00
database.py Sliding sync: Store the per-connection state in the database. (#17599) 2024-08-29 16:26:58 +01:00
keys.py Correctly mention previous copyright (#16820) 2024-01-23 11:26:48 +00:00
prepare_database.py Format files with Ruff (#17643) 2024-09-02 12:39:04 +01:00
push_rule.py Correctly mention previous copyright (#16820) 2024-01-23 11:26:48 +00:00
roommember.py Sliding Sync: Move filters tests to rest layer (#17703) 2024-09-12 15:27:03 -05:00
types.py Bump black from 23.10.1 to 24.2.0 (#16936) 2024-03-13 16:46:44 +00:00