synapse/tests
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
..
api Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
app Remove spurious "SynapseRequest" result from `make_request" 2020-12-15 22:35:40 +00:00
appservice Add ability for access tokens to belong to one user but grant access to another user. (#8616) 2020-10-29 15:58:44 +00:00
config Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
crypto Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
events Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
federation Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
handlers Be smarter about which hosts to send presence to when processing room joins (#9402) 2021-02-19 11:37:29 +00:00
http Reduce the memory usage of previewing media files. (#9421) 2021-02-18 09:01:29 -05:00
logging Various clean-ups to the logging context code (#8935) 2020-12-14 14:19:47 -05:00
module_api Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
push Handle empty rooms when generating email notifications. (#9257) 2021-02-04 10:18:25 -05:00
replication Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
rest Parse ui_auth.session_timeout as a duration (instead of treating it as ms) (#9426) 2021-02-18 09:18:14 -05:00
scripts Port register_new_matrix_user to Python 3 and add tests (#4085) 2018-10-26 22:05:22 +11:00
server_notices Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
state Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
storage Add the shadow-banning status to the display user admin API. (#9400) 2021-02-17 15:19:23 -05:00
test_utils Fix bugs in handling clientRedirectUrl, and improve OIDC tests (#9127, #9128) 2021-01-18 14:52:49 +00:00
util Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
__init__.py Move patch_inline_callbacks into synapse/ 2019-10-10 10:53:06 +01:00
server.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_distributor.py Run black. 2018-08-10 23:54:09 +10:00
test_event_auth.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_federation.py Various clean-ups to the logging context code (#8935) 2020-12-14 14:19:47 -05:00
test_mau.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_metrics.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_phone_home.py Allow background tasks to be run on a separate worker. (#8369) 2020-10-02 08:23:15 -04:00
test_preview.py Handle additional errors when previewing URLs. (#9333) 2021-02-08 12:33:30 -05:00
test_server.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
test_state.py Add admin API for logging in as a user (#8617) 2020-11-17 10:51:25 +00:00
test_terms_auth.py Remove spurious "SynapseRequest" result from `make_request" 2020-12-15 22:35:40 +00:00
test_test_utils.py Run black. 2018-08-10 23:54:09 +10:00
test_types.py Add basic domain validation for DomainSpecificString.is_valid. (#9071) 2021-01-13 07:05:16 -05:00
test_visibility.py Stop sub-classing object (#8249) 2020-09-04 06:54:56 -04:00
unittest.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00
utils.py Update black, and run auto formatting over the codebase (#9381) 2021-02-16 22:32:34 +00:00