Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

When loading current ids, sort by stream_id to avoid incorrect overwrite and avoid errors caused by sorting alphabetical instance name which can be null #13585

Merged
merged 4 commits into from
Aug 24, 2022

Conversation

MadLittleMods
Copy link
Contributor

@MadLittleMods MadLittleMods commented Aug 22, 2022

When loading current ids, sort by stream ID so that we don't want to overwrite the current_position of an instance to a lower stream ID than we're actually at (discussion). Previously, it sorted alphabetically by instance name which can be null and throw errors but more importantly, accomplishes nothing.

Discovered because my local Synapse was throwing an error on startup:

$ poetry run synapse_homeserver --config-path homeserver.yaml
****************************************************************
 Error during initialisation:
    '<' not supported between instances of 'NoneType' and 'str'
 There may be more information in the logs.
****************************************************************

Somehow my database ended up looking like the following, notice the instance_name is null in the db, and we can't sort NoneType things. Another question is why do we see the instance_name as null sometimes instead of master in monolith mode?

$ psql synapse
synapse=# SELECT * FROM stream_positions;
   stream_name   | instance_name | stream_id
-----------------+---------------+-----------
 account_data    | master        |      1242
 events          | master        |      1787
 to_device       | master        |        58
 presence_stream | master        |    485638
 receipts        | master        |       341
 backfill        | master        |   -139106
(6 rows)
synapse=# SELECT instance_name, stream_id FROM receipts_linearized;
 instance_name | stream_id
---------------+-----------
               |       211
               |         3
               |         4
               |       212
               |       213
               |       224
               |       228
               |       164
               |       313
               |       253
               |        38
               |       321
               |       324
               |       189
               |       192
               |       193
               |       194
               |       195
               |       197
               |       198
               |       275
               |        79
               |       339
               |       340
               |        82
               |       341
               |        84
               |        85
               |        91
               |       119
