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

Dockerfile-workers: give the master its own log config #12466

Merged
merged 3 commits into from
Apr 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.d/12466.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Dockerfile-workers: give the master its own log config.
48 changes: 31 additions & 17 deletions docker/configure_workers_and_start.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
import os
import subprocess
import sys
from typing import Any, Dict, Set
from typing import Any, Dict, Mapping, Set

import jinja2
import yaml
Expand Down Expand Up @@ -341,7 +341,7 @@ def generate_worker_files(environ, config_path: str, data_dir: str):
# base shared worker jinja2 template.
#
# This config file will be passed to all workers, included Synapse's main process.
shared_config = {"listeners": listeners}
shared_config: Dict[str, Any] = {"listeners": listeners}

# The supervisord config. The contents of which will be inserted into the
# base supervisord jinja2 template.
Expand Down Expand Up @@ -446,21 +446,7 @@ def generate_worker_files(environ, config_path: str, data_dir: str):

# Write out the worker's logging config file

# Check whether we should write worker logs to disk, in addition to the console
extra_log_template_args = {}
if environ.get("SYNAPSE_WORKERS_WRITE_LOGS_TO_DISK"):
extra_log_template_args["LOG_FILE_PATH"] = "{dir}/logs/{name}.log".format(
dir=data_dir, name=worker_name
)

# Render and write the file
log_config_filepath = "/conf/workers/{name}.log.config".format(name=worker_name)
convert(
"/conf/log.config",
log_config_filepath,
worker_name=worker_name,
**extra_log_template_args,
)
log_config_filepath = generate_worker_log_config(environ, worker_name, data_dir)

# Then a worker config file
convert(
Expand Down Expand Up @@ -496,6 +482,10 @@ def generate_worker_files(environ, config_path: str, data_dir: str):

# Finally, we'll write out the config files.

# log config for the master process
master_log_config = generate_worker_log_config(environ, "master", data_dir)
shared_config["log_config"] = master_log_config

# Shared homeserver config
convert(
"/conf/shared.yaml.j2",
Expand Down Expand Up @@ -532,6 +522,30 @@ def generate_worker_files(environ, config_path: str, data_dir: str):
os.mkdir(log_dir)


def generate_worker_log_config(
environ: Mapping[str, str], worker_name: str, data_dir: str
) -> str:
"""Generate a log.config file for the given worker.

Returns: the path to the generated file
"""
# Check whether we should write worker logs to disk, in addition to the console
extra_log_template_args = {}
if environ.get("SYNAPSE_WORKERS_WRITE_LOGS_TO_DISK"):
extra_log_template_args["LOG_FILE_PATH"] = "{dir}/logs/{name}.log".format(
dir=data_dir, name=worker_name
)
# Render and write the file
log_config_filepath = "/conf/workers/{name}.log.config".format(name=worker_name)
convert(
"/conf/log.config",
log_config_filepath,
worker_name=worker_name,
**extra_log_template_args,
)
return log_config_filepath


def start_supervisord():
"""Starts up supervisord which then starts and monitors all other necessary processes

Expand Down