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

Commit

Permalink
Merge pull request #4853 from matrix-org/erikj/worker_docker_ci
Browse files Browse the repository at this point in the history
Allow passing --daemonize to workers
  • Loading branch information
erikjohnston authored Mar 15, 2019
2 parents a6d8419 + 9ad448c commit b0fa3f6
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 17 deletions.
1 change: 1 addition & 0 deletions changelog.d/4853.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Allow passing --daemonize flags to workers in the same way as with master.
18 changes: 12 additions & 6 deletions synapse/app/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,12 +63,13 @@ def start_worker_reactor(appname, config):

start_reactor(
appname,
config.soft_file_limit,
config.gc_thresholds,
config.worker_pid_file,
config.worker_daemonize,
config.worker_cpu_affinity,
logger,
soft_file_limit=config.soft_file_limit,
gc_thresholds=config.gc_thresholds,
pid_file=config.worker_pid_file,
daemonize=config.worker_daemonize,
cpu_affinity=config.worker_cpu_affinity,
print_pidfile=config.print_pidfile,
logger=logger,
)


Expand All @@ -79,6 +80,7 @@ def start_reactor(
pid_file,
daemonize,
cpu_affinity,
print_pidfile,
logger,
):
""" Run the reactor in the main process
Expand All @@ -93,6 +95,7 @@ def start_reactor(
pid_file (str): name of pid file to write to if daemonize is True
daemonize (bool): true to run the reactor in a background process
cpu_affinity (int|None): cpu affinity mask
print_pidfile (bool): whether to print the pid file, if daemonize is True
logger (logging.Logger): logger instance to pass to Daemonize
"""

Expand Down Expand Up @@ -124,6 +127,9 @@ def run():
reactor.run()

if daemonize:
if print_pidfile:
print(pid_file)

daemon = Daemonize(
app=appname,
pid=pid_file,
Expand Down
16 changes: 7 additions & 9 deletions synapse/app/homeserver.py
Original file line number Diff line number Diff line change
Expand Up @@ -637,17 +637,15 @@ def start_generate_monthly_active_users():
# be quite busy the first few minutes
clock.call_later(5 * 60, start_phone_stats_home)

if hs.config.daemonize and hs.config.print_pidfile:
print(hs.config.pid_file)

_base.start_reactor(
"synapse-homeserver",
hs.config.soft_file_limit,
hs.config.gc_thresholds,
hs.config.pid_file,
hs.config.daemonize,
hs.config.cpu_affinity,
logger,
soft_file_limit=hs.config.soft_file_limit,
gc_thresholds=hs.config.gc_thresholds,
pid_file=hs.config.pid_file,
daemonize=hs.config.daemonize,
cpu_affinity=hs.config.cpu_affinity,
print_pidfile=hs.config.print_pidfile,
logger=logger,
)


Expand Down
8 changes: 7 additions & 1 deletion synapse/config/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -214,14 +214,20 @@ def load_config(cls, description, argv):
" Defaults to the directory containing the last config file",
)

obj = cls()

obj.invoke_all("add_arguments", config_parser)

config_args = config_parser.parse_args(argv)

config_files = find_config_files(search_paths=config_args.config_path)

obj = cls()
obj.read_config_files(
config_files, keys_directory=config_args.keys_directory, generate_keys=False
)

obj.invoke_all("read_arguments", config_args)

return obj

@classmethod
Expand Down
28 changes: 27 additions & 1 deletion synapse/config/workers.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ def read_config(self, config):
if self.worker_app == "synapse.app.homeserver":
self.worker_app = None

self.worker_listeners = config.get("worker_listeners")
self.worker_listeners = config.get("worker_listeners", [])
self.worker_daemonize = config.get("worker_daemonize")
self.worker_pid_file = config.get("worker_pid_file")
self.worker_log_file = config.get("worker_log_file")
Expand All @@ -48,6 +48,17 @@ def read_config(self, config):
self.worker_main_http_uri = config.get("worker_main_http_uri", None)
self.worker_cpu_affinity = config.get("worker_cpu_affinity")

# This option is really only here to support `--manhole` command line
# argument.
manhole = config.get("worker_manhole")
if manhole:
self.worker_listeners.append({
"port": manhole,
"bind_addresses": ["127.0.0.1"],
"type": "manhole",
"tls": False,
})

if self.worker_listeners:
for listener in self.worker_listeners:
bind_address = listener.pop("bind_address", None)
Expand All @@ -57,3 +68,18 @@ def read_config(self, config):
bind_addresses.append(bind_address)
elif not bind_addresses:
bind_addresses.append('')

def read_arguments(self, args):
# We support a bunch of command line arguments that override options in
# the config. A lot of these options have a worker_* prefix when running
# on workers so we also have to override them when command line options
# are specified.

if args.daemonize is not None:
self.worker_daemonize = args.daemonize
if args.log_config is not None:
self.worker_log_config = args.log_config
if args.log_file is not None:
self.worker_log_file = args.log_file
if args.manhole is not None:
self.worker_manhole = args.worker_manhole

0 comments on commit b0fa3f6

Please sign in to comment.