Slavi Pantaleev
9af79ce4d2
matrix-synapse: support thread_subscriptions stream writers
...
Add `thread_subscriptions` as a supported web-facing stream writer in MDAD and
route its unstable client endpoints via the same explicit writer-or-main model
used for the other web-facing stream-backed APIs.
This is not just another generic worker route. Current Synapse gives thread
subscriptions their own `writers.thread_subscriptions` configuration, backs them
with a multi-writer stream, and asserts on store writes that the current
instance is an allowed thread-subscriptions writer.
Explicit early routing is also required here because the subscription endpoint is
room-scoped. In MDAD's specialized-worker model, the existing room-worker regex
would otherwise match `/_matrix/client/unstable/io.element.msc4306/rooms/...`
and steal the request before it reached the correct writer-or-main fallback.
Unlike `device_lists`, support is added without enabling a thread-subscriptions
worker by default in the standard presets. The underlying MSC4306/4308 feature
remains unstable and disabled by default upstream, so the conservative default
is to keep the worker count at `0` and let the new explicit routes fall back to
`main` unless an operator opts in.
Refs:
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/config/workers.py#L175-L182
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/client/thread_subscriptions.py#L38-L247
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/storage/databases/main/thread_subscriptions.py#L66-L83
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/storage/databases/main/thread_subscriptions.py#L192-L322
2026-03-15 01:16:24 +02:00
Slavi Pantaleev
ec36904671
matrix-synapse: route MSC3814 dehydrated-device APIs to workers
...
Add the unstable MSC3814 dehydrated-device endpoints to both MDAD
worker-routing models:
- the specialized client_reader bucket
- the broad generic_worker route list
This is not a docs-driven change. Current workers.md does not meaningfully
spell out these paths, but the current Synapse code does mount them via the
normal devices servlet registration path, and non-main client workers do not
skip that servlet group.
That makes these endpoints a good fit for the same worker buckets that already
handle the surrounding device- and E2EE-related client APIs.
Refs:
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/docs/workers.md#synapseappgeneric_worker
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/client/devices.py#L256-L459
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/__init__.py#L81-L129
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/__init__.py#L179-L197
2026-03-15 00:39:25 +02:00
Slavi Pantaleev
69df322f40
matrix-synapse: split client_reader routes into grouped regexes
...
The client_reader route bucket had collapsed into one long alternation,
which made small worker-audit edits hard to review. Any endpoint change
rewrote the whole regex and obscured whether we were changing routing
policy or just maintaining the route list.
Refactor the variable into grouped regex entries with comments instead.
This keeps the current specialized-worker policy intact: nginx still
renders the client_reader locations in the same block, and the routes
still target the same upstream bucket. The goal here is to make future
doc/code audits, additions, and removals mechanical and reviewable.
This also matches MDAD's current worker model, where generic workers are
not mixed with the specialized room/sync/client/federation reader
routing buckets, so there is no need to derive this from the generic
worker map.
Refs:
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/docs/workers.md#historical-apps
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/docs/workers.md#synapseappgeneric_worker
2026-03-15 00:29:32 +02:00
Slavi Pantaleev
c0044a9b0a
matrix-synapse: route MatrixRTC transport discovery to workers
...
Current Synapse registers the MatrixRTC transport discovery endpoint on
client-serving workers when MSC4143 is enabled, but MDAD does not model
that path in either its client-reader bucket or its broader generic-
worker endpoint list.
Add the unstable MatrixRTC transport discovery route so MDAD's worker
routing matches the current upstream worker surface for this endpoint.
This is a small, isolated routing addition for a simple authenticated
GET endpoint.
Refs:
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/client/matrixrtc.py#L30-L52
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/__init__.py#L81-L129
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/__init__.py#L179-L197
2026-03-15 00:11:58 +02:00
Slavi Pantaleev
63a0e8216b
matrix-synapse: route account deactivation like current Synapse
...
Current Synapse still documents and registers
`/_matrix/client/.../account/deactivate` on client-serving workers when
auth is not delegated. MDAD already routes neighboring account endpoints
such as `account/3pid` and `account/whoami`, but it omitted
`account/deactivate` from both its client-reader bucket and its broader
generic-worker endpoint list.
Add the missing route patterns so MDAD's worker routing matches the
current upstream worker surface in non-delegated-auth deployments. In
MAS / MSC3861 mode the endpoint is not registered upstream anyway, so
this does not expand the effective delegated-auth surface.
Refs:
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/docs/workers.md#synapseappgeneric_worker
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/client/account.py#L284-L324
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/client/account.py#L913-L920
2026-03-14 23:49:20 +02:00
Slavi Pantaleev
975f14d2d8
matrix-synapse: route the current Nheko summary endpoint
...
Synapse currently supports both the deprecated
`/_matrix/client/unstable/im.nheko.summary/rooms/<room>/summary`
route and the recommended
`/_matrix/client/unstable/im.nheko.summary/summary/<room>`
form. MDAD only matched the deprecated shape.
Add the recommended pattern alongside the old one so worker routing
matches the current upstream API surface while preserving backward
compatibility for the deprecated path.
Refs:
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/docs/workers.md#synapseappgeneric_worker
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/client/room.py#L1716-L1728
2026-03-14 23:32:10 +02:00
Slavi Pantaleev
d80ef72fbe
matrix-synapse: remove stale client-reader residue and refresh worker comment
...
Current Synapse no longer exposes device management under
`/_matrix/client/.../account/devices`. The live client API shape is
`/devices`, `/devices/{device_id}`, and `/delete_devices`, and
MDAD already routes those real device-list-sensitive endpoints through
explicit device-list handling.
Keeping `account/devices` in the old client-reader regex therefore only
preserves stale route-model residue. While touching the same area,
refresh the `/_synapse/client/*` comment to reflect current Synapse:
client-serving generic workers now mount a meaningful Synapse-specific
client tree there, but MDAD still intentionally keeps those paths out of
its broad worker regexes because they are deployment-sensitive and
auth-sensitive.
Refs:
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/docs/workers.md#historical-apps
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/client/devices.py#L49-L150
- https://github.com/element-hq/synapse/blob/b99a58719b274fcbb327fd8d7649185792bfd12c/synapse/rest/synapse/client/__init__.py#L39-L88
2026-03-14 23:31:51 +02:00
Slavi Pantaleev
dafac35a0e
matrix-synapse: route stream-backed client endpoints explicitly and add device_lists stream writer support
...
Some client API endpoints (e.g. keys/upload) are backed by Synapse stream writers and
should not rely on broad worker regexes or route-order fallthrough for correctness.
When explicit per-stream routing is missing, requests may be captured by generic, room, or client_reader workers, instead of:
- going to the configured stream writer
- or to `main` when that stream writer is not enabled
This refactors synapse-reverse-proxy-companion's routing so that web-facing stream-backed endpoint families
are handled explicitly and early, with deterministic writer-or-main fallback.
Add first-class support for the missing `device_lists` stream writer,
generalize the same routing model to `push_rules`,
and remove stale broad-route ownership for device-list-sensitive endpoints.
2026-03-14 01:42:08 +02:00
Slavi Pantaleev
76e13f8200
Add native Sliding Sync (MSC3575) endpoint to worker routing
...
The /_matrix/client/unstable/org.matrix.simplified_msc3575/sync endpoint
can be handled by generic workers, but Synapse's workers.md documentation
doesn't mention it. The code confirms it's worker-compatible:
- SlidingSyncRestServlet is registered via sync.register_servlets:
https://github.com/element-hq/synapse/blob/0dfcffab0f/synapse/rest/client/sync.py#L1128-L1131
- sync.register_servlets is NOT in the worker exclusion list:
https://github.com/element-hq/synapse/blob/0dfcffab0f/synapse/rest/__init__.py#L180-L194
- GenericWorkerStore includes SlidingSyncStore:
https://github.com/element-hq/synapse/blob/0dfcffab0f/synapse/app/generic_worker.py#L168
This adds the endpoint to both:
- matrix_synapse_workers_sync_worker_client_server_endpoints (for specialized sync workers with sticky routing)
- matrix_synapse_workers_generic_worker_endpoints (documenting generic worker capability)
2026-02-02 15:59:00 +02:00
Slavi Pantaleev
ac5dc5d44f
Pull in some additional Synapse workers routing configuration
...
Provoked by https://github.com/element-hq/synapse/pull/19281
which landed in Synapse v1.145.0, but we pull in a few other routes
that I noticed to be missing.
2026-01-14 12:07:09 +02:00
Suguru Hirahara
d9d4c6f05f
Add license information to roles/custom/matrix-synapse/vars/main.yml
...
Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org >
2025-03-04 19:22:43 +09:00
Suguru Hirahara
c1c1b3ada0
Replace triple dots with horizontal ellipsis (U+2026)
...
Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org >
2024-12-06 13:34:50 +09:00
Suguru Hirahara
ac90870e30
Fix capitalization: room id → room ID
...
Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org >
2024-10-16 02:24:52 +09:00
Slavi Pantaleev
c6d8a68e77
Add additional media repository prefix paths to matrix_synapse_workers_media_repository_endpoints
...
Related to https://github.com/element-hq/synapse/pull/17421
2024-07-16 18:10:27 +03:00
Slavi Pantaleev
7891268873
Do not hardcode https:// in all remaining places, refer to matrix_static_files_scheme
...
Fixes https://github.com/spantaleev/matrix-docker-ansible-deploy/issues/3333
2024-05-25 16:14:26 +03:00
Charles Wright
025a7e5c66
Merge branch 'spantaleev:master' into cvwright/room-workers-v2
2024-01-17 08:02:47 -06:00
Slavi Pantaleev
c0afcaa2e3
Replace (almost) all matrix-org/synapse references with element-hq/synapse
...
Issues and Pull Requests were not migrated to the new
organization/repository, so `matrix-org/synapse/pull` and
`matrix-org/synapse/issues` references were kept as-is.
`matrix-org/synapse-s3-storage-provider` references were also kept,
as that module still continues living under the `matrix-org` organization.
This patch mainly aims to change documentation-related things, not actual
usage in full yet. For polish that, another more comprehensive patch is coming later.
2024-01-17 08:02:47 +02:00
Charles Wright
5ca9a7269a
Add the new worker types to the list of available worker types
2024-01-16 10:58:46 -06:00
Charles Wright
db70230ae1
Add room-workers as a new preset, with new room workers, sync workers, client readers, and federation readers. Based on https://tcpipuk.github.io/synapse/index.html
2024-01-16 09:17:24 -06:00
Slavi Pantaleev
54fb153acf
Expose /_synapse/* APIs via matrix-synapse-reverse-proxy-companion
...
This also updates validation tasks and documentation, pointing to
variables in the matrix-synapse role which don't currently exist yet
(e.g. `matrix_synapse_container_labels_client_synapse_admin_api_enabled`).
These variables will be added soon, as Traefik labels are added to the
`matrix-synapse` role. At that point, the `matrix-synapse-reverse-proxy-companion` role
will be updated to also use them.
2024-01-04 11:37:17 +02:00
Slavi Pantaleev
ef90142720
Handle /notifications endpoint via workers
...
Related to https://github.com/matrix-org/synapse/pull/16265
2023-09-12 18:32:32 +03:00
Alexis Yushin
ba1d665bd9
make smtp tls configurable / optional
2023-07-27 11:26:15 +02:00
Slavi Pantaleev
8668b0d772
Do not handle ^/_matrix/client/unstable/org.matrix.msc2716/rooms/.*/batch_send$ from workers anymore
...
Related to https://github.com/matrix-org/synapse/commit/0f02f0b4da92229e88e27a92ea3bfa523457bfc1
2023-07-04 22:14:37 +03:00
Slavi Pantaleev
c8215c98e7
Load /capabilities endpoint on workers
...
Related to:
- https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/2656
- https://github.com/matrix-org/synapse/commit/e4a25d022c1e4b71e043b07324d95362f7fb4067
2023-04-25 15:16:03 +03:00
Slavi Pantaleev
905f0214cd
Load /directory/room/{roomAlias} endpoint on workers
...
Related to:
- https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/2656
- https://github.com/matrix-org/synapse/commit/4af0aec54dad261bcad240d8a878a1c16934e77c
2023-04-25 15:15:13 +03:00
Slavi Pantaleev
32fb27c16c
Whitelist 2 more APIs for Synapse workers
...
Related to:
- e55269e14f
- https://github.com/matrix-org/synapse/commit/3d70cc393fb32235bbeb94a0b97691dff5531f4d
- https://github.com/matrix-org/synapse/commit/4fc85e5a921c7200a54a7fd1e9b56b5d2fedc453
2023-03-28 16:23:25 +03:00
Slavi Pantaleev
fab6c03609
Allow some new endpoints to work on workers
...
Related to:
- https://github.com/matrix-org/synapse/commit/682d31c7023b6b7299e74bc631e4d2acc60f91ac
- https://github.com/matrix-org/synapse/commit/ecbe0ddbe7c47e05bc27b39dc10a9c30eafd2960
- https://github.com/matrix-org/synapse/commit/f4fc83ac755b8b06ecab1a31592308b03f8d2a5e
.. and https://github.com/spantaleev/matrix-docker-ansible-deploy/pull/2569
2023-03-14 19:21:43 +02:00
Slavi Pantaleev
13e7399104
Handle /timestamp_to_event via Synapse workers
...
Related to https://github.com/matrix-org/synapse/commit/8f10c8b054fc970838be9ae6f1f5aea95f166c98
2022-12-06 15:52:16 +02:00
Slavi Pantaleev
07c23b7cb0
Remove matrix_synapse_role_executed and various tasks that check it
...
This was useful when the order of these roles in relation to Synapse
mattered (when we were injecting stuff into Synapse variables during
runtime). This is no longer the case since 0ea7cb5d18 , so all of
this can be removed.
2022-11-23 16:13:07 +02:00
Slavi Pantaleev
6c524302d6
Add intentionally-ignored-endpoints to intentionally-ignored-endpoints for completeness
2022-11-05 07:40:56 +02:00
Slavi Pantaleev
a9e2607d80
Fix yaml[comments-indentation] in workers config and remove automation
2022-11-05 07:29:47 +02:00
Aine
da4a82c48b
remove old workers.yml (already saved into main.yml)
2022-11-04 19:02:24 +02:00
Aine
37d4bf0d1c
fix workers-doc-to-yaml
2022-11-04 18:55:57 +02:00
Slavi Pantaleev
410a915a8a
Move roles/matrix* to roles/custom/matrix*
...
This paves the way for installing other roles into `roles/galaxy` using `ansible-galaxy`,
similar to how it's done in:
- https://github.com/spantaleev/gitea-docker-ansible-deploy
- https://github.com/spantaleev/nextcloud-docker-ansible-deploy
In the near future, we'll be removing a lot of the shared role code from here
and using upstream roles for it. Some of the core `matrix-*` roles have
already been extracted out into other reusable roles:
- https://github.com/devture/com.devture.ansible.role.postgres
- https://github.com/devture/com.devture.ansible.role.systemd_docker_base
- https://github.com/devture/com.devture.ansible.role.timesync
- https://github.com/devture/com.devture.ansible.role.vars_preserver
- https://github.com/devture/com.devture.ansible.role.playbook_runtime_messages
- https://github.com/devture/com.devture.ansible.role.playbook_help
We just need to migrate to those.
2022-11-03 09:11:29 +02:00