Skip to content

Commit 30e6e3f

Browse files
committed
Merge tag 'v1.57.0' into develop
Synapse 1.57.0 (2022-04-19) =========================== This version includes a [change](matrix-org#12209) to the way transaction IDs are managed for application services. If your deployment uses a dedicated worker for application service traffic, **it must be stopped** when the database is upgraded (which normally happens when the main process is upgraded), to ensure the change is made safely without any risk of reusing transaction IDs. See the [upgrade notes](https://github.com/matrix-org/synapse/blob/v1.57.0rc1/docs/upgrade.md#upgrading-to-v1570) for more details. No significant changes since 1.57.0rc1. Synapse 1.57.0rc1 (2022-04-12) ============================== Features -------- - Send device list changes to application services as specified by [MSC3202](matrix-org/matrix-spec-proposals#3202), using unstable prefixes. The `msc3202_transaction_extensions` experimental homeserver config option must be enabled and `org.matrix.msc3202: true` must be present in the application service registration file for device list changes to be sent. The "left" field is currently always empty. ([\matrix-org#11881](matrix-org#11881)) - Optimise fetching large quantities of missing room state over federation. ([\matrix-org#12040](matrix-org#12040)) - Offload the `update_client_ip` background job from the main process to the background worker, when using Redis-based replication. ([\matrix-org#12251](matrix-org#12251)) - Move `update_client_ip` background job from the main process to the background worker. ([\matrix-org#12252](matrix-org#12252)) - Add a module callback to react to new 3PID (email address, phone number) associations. ([\matrix-org#12302](matrix-org#12302)) - Add a configuration option to remove a specific set of rooms from sync responses. ([\matrix-org#12310](matrix-org#12310)) - Add a module callback to react to account data changes. ([\matrix-org#12327](matrix-org#12327)) - Allow setting user admin status using the module API. Contributed by Famedly. ([\matrix-org#12341](matrix-org#12341)) - Reduce overhead of restarting synchrotrons. ([\matrix-org#12367](matrix-org#12367), [\matrix-org#12372](matrix-org#12372)) - Update `/messages` to use historic pagination tokens if no `from` query parameter is given. ([\matrix-org#12370](matrix-org#12370)) - Add a module API for reading and writing global account data. ([\matrix-org#12391](matrix-org#12391)) - Support the stable `v1` endpoint for `/relations`, per [MSC2675](matrix-org/matrix-spec-proposals#2675). ([\matrix-org#12403](matrix-org#12403)) - Include bundled aggregations in search results ([MSC3666](matrix-org/matrix-spec-proposals#3666)). ([\matrix-org#12436](matrix-org#12436)) Bugfixes -------- - Fix a long-standing bug where updates to the server notices user profile (display name/avatar URL) in the configuration would not be applied to pre-existing rooms. Contributed by Jorge Florian. ([\matrix-org#12115](matrix-org#12115)) - Fix a long-standing bug where events from ignored users were still considered for bundled aggregations. ([\matrix-org#12235](matrix-org#12235), [\matrix-org#12338](matrix-org#12338)) - Fix non-member state events not resolving for historical events when used in [MSC2716](matrix-org/matrix-spec-proposals#2716) `/batch_send` `state_events_at_start`. ([\matrix-org#12329](matrix-org#12329)) - Fix a long-standing bug affecting URL previews that would generate a 500 response instead of a 403 if the previewed URL includes a port that isn't allowed by the relevant blacklist. ([\matrix-org#12333](matrix-org#12333)) - Default to `private` room visibility rather than `public` when a client does not specify one, according to spec. ([\matrix-org#12350](matrix-org#12350)) - Fix a spec compliance issue where requests to the `/publicRooms` federation API would specify `limit` as a string. ([\matrix-org#12364](matrix-org#12364), [\matrix-org#12410](matrix-org#12410)) - Fix a bug introduced in Synapse 1.49.0 which caused the `synapse_event_persisted_position` metric to have invalid values. ([\matrix-org#12390](matrix-org#12390)) Updates to the Docker image --------------------------- - Bundle locked versions of dependencies into the Docker image. ([\matrix-org#12385](matrix-org#12385), [\matrix-org#12439](matrix-org#12439)) - Fix up healthcheck generation for workers docker image. ([\matrix-org#12405](matrix-org#12405)) Improved Documentation ---------------------- - Clarify documentation for running SyTest against Synapse, including use of Postgres and worker mode. ([\matrix-org#12271](matrix-org#12271)) - Document the behaviour of `LoggingTransaction.call_after` and `LoggingTransaction.call_on_exception` methods when transactions are retried. ([\matrix-org#12315](matrix-org#12315)) - Update dead links in `check-newsfragment.sh` to point to the correct documentation URL. ([\matrix-org#12331](matrix-org#12331)) - Upgrade the version of `mdbook` in CI to 0.4.17. ([\matrix-org#12339](matrix-org#12339)) - Updates to the Room DAG concepts development document to clarify that we mark events as outliers because we don't have any state for them. ([\matrix-org#12345](matrix-org#12345)) - Update the link to Redis pub/sub documentation in the workers documentation. ([\matrix-org#12369](matrix-org#12369)) - Remove documentation for converting a legacy structured logging configuration to the new format. ([\matrix-org#12392](matrix-org#12392)) Deprecations and Removals ------------------------- - Remove the unused and unstable `/aggregations` endpoint which was removed from [MSC2675](matrix-org/matrix-spec-proposals#2675). ([\matrix-org#12293](matrix-org#12293)) Internal Changes ---------------- - Remove lingering unstable references to MSC2403 (knocking). ([\matrix-org#12165](matrix-org#12165)) - Avoid trying to calculate the state at outlier events. ([\matrix-org#12191](matrix-org#12191), [\matrix-org#12316](matrix-org#12316), [\matrix-org#12330](matrix-org#12330), [\matrix-org#12332](matrix-org#12332), [\matrix-org#12409](matrix-org#12409)) - Omit sending "offline" presence updates to application services after they are initially configured. ([\matrix-org#12193](matrix-org#12193)) - Switch to using a sequence to generate AS transaction IDs. Contributed by Nick @ Beeper. If running synapse with a dedicated appservice worker, this MUST be stopped before upgrading the main process and database. ([\matrix-org#12209](matrix-org#12209)) - Add missing type hints for storage. ([\matrix-org#12267](matrix-org#12267)) - Add missing type definitions for scripts in docker folder. Contributed by Jorge Florian. ([\matrix-org#12280](matrix-org#12280)) - Move [MSC2654](matrix-org/matrix-spec-proposals#2654) support behind an experimental configuration flag. ([\matrix-org#12295](matrix-org#12295)) - Update docstrings to explain how to decipher live and historic pagination tokens. ([\matrix-org#12317](matrix-org#12317)) - Add ground work for speeding up device list updates for users in large numbers of rooms. ([\matrix-org#12321](matrix-org#12321)) - Fix typechecker problems exposed by signedjson 1.1.2. ([\matrix-org#12326](matrix-org#12326)) - Remove the `tox` packaging job: it will be redundant once matrix-org#11537 lands. ([\matrix-org#12334](matrix-org#12334)) - Ignore `.envrc` for `direnv` users. ([\matrix-org#12335](matrix-org#12335)) - Remove the (broadly unused, dev-only) dockerfile for pg tests. ([\matrix-org#12336](matrix-org#12336)) - Remove redundant `get_success` calls in test code. ([\matrix-org#12346](matrix-org#12346)) - Add type annotations for `tests/unittest.py`. ([\matrix-org#12347](matrix-org#12347)) - Move single-use methods out of `TestCase`. ([\matrix-org#12348](matrix-org#12348)) - Remove broken and unused development scripts. ([\matrix-org#12349](matrix-org#12349), [\matrix-org#12351](matrix-org#12351), [\matrix-org#12355](matrix-org#12355)) - Convert `Linearizer` tests from `inlineCallbacks` to async. ([\matrix-org#12353](matrix-org#12353)) - Update docstrings for `ReadWriteLock` tests. ([\matrix-org#12354](matrix-org#12354)) - Refactor `Linearizer`, convert methods to async and use an async context manager. ([\matrix-org#12357](matrix-org#12357)) - Fix a long-standing bug where `Linearizer`s could get stuck if a cancellation were to happen at the wrong time. ([\matrix-org#12358](matrix-org#12358)) - Make `StreamToken.from_string` and `RoomStreamToken.parse` propagate cancellations instead of replacing them with `SynapseError`s. ([\matrix-org#12366](matrix-org#12366)) - Add type hints to tests files. ([\matrix-org#12371](matrix-org#12371)) - Allow specifying the Postgres database's port when running unit tests with Postgres. ([\matrix-org#12376](matrix-org#12376)) - Remove temporary pin of signedjson<=1.1.1 that was added in Synapse 1.56.0. ([\matrix-org#12379](matrix-org#12379)) - Add opentracing spans to calls to external cache. ([\matrix-org#12380](matrix-org#12380)) - Lay groundwork for using `poetry` to manage Synapse's dependencies. ([\matrix-org#12381](matrix-org#12381), [\matrix-org#12407](matrix-org#12407), [\matrix-org#12412](matrix-org#12412), [\matrix-org#12418](matrix-org#12418)) - Make missing `importlib_metadata` dependency explicit. ([\matrix-org#12384](matrix-org#12384), [\matrix-org#12400](matrix-org#12400)) - Update type annotations for compatiblity with prometheus_client 0.14. ([\matrix-org#12389](matrix-org#12389)) - Remove support for the unstable identifiers specified in [MSC3288](matrix-org/matrix-spec-proposals#3288). ([\matrix-org#12398](matrix-org#12398)) - Add missing type hints to configuration classes. ([\matrix-org#12402](matrix-org#12402)) - Add files used to build the Docker image used for complement testing into the Synapse repository. ([\matrix-org#12404](matrix-org#12404)) - Do not include groups in the sync response when disabled. ([\matrix-org#12408](matrix-org#12408)) - Improve type hints related to HTTP query parameters. ([\matrix-org#12415](matrix-org#12415)) - Stop maintaining a list of lint targets. ([\matrix-org#12420](matrix-org#12420)) - Make `synapse._scripts` pass type checks. ([\matrix-org#12421](matrix-org#12421), [\matrix-org#12422](matrix-org#12422)) - Add some type hints to datastore. ([\matrix-org#12423](matrix-org#12423)) - Enable certificate checking during complement tests. ([\matrix-org#12435](matrix-org#12435)) - Explicitly specify the `tls` extra for Twisted dependency. ([\matrix-org#12444](matrix-org#12444))
2 parents 8e8edce + dfc7646 commit 30e6e3f

File tree

388 files changed

+24878
-16197
lines changed

Some content is hidden

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

388 files changed

+24878
-16197
lines changed

.ci/scripts/test_export_data_command.sh

+9-14
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,24 @@
22

33
# Test for the export-data admin command against sqlite and postgres
44

5+
# Expects Synapse to have been already installed with `poetry install --extras postgres`.
6+
# Expects `poetry` to be available on the `PATH`.
7+
58
set -xe
69
cd "$(dirname "$0")/../.."
710

8-
echo "--- Install dependencies"
9-
10-
# Install dependencies for this test.
11-
pip install psycopg2
12-
13-
# Install Synapse itself. This won't update any libraries.
14-
pip install -e .
15-
1611
echo "--- Generate the signing key"
1712

1813
# Generate the server's signing key.
19-
python -m synapse.app.homeserver --generate-keys -c .ci/sqlite-config.yaml
14+
poetry run synapse_homeserver --generate-keys -c .ci/sqlite-config.yaml
2015

2116
echo "--- Prepare test database"
2217

2318
# Make sure the SQLite3 database is using the latest schema and has no pending background update.
24-
scripts/update_synapse_database --database-config .ci/sqlite-config.yaml --run-background-updates
19+
poetry run update_synapse_database --database-config .ci/sqlite-config.yaml --run-background-updates
2520

2621
# Run the export-data command on the sqlite test database
27-
python -m synapse.app.admin_cmd -c .ci/sqlite-config.yaml export-data @anon-20191002_181700-832:localhost:8800 \
22+
poetry run python -m synapse.app.admin_cmd -c .ci/sqlite-config.yaml export-data @anon-20191002_181700-832:localhost:8800 \
2823
--output-directory /tmp/export_data
2924

3025
# Test that the output directory exists and contains the rooms directory
@@ -37,14 +32,14 @@ else
3732
fi
3833

3934
# Create the PostgreSQL database.
40-
.ci/scripts/postgres_exec.py "CREATE DATABASE synapse"
35+
poetry run .ci/scripts/postgres_exec.py "CREATE DATABASE synapse"
4136

4237
# Port the SQLite databse to postgres so we can check command works against postgres
4338
echo "+++ Port SQLite3 databse to postgres"
44-
scripts/synapse_port_db --sqlite-database .ci/test_db.db --postgres-config .ci/postgres-config.yaml
39+
poetry run synapse_port_db --sqlite-database .ci/test_db.db --postgres-config .ci/postgres-config.yaml
4540

4641
# Run the export-data command on postgres database
47-
python -m synapse.app.admin_cmd -c .ci/postgres-config.yaml export-data @anon-20191002_181700-832:localhost:8800 \
42+
poetry run python -m synapse.app.admin_cmd -c .ci/postgres-config.yaml export-data @anon-20191002_181700-832:localhost:8800 \
4843
--output-directory /tmp/export_data2
4944

5045
# Test that the output directory exists and contains the rooms directory

.ci/scripts/test_old_deps.sh

+66-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
#!/usr/bin/env bash
2-
# this script is run by GitHub Actions in a plain `focal` container; it installs the
3-
# minimal requirements for tox and hands over to the py3-old tox environment.
2+
# this script is run by GitHub Actions in a plain `focal` container; it
3+
# - installs the minimal system requirements, and poetry;
4+
# - patches the project definition file to refer to old versions only;
5+
# - creates a venv with these old versions using poetry; and finally
6+
# - invokes `trial` to run the tests with old deps.
47

58
# Prevent tzdata from asking for user input
69
export DEBIAN_FRONTEND=noninteractive
@@ -9,12 +12,70 @@ set -ex
912

1013
apt-get update
1114
apt-get install -y \
12-
python3 python3-dev python3-pip python3-venv \
13-
libxml2-dev libxslt-dev xmlsec1 zlib1g-dev tox libjpeg-dev libwebp-dev
15+
python3 python3-dev python3-pip python3-venv pipx \
16+
libxml2-dev libxslt-dev xmlsec1 zlib1g-dev libjpeg-dev libwebp-dev
1417

1518
export LANG="C.UTF-8"
1619

1720
# Prevent virtualenv from auto-updating pip to an incompatible version
1821
export VIRTUALENV_NO_DOWNLOAD=1
1922

20-
exec tox -e py3-old
23+
# TODO: in the future, we could use an implementation of
24+
# https://github.com/python-poetry/poetry/issues/3527
25+
# https://github.com/pypa/pip/issues/8085
26+
# to select the lowest possible versions, rather than resorting to this sed script.
27+
28+
# Patch the project definitions in-place:
29+
# - Replace all lower and tilde bounds with exact bounds
30+
# - Make the pyopenssl 17.0, which is the oldest version that works with
31+
# a `cryptography` compiled against OpenSSL 1.1.
32+
# - Delete all lines referring to psycopg2 --- so no testing of postgres support.
33+
# - Omit systemd: we're not logging to journal here.
34+
35+
# TODO: also replace caret bounds, see https://python-poetry.org/docs/dependency-specification/#version-constraints
36+
# We don't use these yet, but IIRC they are the default bound used when you `poetry add`.
37+
# The sed expression 's/\^/==/g' ought to do the trick. But it would also change
38+
# `python = "^3.7"` to `python = "==3.7", which would mean we fail because olddeps
39+
# runs on 3.8 (#12343).
40+
41+
sed -i \
42+
-e "s/[~>]=/==/g" \
43+
-e "/psycopg2/d" \
44+
-e 's/pyOpenSSL = "==16.0.0"/pyOpenSSL = "==17.0.0"/' \
45+
-e '/systemd/d' \
46+
pyproject.toml
47+
48+
# Use poetry to do the installation. This ensures that the versions are all mutually
49+
# compatible (as far the package metadata declares, anyway); pip's package resolver
50+
# is more lax.
51+
#
52+
# Rather than `poetry install --no-dev`, we drop all dev dependencies from the
53+
# toml file. This means we don't have to ensure compatibility between old deps and
54+
# dev tools.
55+
56+
pip install --user toml
57+
58+
REMOVE_DEV_DEPENDENCIES="
59+
import toml
60+
with open('pyproject.toml', 'r') as f:
61+
data = toml.loads(f.read())
62+
63+
del data['tool']['poetry']['dev-dependencies']
64+
65+
with open('pyproject.toml', 'w') as f:
66+
toml.dump(data, f)
67+
"
68+
python3 -c "$REMOVE_DEV_DEPENDENCIES"
69+
70+
pipx install poetry==1.1.12
71+
~/.local/bin/poetry lock
72+
73+
echo "::group::Patched pyproject.toml"
74+
cat pyproject.toml
75+
echo "::endgroup::"
76+
echo "::group::Lockfile after patch"
77+
cat poetry.lock
78+
echo "::endgroup::"
79+
80+
~/.local/bin/poetry install -E "all test"
81+
~/.local/bin/poetry run trial --jobs=2 tests

.ci/scripts/test_synapse_port_db.sh

+14-18
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,37 @@
11
#!/usr/bin/env bash
22
#
33
# Test script for 'synapse_port_db'.
4-
# - sets up synapse and deps
4+
# - configures synapse and a postgres server.
55
# - runs the port script on a prepopulated test sqlite db
66
# - also runs it against an new sqlite db
7-
7+
#
8+
# Expects Synapse to have been already installed with `poetry install --extras postgres`.
9+
# Expects `poetry` to be available on the `PATH`.
810

911
set -xe
1012
cd "$(dirname "$0")/../.."
1113

12-
echo "--- Install dependencies"
13-
14-
# Install dependencies for this test.
15-
pip install psycopg2 coverage coverage-enable-subprocess
16-
17-
# Install Synapse itself. This won't update any libraries.
18-
pip install -e .
19-
2014
echo "--- Generate the signing key"
2115

2216
# Generate the server's signing key.
23-
python -m synapse.app.homeserver --generate-keys -c .ci/sqlite-config.yaml
17+
poetry run synapse_homeserver --generate-keys -c .ci/sqlite-config.yaml
2418

2519
echo "--- Prepare test database"
2620

2721
# Make sure the SQLite3 database is using the latest schema and has no pending background update.
28-
scripts/update_synapse_database --database-config .ci/sqlite-config.yaml --run-background-updates
22+
poetry run update_synapse_database --database-config .ci/sqlite-config.yaml --run-background-updates
2923

3024
# Create the PostgreSQL database.
31-
.ci/scripts/postgres_exec.py "CREATE DATABASE synapse"
25+
poetry run .ci/scripts/postgres_exec.py "CREATE DATABASE synapse"
3226

3327
echo "+++ Run synapse_port_db against test database"
34-
coverage run scripts/synapse_port_db --sqlite-database .ci/test_db.db --postgres-config .ci/postgres-config.yaml
28+
# TODO: this invocation of synapse_port_db (and others below) used to be prepended with `coverage run`,
29+
# but coverage seems unable to find the entrypoints installed by `pip install -e .`.
30+
poetry run synapse_port_db --sqlite-database .ci/test_db.db --postgres-config .ci/postgres-config.yaml
3531

3632
# We should be able to run twice against the same database.
3733
echo "+++ Run synapse_port_db a second time"
38-
coverage run scripts/synapse_port_db --sqlite-database .ci/test_db.db --postgres-config .ci/postgres-config.yaml
34+
poetry run synapse_port_db --sqlite-database .ci/test_db.db --postgres-config .ci/postgres-config.yaml
3935

4036
#####
4137

@@ -46,12 +42,12 @@ echo "--- Prepare empty SQLite database"
4642
# we do this by deleting the sqlite db, and then doing the same again.
4743
rm .ci/test_db.db
4844

49-
scripts/update_synapse_database --database-config .ci/sqlite-config.yaml --run-background-updates
45+
poetry run update_synapse_database --database-config .ci/sqlite-config.yaml --run-background-updates
5046

5147
# re-create the PostgreSQL database.
52-
.ci/scripts/postgres_exec.py \
48+
poetry run .ci/scripts/postgres_exec.py \
5349
"DROP DATABASE synapse" \
5450
"CREATE DATABASE synapse"
5551

5652
echo "+++ Run synapse_port_db against empty database"
57-
coverage run scripts/synapse_port_db --sqlite-database .ci/test_db.db --postgres-config .ci/postgres-config.yaml
53+
poetry run synapse_port_db --sqlite-database .ci/test_db.db --postgres-config .ci/postgres-config.yaml

.dockerignore

+5-3
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@
33

44
# things to include
55
!docker
6-
!scripts
76
!synapse
8-
!MANIFEST.in
97
!README.rst
8+
!pyproject.toml
9+
!poetry.lock
10+
11+
# TODO: remove these once we have moved over to using poetry-core in pyproject.toml
12+
!MANIFEST.in
1013
!setup.py
11-
!synctl
1214

1315
**/__pycache__

.github/workflows/docs.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ jobs:
2222
- name: Setup mdbook
2323
uses: peaceiris/actions-mdbook@4b5ef36b314c2599664ca107bb8c02412548d79d # v1.1.14
2424
with:
25-
mdbook-version: '0.4.9'
25+
mdbook-version: '0.4.17'
2626

2727
- name: Build the documentation
2828
# mdbook will only create an index.html if we're including docs/README.md in SUMMARY.md.

.github/workflows/release-artifacts.yml

+4-3
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ jobs:
3131
# if we're running from a tag, get the full list of distros; otherwise just use debian:sid
3232
dists='["debian:sid"]'
3333
if [[ $GITHUB_REF == refs/tags/* ]]; then
34-
dists=$(scripts-dev/build_debian_packages --show-dists-json)
34+
dists=$(scripts-dev/build_debian_packages.py --show-dists-json)
3535
fi
3636
echo "::set-output name=distros::$dists"
3737
# map the step outputs to job outputs
@@ -74,7 +74,7 @@ jobs:
7474
# see https://github.com/docker/build-push-action/issues/252
7575
# for the cache magic here
7676
run: |
77-
./src/scripts-dev/build_debian_packages \
77+
./src/scripts-dev/build_debian_packages.py \
7878
--docker-build-arg=--cache-from=type=local,src=/tmp/.buildx-cache \
7979
--docker-build-arg=--cache-to=type=local,mode=max,dest=/tmp/.buildx-cache-new \
8080
--docker-build-arg=--progress=plain \
@@ -112,7 +112,8 @@ jobs:
112112
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
113113
with:
114114
files: |
115-
python-dist/*
115+
Sdist/*
116+
Wheel/*
116117
debs.tar.xz
117118
# if it's not already published, keep the release as a draft.
118119
draft: true

0 commit comments

Comments
 (0)