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

Commit 4dd9ea8

Browse files
committed
Revert "Revert accidental fast-forward merge from v1.49.0rc1"
This reverts commit 158d73e.
1 parent 158d73e commit 4dd9ea8

File tree

165 files changed

+7720
-2708
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

165 files changed

+7720
-2708
lines changed

.github/workflows/tests.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ jobs:
374374
working-directory: complement/dockerfiles
375375

376376
# Run Complement
377-
- run: go test -v -tags synapse_blacklist,msc2403,msc2946,msc3083 ./tests/...
377+
- run: go test -v -tags synapse_blacklist,msc2403 ./tests/...
378378
env:
379379
COMPLEMENT_BASE_IMAGE: complement-synapse:latest
380380
working-directory: complement

CHANGES.md

+93
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,96 @@
1+
Synapse 1.49.0rc1 (2021-12-07)
2+
==============================
3+
4+
We've decided to move the existing, somewhat stagnant pages from the GitHub wiki
5+
to the [documentation website](https://matrix-org.github.io/synapse/latest/).
6+
7+
This was done for two reasons. The first was to ensure that changes are checked by
8+
multiple authors before being committed (everyone makes mistakes!) and the second
9+
was visibility of the documentation. Not everyone knows that Synapse has some very
10+
useful information hidden away in its GitHub wiki pages. Bringing them to the
11+
documentation website should help with visibility, as well as keep all Synapse documentation
12+
in one, easily-searchable location.
13+
14+
Note that contributions to the documentation website happen through [GitHub pull
15+
requests](https://github.com/matrix-org/synapse/pulls). Please visit [#synapse-dev:matrix.org](https://matrix.to/#/#synapse-dev:matrix.org)
16+
if you need help with the process!
17+
18+
19+
Features
20+
--------
21+
22+
- Add [MSC3030](https://github.com/matrix-org/matrix-doc/pull/3030) experimental client and federation API endpoints to get the closest event to a given timestamp. ([\#9445](https://github.com/matrix-org/synapse/issues/9445))
23+
- Include bundled relation aggregations during a limited `/sync` request and `/relations` request, per [MSC2675](https://github.com/matrix-org/matrix-doc/pull/2675). ([\#11284](https://github.com/matrix-org/synapse/issues/11284), [\#11478](https://github.com/matrix-org/synapse/issues/11478))
24+
- Add plugin support for controlling database background updates. ([\#11306](https://github.com/matrix-org/synapse/issues/11306), [\#11475](https://github.com/matrix-org/synapse/issues/11475), [\#11479](https://github.com/matrix-org/synapse/issues/11479))
25+
- Support the stable API endpoints for [MSC2946](https://github.com/matrix-org/matrix-doc/pull/2946): the room `/hierarchy` endpoint. ([\#11329](https://github.com/matrix-org/synapse/issues/11329))
26+
- Add admin API to get some information about federation status with remote servers. ([\#11407](https://github.com/matrix-org/synapse/issues/11407))
27+
- Support expiry of refresh tokens and expiry of the overall session when refresh tokens are in use. ([\#11425](https://github.com/matrix-org/synapse/issues/11425))
28+
- Stabilise support for [MSC2918](https://github.com/matrix-org/matrix-doc/blob/main/proposals/2918-refreshtokens.md#msc2918-refresh-tokens) refresh tokens as they have now been merged into the Matrix specification. ([\#11435](https://github.com/matrix-org/synapse/issues/11435), [\#11522](https://github.com/matrix-org/synapse/issues/11522))
29+
- Update [MSC2918 refresh token](https://github.com/matrix-org/matrix-doc/blob/main/proposals/2918-refreshtokens.md#msc2918-refresh-tokens) support to confirm with the latest revision: accept the `refresh_tokens` parameter in the request body rather than in the URL parameters. ([\#11430](https://github.com/matrix-org/synapse/issues/11430))
30+
- Support configuring the lifetime of non-refreshable access tokens separately to refreshable access tokens. ([\#11445](https://github.com/matrix-org/synapse/issues/11445))
31+
- Expose `synapse_homeserver` and `synapse_worker` commands as entry points to run Synapse's main process and worker processes, respectively. Contributed by @Ma27. ([\#11449](https://github.com/matrix-org/synapse/issues/11449))
32+
- `synctl stop` will now wait for Synapse to exit before returning. ([\#11459](https://github.com/matrix-org/synapse/issues/11459), [\#11490](https://github.com/matrix-org/synapse/issues/11490))
33+
- Extend the "delete room" admin api to work correctly on rooms which have previously been partially deleted. ([\#11523](https://github.com/matrix-org/synapse/issues/11523))
34+
- Add support for the `/_matrix/client/v3/login/sso/redirect/{idpId}` API from Matrix v1.1. This endpoint was overlooked when support for v3 endpoints was added in Synapse 1.48.0rc1. ([\#11451](https://github.com/matrix-org/synapse/issues/11451))
35+
36+
37+
Bugfixes
38+
--------
39+
40+
- Fix using [MSC2716](https://github.com/matrix-org/matrix-doc/pull/2716) batch sending in combination with event persistence workers. Contributed by @tulir at Beeper. ([\#11220](https://github.com/matrix-org/synapse/issues/11220))
41+
- Fix a long-standing bug where all requests that read events from the database could get stuck as a result of losing the database connection, properly this time. Also fix a race condition introduced in the previous insufficient fix in Synapse 1.47.0. ([\#11376](https://github.com/matrix-org/synapse/issues/11376))
42+
- The `/send_join` response now includes the stable `event` field instead of the unstable field from [MSC3083](https://github.com/matrix-org/matrix-doc/pull/3083). ([\#11413](https://github.com/matrix-org/synapse/issues/11413))
43+
- Fix a bug introduced in Synapse 1.47.0 where `send_join` could fail due to an outdated `ijson` version. ([\#11439](https://github.com/matrix-org/synapse/issues/11439), [\#11441](https://github.com/matrix-org/synapse/issues/11441), [\#11460](https://github.com/matrix-org/synapse/issues/11460))
44+
- Fix a bug introduced in Synapse 1.36.0 which could cause problems fetching event-signing keys from trusted key servers. ([\#11440](https://github.com/matrix-org/synapse/issues/11440))
45+
- Fix a bug introduced in Synapse 1.47.1 where the media repository would fail to work if the media store path contained any symbolic links. ([\#11446](https://github.com/matrix-org/synapse/issues/11446))
46+
- Fix an `LruCache` corruption bug, introduced in Synapse 1.38.0, that would cause certain requests to fail until the next Synapse restart. ([\#11454](https://github.com/matrix-org/synapse/issues/11454))
47+
- Fix a long-standing bug where invites from ignored users were included in incremental syncs. ([\#11511](https://github.com/matrix-org/synapse/issues/11511))
48+
- Fix a regression in Synapse 1.48.0 where presence workers would not clear their presence updates over replication on shutdown. ([\#11518](https://github.com/matrix-org/synapse/issues/11518))
49+
- Fix a regression in Synapse 1.48.0 where the module API's `looping_background_call` method would spam errors to the logs when given a non-async function. ([\#11524](https://github.com/matrix-org/synapse/issues/11524))
50+
51+
52+
Updates to the Docker image
53+
---------------------------
54+
55+
- Update `Dockerfile-workers` to healthcheck all workers in the container. ([\#11429](https://github.com/matrix-org/synapse/issues/11429))
56+
57+
58+
Improved Documentation
59+
----------------------
60+
61+
- Update the media repository documentation. ([\#11415](https://github.com/matrix-org/synapse/issues/11415))
62+
- Update section about backward extremities in the room DAG concepts doc to correct the misconception about backward extremities indicating whether we have fetched an events' `prev_events`. ([\#11469](https://github.com/matrix-org/synapse/issues/11469))
63+
64+
65+
Internal Changes
66+
----------------
67+
68+
- Add `Final` annotation to string constants in `synapse.api.constants` so that they get typed as `Literal`s. ([\#11356](https://github.com/matrix-org/synapse/issues/11356))
69+
- Add a check to ensure that users cannot start the Synapse master process when `worker_app` is set. ([\#11416](https://github.com/matrix-org/synapse/issues/11416))
70+
- Add a note about postgres memory management and hugepages to postgres doc. ([\#11467](https://github.com/matrix-org/synapse/issues/11467))
71+
- Add missing type hints to `synapse.config` module. ([\#11465](https://github.com/matrix-org/synapse/issues/11465))
72+
- Add missing type hints to `synapse.federation`. ([\#11483](https://github.com/matrix-org/synapse/issues/11483))
73+
- Add type annotations to `tests.storage.test_appservice`. ([\#11488](https://github.com/matrix-org/synapse/issues/11488), [\#11492](https://github.com/matrix-org/synapse/issues/11492))
74+
- Add type annotations to some of the configuration surrounding refresh tokens. ([\#11428](https://github.com/matrix-org/synapse/issues/11428))
75+
- Add type hints to `synapse/tests/rest/admin`. ([\#11501](https://github.com/matrix-org/synapse/issues/11501))
76+
- Add type hints to storage classes. ([\#11411](https://github.com/matrix-org/synapse/issues/11411))
77+
- Add wiki pages to documentation website. ([\#11402](https://github.com/matrix-org/synapse/issues/11402))
78+
- Clean up `tests.storage.test_main` to remove use of legacy code. ([\#11493](https://github.com/matrix-org/synapse/issues/11493))
79+
- Clean up `tests.test_visibility` to remove legacy code. ([\#11495](https://github.com/matrix-org/synapse/issues/11495))
80+
- Convert status codes to `HTTPStatus` in `synapse.rest.admin`. ([\#11452](https://github.com/matrix-org/synapse/issues/11452), [\#11455](https://github.com/matrix-org/synapse/issues/11455))
81+
- Extend the `scripts-dev/sign_json` script to support signing events. ([\#11486](https://github.com/matrix-org/synapse/issues/11486))
82+
- Improve internal types in push code. ([\#11409](https://github.com/matrix-org/synapse/issues/11409))
83+
- Improve type annotations in `synapse.module_api`. ([\#11029](https://github.com/matrix-org/synapse/issues/11029))
84+
- Improve type hints for `LruCache`. ([\#11453](https://github.com/matrix-org/synapse/issues/11453))
85+
- Preparation for database schema simplifications: disambiguate queries on `state_key`. ([\#11497](https://github.com/matrix-org/synapse/issues/11497))
86+
- Refactor `backfilled` into specific behavior function arguments (`_persist_events_and_state_updates` and downstream calls). ([\#11417](https://github.com/matrix-org/synapse/issues/11417))
87+
- Refactor `get_version_string` to fix-up types and duplicated code. ([\#11468](https://github.com/matrix-org/synapse/issues/11468))
88+
- Refactor various parts of the `/sync` handler. ([\#11494](https://github.com/matrix-org/synapse/issues/11494), [\#11515](https://github.com/matrix-org/synapse/issues/11515))
89+
- Remove unnecessary `json.dumps` from `tests.rest.admin`. ([\#11461](https://github.com/matrix-org/synapse/issues/11461))
90+
- Save the OpenID Connect session ID on login. ([\#11482](https://github.com/matrix-org/synapse/issues/11482))
91+
- Update and clean up recently ported documentation pages. ([\#11466](https://github.com/matrix-org/synapse/issues/11466))
92+
93+
194
Synapse 1.48.0 (2021-11-30)
295
===========================
396

debian/changelog

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
matrix-synapse-py3 (1.49.0~rc1) stable; urgency=medium
2+
3+
* New synapse release 1.49.0~rc1.
4+
5+
-- Synapse Packaging team <[email protected]> Tue, 07 Dec 2021 13:52:21 +0000
6+
17
matrix-synapse-py3 (1.48.0) stable; urgency=medium
28

39
* New synapse release 1.48.0.

docker/Dockerfile-workers

+3
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@ VOLUME ["/data"]
2121
# files to run the desired worker configuration. Will start supervisord.
2222
COPY ./docker/configure_workers_and_start.py /configure_workers_and_start.py
2323
ENTRYPOINT ["/configure_workers_and_start.py"]
24+
25+
HEALTHCHECK --start-period=5s --interval=15s --timeout=5s \
26+
CMD /bin/sh /healthcheck.sh

docker/conf-workers/healthcheck.sh.j2

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/bin/sh
2+
# This healthcheck script is designed to return OK when every
3+
# host involved returns OK
4+
{%- for healthcheck_url in healthcheck_urls %}
5+
curl -fSs {{ healthcheck_url }} || exit 1
6+
{%- endfor %}

docker/configure_workers_and_start.py

+13
Original file line numberDiff line numberDiff line change
@@ -474,10 +474,16 @@ def generate_worker_files(environ, config_path: str, data_dir: str):
474474

475475
# Determine the load-balancing upstreams to configure
476476
nginx_upstream_config = ""
477+
478+
# At the same time, prepare a list of internal endpoints to healthcheck
479+
# starting with the main process which exists even if no workers do.
480+
healthcheck_urls = ["http://localhost:8080/health"]
481+
477482
for upstream_worker_type, upstream_worker_ports in nginx_upstreams.items():
478483
body = ""
479484
for port in upstream_worker_ports:
480485
body += " server localhost:%d;\n" % (port,)
486+
healthcheck_urls.append("http://localhost:%d/health" % (port,))
481487

482488
# Add to the list of configured upstreams
483489
nginx_upstream_config += NGINX_UPSTREAM_CONFIG_BLOCK.format(
@@ -510,6 +516,13 @@ def generate_worker_files(environ, config_path: str, data_dir: str):
510516
worker_config=supervisord_config,
511517
)
512518

519+
# healthcheck config
520+
convert(
521+
"/conf/healthcheck.sh.j2",
522+
"/healthcheck.sh",
523+
healthcheck_urls=healthcheck_urls,
524+
)
525+
513526
# Ensure the logging directory exists
514527
log_dir = data_dir + "/logs"
515528
if not os.path.exists(log_dir):

docs/SUMMARY.md

+8
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
- [Presence router callbacks](modules/presence_router_callbacks.md)
4545
- [Account validity callbacks](modules/account_validity_callbacks.md)
4646
- [Password auth provider callbacks](modules/password_auth_provider_callbacks.md)
47+
- [Background update controller callbacks](modules/background_update_controller_callbacks.md)
4748
- [Porting a legacy module to the new interface](modules/porting_legacy_module.md)
4849
- [Workers](workers.md)
4950
- [Using `synctl` with Workers](synctl_workers.md)
@@ -64,9 +65,15 @@
6465
- [Statistics](admin_api/statistics.md)
6566
- [Users](admin_api/user_admin_api.md)
6667
- [Server Version](admin_api/version_api.md)
68+
- [Federation](usage/administration/admin_api/federation.md)
6769
- [Manhole](manhole.md)
6870
- [Monitoring](metrics-howto.md)
71+
- [Understanding Synapse Through Grafana Graphs](usage/administration/understanding_synapse_through_grafana_graphs.md)
72+
- [Useful SQL for Admins](usage/administration/useful_sql_for_admins.md)
73+
- [Database Maintenance Tools](usage/administration/database_maintenance_tools.md)
74+
- [State Groups](usage/administration/state_groups.md)
6975
- [Request log format](usage/administration/request_log.md)
76+
- [Admin FAQ](usage/administration/admin_faq.md)
7077
- [Scripts]()
7178

7279
# Development
@@ -94,3 +101,4 @@
94101

95102
# Other
96103
- [Dependency Deprecation Policy](deprecation_policy.md)
104+
- [Running Synapse on a Single-Board Computer](other/running_synapse_on_single_board_computers.md)

docs/development/room-dag-concepts.md

+7-9
Original file line numberDiff line numberDiff line change
@@ -38,16 +38,15 @@ Most-recent-in-time events in the DAG which are not referenced by any other even
3838
The forward extremities of a room are used as the `prev_events` when the next event is sent.
3939

4040

41-
## Backwards extremity
41+
## Backward extremity
4242

4343
The current marker of where we have backfilled up to and will generally be the
44-
oldest-in-time events we know of in the DAG.
44+
`prev_events` of the oldest-in-time events we have in the DAG. This gives a starting point when
45+
backfilling history.
4546

46-
This is an event where we haven't fetched all of the `prev_events` for.
47-
48-
Once we have fetched all of its `prev_events`, it's unmarked as a backwards
49-
extremity (although we may have formed new backwards extremities from the prev
50-
events during the backfilling process).
47+
When we persist a non-outlier event, we clear it as a backward extremity and set
48+
all of its `prev_events` as the new backward extremities if they aren't already
49+
persisted in the `events` table.
5150

5251

5352
## Outliers
@@ -56,8 +55,7 @@ We mark an event as an `outlier` when we haven't figured out the state for the
5655
room at that point in the DAG yet.
5756

5857
We won't *necessarily* have the `prev_events` of an `outlier` in the database,
59-
but it's entirely possible that we *might*. The status of whether we have all of
60-
the `prev_events` is marked as a [backwards extremity](#backwards-extremity).
58+
but it's entirely possible that we *might*.
6159

6260
For example, when we fetch the event auth chain or state for a given event, we
6361
mark all of those claimed auth events as outliers because we haven't done the

docs/media_repository.md

+70-19
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,80 @@
22

33
*Synapse implementation-specific details for the media repository*
44

5-
The media repository is where attachments and avatar photos are stored.
6-
It stores attachment content and thumbnails for media uploaded by local users.
7-
It caches attachment content and thumbnails for media uploaded by remote users.
5+
The media repository
6+
* stores avatars, attachments and their thumbnails for media uploaded by local
7+
users.
8+
* caches avatars, attachments and their thumbnails for media uploaded by remote
9+
users.
10+
* caches resources and thumbnails used for
11+
[URL previews](development/url_previews.md).
812

9-
## Storage
13+
All media in Matrix can be identified by a unique
14+
[MXC URI](https://spec.matrix.org/latest/client-server-api/#matrix-content-mxc-uris),
15+
consisting of a server name and media ID:
16+
```
17+
mxc://<server-name>/<media-id>
18+
```
1019

11-
Each item of media is assigned a `media_id` when it is uploaded.
12-
The `media_id` is a randomly chosen, URL safe 24 character string.
20+
## Local Media
21+
Synapse generates 24 character media IDs for content uploaded by local users.
22+
These media IDs consist of upper and lowercase letters and are case-sensitive.
23+
Other homeserver implementations may generate media IDs differently.
1324

14-
Metadata such as the MIME type, upload time and length are stored in the
15-
sqlite3 database indexed by `media_id`.
25+
Local media is recorded in the `local_media_repository` table, which includes
26+
metadata such as MIME types, upload times and file sizes.
27+
Note that this table is shared by the URL cache, which has a different media ID
28+
scheme.
1629

17-
Content is stored on the filesystem under a `"local_content"` directory.
30+
### Paths
31+
A file with media ID `aabbcccccccccccccccccccc` and its `128x96` `image/jpeg`
32+
thumbnail, created by scaling, would be stored at:
33+
```
34+
local_content/aa/bb/cccccccccccccccccccc
35+
local_thumbnails/aa/bb/cccccccccccccccccccc/128-96-image-jpeg-scale
36+
```
1837

19-
Thumbnails are stored under a `"local_thumbnails"` directory.
38+
## Remote Media
39+
When media from a remote homeserver is requested from Synapse, it is assigned
40+
a local `filesystem_id`, with the same format as locally-generated media IDs,
41+
as described above.
2042

21-
The item with `media_id` `"aabbccccccccdddddddddddd"` is stored under
22-
`"local_content/aa/bb/ccccccccdddddddddddd"`. Its thumbnail with width
23-
`128` and height `96` and type `"image/jpeg"` is stored under
24-
`"local_thumbnails/aa/bb/ccccccccdddddddddddd/128-96-image-jpeg"`
43+
A record of remote media is stored in the `remote_media_cache` table, which
44+
can be used to map remote MXC URIs (server names and media IDs) to local
45+
`filesystem_id`s.
2546

26-
Remote content is cached under `"remote_content"` directory. Each item of
27-
remote content is assigned a local `"filesystem_id"` to ensure that the
28-
directory structure `"remote_content/server_name/aa/bb/ccccccccdddddddddddd"`
29-
is appropriate. Thumbnails for remote content are stored under
30-
`"remote_thumbnail/server_name/..."`
47+
### Paths
48+
A file from `matrix.org` with `filesystem_id` `aabbcccccccccccccccccccc` and its
49+
`128x96` `image/jpeg` thumbnail, created by scaling, would be stored at:
50+
```
51+
remote_content/matrix.org/aa/bb/cccccccccccccccccccc
52+
remote_thumbnail/matrix.org/aa/bb/cccccccccccccccccccc/128-96-image-jpeg-scale
53+
```
54+
Older thumbnails may omit the thumbnailing method:
55+
```
56+
remote_thumbnail/matrix.org/aa/bb/cccccccccccccccccccc/128-96-image-jpeg
57+
```
58+
59+
Note that `remote_thumbnail/` does not have an `s`.
60+
61+
## URL Previews
62+
See [URL Previews](development/url_previews.md) for documentation on the URL preview
63+
process.
64+
65+
When generating previews for URLs, Synapse may download and cache various
66+
resources, including images. These resources are assigned temporary media IDs
67+
of the form `yyyy-mm-dd_aaaaaaaaaaaaaaaa`, where `yyyy-mm-dd` is the current
68+
date and `aaaaaaaaaaaaaaaa` is a random sequence of 16 case-sensitive letters.
69+
70+
The metadata for these cached resources is stored in the
71+
`local_media_repository` and `local_media_repository_url_cache` tables.
72+
73+
Resources for URL previews are deleted after a few days.
74+
75+
### Paths
76+
The file with media ID `yyyy-mm-dd_aaaaaaaaaaaaaaaa` and its `128x96`
77+
`image/jpeg` thumbnail, created by scaling, would be stored at:
78+
```
79+
url_cache/yyyy-mm-dd/aaaaaaaaaaaaaaaa
80+
url_cache_thumbnails/yyyy-mm-dd/aaaaaaaaaaaaaaaa/128-96-image-jpeg-scale
81+
```

0 commit comments

Comments
 (0)