synapse/tests
Eric Eastwood 40bb37eb27
Stop getting missing `prev_events` after we already know their signature is invalid (#13816)
While https://github.com/matrix-org/synapse/pull/13635 stops us from doing the slow thing after we've already done it once, this PR stops us from doing one of the slow things in the first place.

Related to
 - https://github.com/matrix-org/synapse/issues/13622
    - https://github.com/matrix-org/synapse/pull/13635
 - https://github.com/matrix-org/synapse/issues/13676

Part of https://github.com/matrix-org/synapse/issues/13356

Follow-up to https://github.com/matrix-org/synapse/pull/13815 which tracks event signature failures.

With this PR, we avoid the call to the costly `_get_state_ids_after_missing_prev_event` because the signature failure will count as an attempt before and we filter events based on the backoff before calling `_get_state_ids_after_missing_prev_event` now.

For example, this will save us 156s out of the 185s total that this `matrix.org` `/messages` request. If you want to see the full Jaeger trace of this, you can drag and drop this `trace.json` into your own Jaeger, https://gist.github.com/MadLittleMods/4b12d0d0afe88c2f65ffcc907306b761

To explain this exact scenario around `/messages` -> backfill, we call `/backfill` and first check the signatures of the 100 events. We see bad signature for `$luA4l7QHhf_jadH3mI-AyFqho0U2Q-IXXUbGSMq6h6M` and `$zuOn2Rd2vsC7SUia3Hp3r6JSkSFKcc5j3QTTqW_0jDw` (both member events). Then we process the 98 events remaining that have valid signatures but one of the events references `$luA4l7QHhf_jadH3mI-AyFqho0U2Q-IXXUbGSMq6h6M` as a `prev_event`. So we have to do the whole `_get_state_ids_after_missing_prev_event` rigmarole which pulls in those same events which fail again because the signatures are still invalid.

 - `backfill`
    - `outgoing-federation-request` `/backfill`
    - `_check_sigs_and_hash_and_fetch`
       - `_check_sigs_and_hash_and_fetch_one` for each event received over backfill
          -  `$luA4l7QHhf_jadH3mI-AyFqho0U2Q-IXXUbGSMq6h6M` fails with `Signature on retrieved event was invalid.`: `unable to verify signature for sender domain xxx: 401: Failed to find any key to satisfy: _FetchKeyRequest(...)`
          -  `$zuOn2Rd2vsC7SUia3Hp3r6JSkSFKcc5j3QTTqW_0jDw` fails with `Signature on retrieved event was invalid.`: `unable to verify signature for sender domain xxx: 401: Failed to find any key to satisfy: _FetchKeyRequest(...)`
   - `_process_pulled_events`
      - `_process_pulled_event` for each validated event
         -  Event `$Q0iMdqtz3IJYfZQU2Xk2WjB5NDF8Gg8cFSYYyKQgKJ0` references `$luA4l7QHhf_jadH3mI-AyFqho0U2Q-IXXUbGSMq6h6M` as a `prev_event` which is missing so we try to get it
            - `_get_state_ids_after_missing_prev_event`
               - `outgoing-federation-request` `/state_ids`
               -  `get_pdu` for `$luA4l7QHhf_jadH3mI-AyFqho0U2Q-IXXUbGSMq6h6M` which fails the signature check again
               -  `get_pdu` for `$zuOn2Rd2vsC7SUia3Hp3r6JSkSFKcc5j3QTTqW_0jDw` which fails the signature check
2022-10-15 00:36:49 -05:00
..
api `synapse.api.auth.Auth` cleanup: make permission-related methods use `Requester` instead of the `UserID` (#13024) 2022-08-22 14:17:59 +01:00
app Remove configuration options for direct TCP replication. (#13647) 2022-09-06 07:50:02 +00:00
appservice Send the appservice access token as a header. (#13996) 2022-10-04 07:06:41 -04:00
config Reload cache factors from disk on SIGHUP (#12673) 2022-05-11 13:43:22 +00:00
crypto Remove direct refeferences to PyNaCl (use signedjson instead). (#12902) 2022-06-01 07:32:35 -04:00
events Register homeserver modules when creating test homeserver (#13558) 2022-08-19 16:52:20 +01:00
federation Always close _all_ `ijson` coroutines, even if doing so raises Exceptions (#14065) 2022-10-06 18:17:50 +00:00
handlers Stop getting missing `prev_events` after we already know their signature is invalid (#13816) 2022-10-15 00:36:49 -05:00
http Making parse_server_name more consistent (#14007) 2022-10-11 12:42:11 +00:00
logging Allow use of both `@trace` and `@tag_args` stacked on the same function (#13453) 2022-08-09 14:32:33 -05:00
module_api Reduce the number of tests using TCP replication. (#13543) 2022-08-19 08:25:24 -04:00
push Remove the experimental implementation of MSC3772. (#14094) 2022-10-12 06:26:39 -04:00
replication Track notification counts per thread (implement MSC3773). (#13776) 2022-10-04 09:47:04 -04:00
rest Do not allow a None-limit on PaginationConfig. (#14146) 2022-10-14 12:30:05 +00:00
scripts Add some type hints to tests files (#12833) 2022-05-23 11:23:26 +00:00
server_notices Fix that sending server notices fail if avatar is `None` (#13566) 2022-08-23 09:48:35 +01:00
state Fix typechecks against twisted trunk (#13061) 2022-06-15 11:49:58 +01:00
storage Stop getting missing `prev_events` after we already know their signature is invalid (#13816) 2022-10-15 00:36:49 -05:00
test_utils Rename storage classes (#12913) 2022-05-31 12:17:50 +00:00
util Don't require `setuptools_rust` at runtime (#13952) 2022-09-29 20:16:08 +00:00
__init__.py Remove redundant "coding: utf-8" lines (#9786) 2021-04-14 15:34:27 +01:00
server.py Register homeserver modules when creating test homeserver (#13558) 2022-08-19 16:52:20 +01:00
test_distributor.py Replace assertEquals and friends with non-deprecated versions. (#12092) 2022-02-28 07:12:29 -05:00
test_event_auth.py Rename the `EventFormatVersions` enum values so that they line up with room version numbers. (#13706) 2022-09-07 11:08:20 +01:00
test_federation.py Track when the pulled event signature fails (#13815) 2022-10-03 14:53:29 -05:00
test_mau.py Remove remaining bits of groups code. (#12936) 2022-06-01 09:41:25 -04:00
test_metrics.py Add experimental configuration option to allow disabling legacy Prometheus metric names. (#13540) 2022-08-24 11:35:54 +00:00
test_phone_home.py Share some metrics between the Prometheus exporter and the phone home stats (#13671) 2022-09-05 10:26:43 +00:00
test_rust.py Add a stub Rust crate (#12595) 2022-09-06 19:01:37 +01:00
test_server.py Remove configuration options for direct TCP replication. (#13647) 2022-09-06 07:50:02 +00:00
test_state.py Faster room joins: avoid blocking when pulling events with missing prevs (#13355) 2022-07-26 12:39:23 +01:00
test_terms_auth.py Use literals in place of `HTTPStatus` constants in tests (#13463) 2022-08-05 16:59:09 +02:00
test_test_utils.py Replace assertEquals and friends with non-deprecated versions. (#12092) 2022-02-28 07:12:29 -05:00
test_types.py Fix error in `is_mine_id` when encountering a malformed ID (#13746) 2022-09-08 15:54:36 +01:00
test_visibility.py Rename test case method to `add_hashes_and_signatures_from_other_server` (#13255) 2022-07-12 18:46:32 +00:00
unittest.py Persist CreateRoom events to DB in a batch (#13800) 2022-09-28 10:11:48 +00:00
utils.py Update mypy and mypy-zope, attempt 3 (#13993) 2022-09-30 17:36:28 +01:00