Commit Graph
22 Commits
Author SHA1 Message Date
QEDeDandSlavi Pantaleev 7b44e13276 Restart Synapse only when its files or image changed
With conditional restart (install-* tags), the homeserver entry for
Synapse fell through to `restart_necessary: true`, and the worker
entries carried no flag at all, which systemd_service_manager also
treats as "restart". Every install-all and install-service synapse
therefore restarted Synapse and all of its workers, even when nothing
had changed. Without workers, systemd also restarted most bridges and
bots, whose units require matrix-synapse.service.

Compute matrix_synapse_restart_necessary from the tasks that install
what Synapse runs: homeserver.yaml, the initial config and signing key,
the log config, labels and systemd service, the container image (pulled,
self-built or customized), each worker's config, labels and systemd
service, and the downloaded or cloned extension modules. Workers follow
the same decision, as they read the same files.

Synapse also mounts the appservice registration files written by other
roles. Add matrix_homeserver_app_service_registration_changed in
group_vars/matrix_servers, which checks the registered result of each
task installing one of the files listed in
matrix_homeserver_container_extra_arguments_auto, so that a changed
registration still restarts Synapse and its workers. The double-puppet
role did not register its result; it does now.

The Synapse image pull and three extension downloads all registered
their result as `result`. The downloads run first, so the pull's result
overwrote theirs before the restart decision could read them; they now
use role-prefixed names.
2026-10-19 09:08:29 +03:00
QEDeDandSlavi Pantaleev c909ff65bd Fix missed service restarts with Synapse workers enabled
With Synapse workers enabled, inject_worker.yml appends each worker's
service to devture_systemd_service_manager_services_list_auto with
set_fact. That templates the whole list, including every service's
restart_necessary value, when the matrix-synapse role initializes, and
the resulting fact outranks group_vars. Services whose restart flag is
set after that point are then only started, not restarted, on install-*
runs even when their configuration changed. That includes the
matrix-synapse role's own reverse-proxy companion, Goofys and S3 storage
provider timer, and the services of every later role that sets a restart
flag (Element, Grafana, Prometheus, Traefik and others).

Collect worker services in matrix_synapse_worker_systemd_services_list
and append it to the auto list in group_vars/matrix_servers, like the
other entries there, so the list stays lazy.

Include inject_worker.yml once and loop inside each task instead of
including it once per worker. With 19 workers this cuts the step from
26.2 s to 5.3 s on ansible-core 2.20.1 (controller-only, one run). Also
fix two stream-writer failure messages that referenced the undefined
`item`, and report all missing worker properties in one message.
2026-10-19 09:08:29 +03:00
QEDeDandSlavi Pantaleev f0f496b6ba Quote YAML mode values to satisfy octal lint rules 2026-02-16 13:19:10 +02:00
Suguru Hirahara 54b7df44ec Add license information to files in matrix-synapse/tasks/synapse
Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org>
2025-03-04 19:20:20 +09:00
Michael Hollister bd027159b1 Added extra systemd service arguments to synapse workers and proxy companion 2024-01-24 13:14:34 -06:00
Charles Wright 1379200e9d Add new worker types to the dynamic workers list 2024-01-16 11:13:51 -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 41a52945d6 Add support for exposing metrics for Synapse workers 2024-01-12 12:16:06 +02:00
Slavi Pantaleev b71375fac7 Disable healthcheck for Synapse workers which serve no web traffic
This was mostly affecting the stream writer (events) worker, which was
being reported as unhealthy. It wasn't causing any issues, but it just
looked odd and was confusing people.

As an alternative to hitting the regular `/health` healthcheck route (on
the "client" API which this stream writer does not expose),
we may have went for hitting some "replication" API endpoint instead.

This is more complicated and likely unnecessary.
2023-05-19 18:29:02 +03:00
Slavi Pantaleev 2d051679c0 Ensure instance_map.port is numeric
Fixup related to https://github.com/matrix-org/synapse/pull/15431
2023-04-25 15:26:30 +03:00
Slavi Pantaleev 632026513e Add matrix_synapse_uid, matrix_synapse_gid and matrix_synapse_username 2023-02-17 17:16:50 +02:00
Slavi Pantaleev 424f79df3a Replace synapse.app.pusher and synapse.app.federation_sender with synapse.app.generic_worker
Related to https://github.com/matrix-org/synapse/commit/3479599387164aca2613e88d169719
2023-01-17 15:55:57 +02:00
Slavi Pantaleev 663a17ea10 Fix ansible-lint-reported errors 2022-11-24 17:39:34 +02:00
Slavi Pantaleev c37cf42427 Do not delete and re-create Synapse worker configs needlessly
We had checks to avoid stopping/deleting systemd services for workers
that used to exist and will continue to exist, but we were deleting
config files for workers each time.. Only to recreate them again later.

This lead to:

- too many misleading "changed" tasks
- too much unnecessary work
- potential failures during playbook execution possibly leaving the
  system in a bad state (no worker config files)
2022-11-24 17:06:31 +02:00
Slavi Pantaleev 2e7b5c7b02 Untangle the setup import/include mess in matrix-synapse 2022-11-24 16:27:11 +02:00
Slavi Pantaleev 735bacca89 Do not run matrix-nginx-proxy config injection tasks unless necessary
These `init.yml` (now `inject_into_nginx_proxy.yml`) tasks do not need
to `always` run. They only need to run for `setup-all` and
`setup-nginx-proxy`. Unless we're dealing with these 2 tags, we can
spare ourselves a lot of work.

This patch also moves the `when` statement from `init.yml` into
`main.yml` in an effort to further optimize things by potentially
avoiding the extra file include.
2022-11-23 15:52:58 +02:00
Slavi Pantaleev ccfaefa4d2 Add service groups 2022-11-23 11:45:47 +02:00
Slavi Pantaleev 93d4f8d425 Replace matrix-common-after systemd service management with com.devture.ansible.role.systemd_service_manager 2022-11-23 11:45:46 +02:00
Slavi Pantaleev 360e643f84 Add service priorities - try to stop/start them in an optimal order 2022-11-23 11:45:46 +02:00
Slavi Pantaleev 51674887ff Fix Synapse pusher_instances not being populated correctly
This caused push notifications to be delivered more than once
if multiple `pusher` workers were enabled.
2022-11-08 17:40:44 +02:00
Slavi Pantaleev 835d2e9581 matrix_systemd_path -> devture_systemd_docker_base_systemd_path (via com.devture.ansible.role.systemd_docker_base) 2022-11-04 16:38:38 +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