synapse/tests/handlers
Andrew Morgan 8bcfc2eaad
Be smarter about which hosts to send presence to when processing room joins (#9402)
This PR attempts to eliminate unnecessary presence sending work when your local server joins a room, or when a remote server joins a room your server is participating in by processing state deltas in chunks rather than individually.

---

When your server joins a room for the first time, it requests the historical state as well. This chunk of new state is passed to the presence handler which, after filtering that state down to only membership joins, will send presence updates to homeservers for each join processed.

It turns out that we were being a bit naive and processing each event individually, and sending out presence updates for every one of those joins. Even if many different joins were users on the same server (hello IRC bridges), we'd send presence to that same homeserver for every remote user join we saw.

This PR attempts to deduplicate all of that by processing the entire batch of state deltas at once, instead of only doing each join individually. We process the joins and note down which servers need which presence:

* If it was a local user join, send that user's latest presence to all servers in the room
* If it was a remote user join, send the presence for all local users in the room to that homeserver

We deduplicate by inserting all of those pending updates into a dictionary of the form:

```
{
  server_name1: {presence_update1, ...},
  server_name2: {presence_update1, presence_update2, ...}
}
```

Only after building this dict do we then start sending out presence updates.
2021-02-19 11:37:29 +00:00
..
__init__.py Reference Matrix Home Server 2014-08-12 15:10:52 +01:00
test_admin.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_appservice.py Convert additional test-cases to homeserver test case. (#9396) 2021-02-16 08:04:15 -05:00
test_auth.py Convert some test cases to use HomeserverTestCase. (#9377) 2021-02-11 10:29:09 -05:00
test_cas.py Combine the CAS & SAML implementations for required attributes. (#9326) 2021-02-11 10:05:15 -05:00
test_device.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_directory.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_e2e_keys.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_e2e_room_keys.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_federation.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_message.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_oidc.py Support for form_post in OIDC responses (#9376) 2021-02-17 10:15:14 +00:00
test_password_providers.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_presence.py Be smarter about which hosts to send presence to when processing room joins (#9402) 2021-02-19 11:37:29 +00:00
test_profile.py Add configs to make profile data more private (#9203) 2021-02-19 09:50:41 +00:00
test_register.py Remove the deprecated Handlers object (#8494) 2020-10-09 07:24:34 -04:00
test_saml.py Combine the CAS & SAML implementations for required attributes. (#9326) 2021-02-11 10:05:15 -05:00
test_stats.py Rename 'populate_stats_process_rooms_2' background job back to 'populate_stats_process_rooms' again (#8243) 2020-09-08 11:05:59 +01:00
test_sync.py Add admin API for logging in as a user (#8617) 2020-11-17 10:51:25 +00:00
test_typing.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_user_directory.py Add a config option to prioritise local users in user directory search results (#9383) 2021-02-19 11:02:03 +00:00