homeserver.log of the error:
2022-08-22 09:53:26,361 - synapse.app._base - 207 - ERROR - main - Exception during startup
Traceback (most recent call last):
  File "/Users/eric/Documents/github/element/synapse/synapse/app/homeserver.py", line 383, in setup
    hs.setup()
  File "/Users/eric/Documents/github/element/synapse/synapse/server.py", line 308, in setup
    self.datastores = Databases(self.DATASTORE_CLASS, self)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/__init__.py", line 93, in __init__
    main = main_store_class(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/__init__.py", line 152, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/events_bg_updates.py", line 98, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/roommember.py", line 1527, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/room.py", line 1704, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/room.py", line 1242, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/room.py", line 106, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/registration.py", line 1926, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/presence.py", line 67, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/presence.py", line 48, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/transactions.py", line 73, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/state.py", line 662, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/state.py", line 80, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/state.py", line 466, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/event_federation.py", line 1711, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/media_repository.py", line 148, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/media_repository.py", line 68, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/push_rule.py", line 322, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/event_push_actions.py", line 1340, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/metrics.py", line 68, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/event_push_actions.py", line 205, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/end_to_end_keys.py", line 1147, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/search.py", line 406, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/search.py", line 125, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/account_data.py", line 65, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/push_rule.py", line 112, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/appservice.py", line 97, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/pusher.py", line 54, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/roommember.py", line 88, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/receipts.py", line 99, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/stream.py", line 369, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/client_ips.py", line 409, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/client_ips.py", line 75, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/devices.py", line 1410, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/devices.py", line 79, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/end_to_end_keys.py", line 97, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/end_to_end_keys.py", line 79, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/deviceinbox.py", line 63, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/deviceinbox.py", line 845, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/user_directory.py", line 618, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/user_directory.py", line 70, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/monthly_active_users.py", line 45, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/stats.py", line 109, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/registration.py", line 1789, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/registration.py", line 125, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/censor_events.py", line 44, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/event_federation.py", line 96, in __init__
    super().__init__(database, db_conn, hs)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/databases/main/events_worker.py", line 187, in __init__
    self._stream_id_gen = MultiWriterIdGenerator(
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/util/id_generators.py", line 368, in __init__
    self._load_current_ids(db_conn, tables)
  File "/Users/eric/Documents/github/element/synapse/synapse/storage/util/id_generators.py", line 464, in _load_current_ids
    rows.sort()
TypeError: '<' not supported between instances of 'NoneType' and 'str'

Potential cause

I might've got into this situation because of manually adding to the current_state_events and events table with https://github.com/MadLittleMods/matrix-synapse-state-dumper while looking at #13575. Not sure though, just something that could cause some db consistency issues.

Pull Request Checklist

  • Pull request is based on the develop branch
  • Pull request includes a changelog file. The entry should:
    • Be a short description of your change which makes sense to users. "Fixed a bug that prevented receiving messages from other servers." instead of "Moved X method from EventStore to EventWorkerStore.".
    • Use markdown where necessary, mostly for code blocks.
    • End with either a period (.) or an exclamation mark (!).
    • Start with a capital letter.
    • Feel free to credit yourself, by adding a sentence "Contributed by @github_username." or "Contributed by [Your Name]." to the end of the entry.
  • Pull request includes a sign off
  • Code style is correct
    (run the linters)

cur.execute(sql, (min_stream_id * self._return_factor,))

# Cast safety: this corresponds to the types returned by the query above.
rows.extend(cast(Iterable[Tuple[str, int]], cur))

# Sort so that we handle rows in order for each instance.
Copy link
Contributor Author

@MadLittleMods MadLittleMods Aug 22, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the correct order that we want? "Sort by [what] so that ... because [why]"

The previous code sorted it by instance_name because that was the first column selected in the SQL. Why do we want to do that? That code has been there since it was introduced

instance_name can be null instead of master which blows up the sort code. Another question is why do we see it as null sometimes instead of master in monolith mode?


As @richvdh pointed out, it does work to sort worker instances. But it's unclear to me why we want that or if that is intended. It feels like we might not need to sort at all.

Further discussion: https://matrix.to/#/!vcyiEtMVHIhWXcJAfl:sw1v.org/$XjldnX6z-QfMK-eAS77tEIbwN5kNA3tq8s9temUwONs?via=matrix.org&via=element.io&via=beeper.com

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(requesting review for this comment)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My best guest is the line:

self._current_positions[instance] = stream_id

Where if we didn't ensure that we handled the rows in ascending stream ID order (per-instance) then we could end up setting the current position to a lower stream ID than we ought to.

I think its enough to do rows.sort(key=lambda _, stream_id: stream_id) or similar.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the context @erikjohnston!

I don't know of the symptoms this would manifest as or underlying problems this causes but I guess this fixes some other bugs with incorrect stream_ids (all the places we use MultiWriterIdGenerator).

Probably solving some duplicate primary key database errors at the very least. And maybe larger bugs like to_device messages not sending.

@MadLittleMods MadLittleMods changed the title When loading current ids, sort by stream ID instead of alphabetical instance name When loading current ids, sort by stream ID instead of alphabetical instance name which can be null Aug 22, 2022
@MadLittleMods MadLittleMods requested a review from a team August 22, 2022 19:53
@erikjohnston erikjohnston removed the request for review from a team August 23, 2022 07:58
…lower than we're actually at

See #13585 (comment)

When loading current ids, sort by stream ID so that we don't want to overwrite
the `current_position` of an instance to a lower stream ID than we're actually at.
Previously, it sorted alphabetically by instance name which can be `null` and
throw errors but more importantly, accomplishes nothing.

Fixes the following startup error which is why I started looking into this area:

```
$ poetry run synapse_homeserver --config-path homeserver.yaml
****************************************************************
 Error during initialisation:
    '<' not supported between instances of 'NoneType' and 'str'
 There may be more information in the logs.
****************************************************************
```

Somehow my database ended up looking like the following:
```
$ psql synapse
synapse=# SELECT * FROM stream_positions;
   stream_name   | instance_name | stream_id
-----------------+---------------+-----------
 account_data    | master        |      1242
 events          | master        |      1787
 to_device       | master        |        58
 presence_stream | master        |    485638
 receipts        | master        |       341
 backfill        | master        |   -139106
(6 rows)
synapse=# SELECT instance_name, stream_id FROM receipts_linearized;
 instance_name | stream_id
---------------+-----------
               |       211
               |         3
               |         4
               |       212
               |       213
               |       224
               |       228
               |       164
               |       313
               |       253
               |        38
               |       321
               |       324
               |       189
               |       192
               |       193
               |       194
               |       195
               |       197
               |       198
               |       275
               |        79
               |       339
               |       340
               |        82
               |       341
               |        84
               |        85
               |        91
               |       119
```
@MadLittleMods MadLittleMods added the T-Defect Bugs, crashes, hangs, security vulnerabilities, or other reported issues. label Aug 23, 2022
@MadLittleMods MadLittleMods changed the title When loading current ids, sort by stream ID instead of alphabetical instance name which can be null When loading current ids, sort by stream_id to avoid incorrect overwrite and avoid errors caused by sorting alphabetical instance name which can be null Aug 24, 2022
@MadLittleMods MadLittleMods marked this pull request as ready for review August 24, 2022 01:27
@MadLittleMods MadLittleMods requested a review from a team as a code owner August 24, 2022 01:27
@MadLittleMods MadLittleMods merged commit b93bd95 into develop Aug 24, 2022
@MadLittleMods MadLittleMods deleted the madlittlemods/sort-by-stream-id branch August 24, 2022 17:53
@MadLittleMods
Copy link
Contributor Author

Thanks for the review and help @erikjohnston and @DMRobertson 👽

Fizzadar added a commit to beeper/synapse-legacy-fork that referenced this pull request Sep 15, 2022
Synapse 1.67.0 (2022-09-13)
===========================

This release removes using the deprecated direct TCP replication configuration
for workers. Server admins should use Redis instead. See the [upgrade
notes](https://matrix-org.github.io/synapse/v1.67/upgrade.html#upgrading-to-v1670).

The minimum version of `poetry` supported for managing source checkouts is now
1.2.0.

**Notice:** from the next major release (1.68.0) installing Synapse from a source
checkout will require a recent Rust compiler. Those using packages or
`pip install matrix-synapse` will not be affected. See the [upgrade
notes](https://matrix-org.github.io/synapse/v1.67/upgrade.html#upgrading-to-v1670).

**Notice:** from the next major release (1.68.0), running Synapse with a SQLite
database will require SQLite version 3.27.0 or higher. (The [current minimum
 version is SQLite 3.22.0](https://github.com/matrix-org/synapse/blob/release-v1.67/synapse/storage/engines/sqlite.py#L69-L78).)
See [matrix-org#12983](matrix-org#12983) and the [upgrade notes](https://matrix-org.github.io/synapse/v1.67/upgrade.html#upgrading-to-v1670) for more details.

No significant changes since 1.67.0rc1.

Synapse 1.67.0rc1 (2022-09-06)
==============================

Features
--------

- Support setting the registration shared secret in a file, via a new `registration_shared_secret_path` configuration option. ([\matrix-org#13614](matrix-org#13614))
- Change the default startup behaviour so that any missing "additional" configuration files (signing key, etc) are generated automatically. ([\matrix-org#13615](matrix-org#13615))
- Improve performance of sending messages in rooms with thousands of local users. ([\matrix-org#13634](matrix-org#13634))

Bugfixes
--------

- Fix a bug introduced in Synapse 1.13 where the [List Rooms admin API](https://matrix-org.github.io/synapse/develop/admin_api/rooms.html#list-room-api) would return integers instead of booleans for the `federatable` and `public` fields when using a Sqlite database. ([\matrix-org#13509](matrix-org#13509))
- Fix bug that user cannot `/forget` rooms after the last member has left the room. ([\matrix-org#13546](matrix-org#13546))
- Faster Room Joins: fix `/make_knock` blocking indefinitely when the room in question is a partial-stated room. ([\matrix-org#13583](matrix-org#13583))
- Fix loading the current stream position behind the actual position. ([\matrix-org#13585](matrix-org#13585))
- Fix a longstanding bug in `register_new_matrix_user` which meant it was always necessary to explicitly give a server URL. ([\matrix-org#13616](matrix-org#13616))
- Fix the running of [MSC1763](matrix-org/matrix-spec-proposals#1763) retention purge_jobs in deployments with background jobs running on a worker by forcing them back onto the main worker. Contributed by Brad @ Beeper. ([\matrix-org#13632](matrix-org#13632))
- Fix a long-standing bug that downloaded media for URL previews was not deleted while database background updates were running. ([\matrix-org#13657](matrix-org#13657))
- Fix [MSC3030](matrix-org/matrix-spec-proposals#3030) `/timestamp_to_event` endpoint to return the correct next event when the events have the same timestamp. ([\matrix-org#13658](matrix-org#13658))
- Fix bug where we wedge media plugins if clients disconnect early. Introduced in v1.22.0. ([\matrix-org#13660](matrix-org#13660))
- Fix a long-standing bug which meant that keys for unwhitelisted servers were not returned by `/_matrix/key/v2/query`. ([\matrix-org#13683](matrix-org#13683))
- Fix a bug introduced in Synapse v1.20.0 that would cause the unstable unread counts from [MSC2654](matrix-org/matrix-spec-proposals#2654) to be calculated even if the feature is disabled. ([\matrix-org#13694](matrix-org#13694))

Updates to the Docker image
---------------------------

- Update docker image to use a stable version of poetry. ([\matrix-org#13688](matrix-org#13688))

Improved Documentation
----------------------

- Improve the description of the ["chain cover index"](https://matrix-org.github.io/synapse/latest/auth_chain_difference_algorithm.html) used internally by Synapse. ([\matrix-org#13602](matrix-org#13602))
- Document how ["monthly active users"](https://matrix-org.github.io/synapse/latest/usage/administration/monthly_active_users.html) is calculated and used. ([\matrix-org#13617](matrix-org#13617))
- Improve documentation around user registration. ([\matrix-org#13640](matrix-org#13640))
- Remove documentation of legacy `frontend_proxy` worker app. ([\matrix-org#13645](matrix-org#13645))
- Clarify documentation that HTTP replication traffic can be protected with a shared secret. ([\matrix-org#13656](matrix-org#13656))
- Remove unintentional colons from [config manual](https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html) headers. ([\matrix-org#13665](matrix-org#13665))
- Update docs to make enabling metrics more clear. ([\matrix-org#13678](matrix-org#13678))
- Clarify `(room_id, event_id)` global uniqueness and how we should scope our database schemas. ([\matrix-org#13701](matrix-org#13701))

Deprecations and Removals
-------------------------

- Drop support for calling `/_matrix/client/v3/rooms/{roomId}/invite` without an `id_access_token`, which was not permitted by the spec. Contributed by @Vetchu. ([\matrix-org#13241](matrix-org#13241))
- Remove redundant `_get_joined_users_from_context` cache. Contributed by Nick @ Beeper (@Fizzadar). ([\matrix-org#13569](matrix-org#13569))
- Remove the ability to use direct TCP replication with workers. Direct TCP replication was deprecated in Synapse v1.18.0. Workers now require using Redis. ([\matrix-org#13647](matrix-org#13647))
- Remove support for unstable [private read receipts](matrix-org/matrix-spec-proposals#2285). ([\matrix-org#13653](matrix-org#13653), [\matrix-org#13692](matrix-org#13692))

Internal Changes
----------------

- Extend the release script to wait for GitHub Actions to finish and to be usable as a guide for the whole process. ([\matrix-org#13483](matrix-org#13483))
- Add experimental configuration option to allow disabling legacy Prometheus metric names. ([\matrix-org#13540](matrix-org#13540))
- Cache user IDs instead of profiles to reduce cache memory usage. Contributed by Nick @ Beeper (@Fizzadar). ([\matrix-org#13573](matrix-org#13573), [\matrix-org#13600](matrix-org#13600))
- Optimize how Synapse calculates domains to fetch from during backfill. ([\matrix-org#13575](matrix-org#13575))
- Comment about a better future where we can get the state diff between two events. ([\matrix-org#13586](matrix-org#13586))
- Instrument `_check_sigs_and_hash_and_fetch` to trace time spent in child concurrent calls for understandable traces in Jaeger. ([\matrix-org#13588](matrix-org#13588))
- Improve performance of `@cachedList`. ([\matrix-org#13591](matrix-org#13591))
- Minor speed up of fetching large numbers of push rules. ([\matrix-org#13592](matrix-org#13592))
- Optimise push action fetching queries. Contributed by Nick @ Beeper (@Fizzadar). ([\matrix-org#13597](matrix-org#13597))
- Rename `event_map` to `unpersisted_events` when computing the auth differences. ([\matrix-org#13603](matrix-org#13603))
- Refactor `get_users_in_room(room_id)` mis-use with dedicated `get_current_hosts_in_room(room_id)` function. ([\matrix-org#13605](matrix-org#13605))
- Use dedicated `get_local_users_in_room(room_id)` function to find local users when calculating `join_authorised_via_users_server` of a `/make_join` request. ([\matrix-org#13606](matrix-org#13606))
- Refactor `get_users_in_room(room_id)` mis-use to lookup single local user with dedicated `check_local_user_in_room(...)` function. ([\matrix-org#13608](matrix-org#13608))
- Drop unused column `application_services_state.last_txn`. ([\matrix-org#13627](matrix-org#13627))
- Improve readability of Complement CI logs by printing failure results last. ([\matrix-org#13639](matrix-org#13639))
- Generalise the `@cancellable` annotation so it can be used on functions other than just servlet methods. ([\matrix-org#13662](matrix-org#13662))
- Introduce a `CommonUsageMetrics` class to share some usage metrics between the Prometheus exporter and the phone home stats. ([\matrix-org#13671](matrix-org#13671))
- Add some logging to help track down matrix-org#13444. ([\matrix-org#13679](matrix-org#13679))
- Update poetry lock file for v1.2.0. ([\matrix-org#13689](matrix-org#13689))
- Add cache to `is_partial_state_room`. ([\matrix-org#13693](matrix-org#13693))
- Update the Grafana dashboard that is included with Synapse in the `contrib` directory. ([\matrix-org#13697](matrix-org#13697))
- Only run trial CI on all python versions on non-PRs. ([\matrix-org#13698](matrix-org#13698))
- Fix typechecking with latest types-jsonschema. ([\matrix-org#13712](matrix-org#13712))
- Reduce number of CI checks we run for PRs. ([\matrix-org#13713](matrix-org#13713))

# -----BEGIN PGP SIGNATURE-----
#
# iQFEBAABCgAuFiEEBTGR3/RnAzBGUif3pULk7RsPrAkFAmMgR2QQHGVyaWtAbWF0
# cml4Lm9yZwAKCRClQuTtGw+sCfG7B/94PwW1ChsaI8hkz/3e+93PEl/mNJ6YFaEB
# 5pP4Dh/0dipP/iKbpgNuj5xz/JFnIi8D49A8sKNnku3jk0/8AZHgqDiBgOkrN76z
# Y3awo5Q9ag4xww/105V3bhdnX1NrX8Avf6F2jchDv6/9q8wQHGBPg6DMgfZ/m/BL
# SB4dypbbNpgLykuwtWxx6YMUYH+trsXJOn/MoAqld3QcZsqkDR25wXCt9+Dr+6AT
# dPd/czi8kV8ruU59tf2K5HB7XKzBW9S3Qb3dJJmGOTTJ7ccUkN/XuTwqnII950Mo
# bSlMXjY2hqk8rKUNhGZpi9bqUkwNhMgOkZl9A0Y1XtsXx6yjy0T/
# =zSGi
# -----END PGP SIGNATURE-----
# gpg: Signature made Tue Sep 13 10:03:32 2022 BST
# gpg:                using RSA key 053191DFF4670330465227F7A542E4ED1B0FAC09
# gpg:                issuer "erik@matrix.org"
# gpg: Can't check signature: No public key

# Conflicts:
#	synapse/config/experimental.py
#	synapse/push/bulk_push_rule_evaluator.py
#	synapse/storage/databases/main/event_push_actions.py
#	synapse/util/caches/descriptors.py
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
T-Defect Bugs, crashes, hangs, security vulnerabilities, or other reported issues.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants