Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
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/12405.misc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix up healthcheck generation for workers docker image.
3 changes: 0 additions & 3 deletions docker/Dockerfile-workers
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,6 @@ COPY ./docker/conf-workers/* /conf/
# Expose nginx listener port
EXPOSE 8080/tcp

# Volume for user-editable config files, logs etc.
VOLUME ["/data"]
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is just a driveby while Im in the area, for the same reason as #11997.


# A script to read environment variables and create the necessary
# files to run the desired worker configuration. Will start supervisord.
COPY ./docker/configure_workers_and_start.py /configure_workers_and_start.py
Expand Down
16 changes: 9 additions & 7 deletions docker/configure_workers_and_start.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ def generate_worker_files(environ, config_path: str, data_dir: str):

Args:
environ: _Environ[str]
config_path: Where to output the generated Synapse main worker config file.
config_path: The location of the generated Synapse main worker config file.
data_dir: The location of the synapse data directory. Where log and
user-facing config files live.
"""
Expand All @@ -320,7 +320,8 @@ def generate_worker_files(environ, config_path: str, data_dir: str):
# and adding a replication listener.

# First read the original config file and extract the listeners block. Then we'll add
# another listener for replication. Later we'll write out the result.
# another listener for replication. Later we'll write out the result to the shared
# config file.
listeners = [
{
"port": 9093,
Expand Down Expand Up @@ -386,6 +387,10 @@ def generate_worker_files(environ, config_path: str, data_dir: str):
# worker_type + instance #
worker_type_counter = {}

# A list of internal endpoints to healthcheck, starting with the main process
# which exists even if no workers do.
healthcheck_urls = ["http://localhost:8080/health"]

# For each worker type specified by the user, create config values
for worker_type in worker_types:
worker_type = worker_type.strip()
Expand All @@ -410,6 +415,8 @@ def generate_worker_files(environ, config_path: str, data_dir: str):
# Update the shared config with any worker-type specific options
shared_config.update(worker_config["shared_extra_conf"])

healthcheck_urls.append("http://localhost:%d/health" % (worker_port,))

# Check if more than one instance of this worker type has been specified
worker_type_total_count = worker_types.count(worker_type)
if worker_type_total_count > 1:
Expand Down Expand Up @@ -475,15 +482,10 @@ def generate_worker_files(environ, config_path: str, data_dir: str):
# Determine the load-balancing upstreams to configure
nginx_upstream_config = ""

# At the same time, prepare a list of internal endpoints to healthcheck
# starting with the main process which exists even if no workers do.
healthcheck_urls = ["http://localhost:8080/health"]

for upstream_worker_type, upstream_worker_ports in nginx_upstreams.items():
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nginx_upstreams is only populated when there is more than one worker of a given type configured.

body = ""
for port in upstream_worker_ports:
body += " server localhost:%d;\n" % (port,)
healthcheck_urls.append("http://localhost:%d/health" % (port,))

# Add to the list of configured upstreams
nginx_upstream_config += NGINX_UPSTREAM_CONFIG_BLOCK.format(
Expand Down
2 changes: 1 addition & 1 deletion scripts-dev/complement.sh
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ if [[ -n "$WORKERS" ]]; then
COMPLEMENT_DOCKERFILE=SynapseWorkers.Dockerfile
# And provide some more configuration to complement.
export COMPLEMENT_CA=true
export COMPLEMENT_SPAWN_HS_TIMEOUT_SECS=25
export COMPLEMENT_SPAWN_HS_TIMEOUT_SECS=60
else
export COMPLEMENT_BASE_IMAGE=complement-synapse
COMPLEMENT_DOCKERFILE=Synapse.Dockerfile
Expand Down