Correctly handle all command line options

This commit is contained in:
Erik Johnston 2019-03-14 13:32:14 +00:00
parent f5d57d4848
commit 9ad448c1e5
3 changed files with 42 additions and 16 deletions

View File

@ -63,12 +63,13 @@ def start_worker_reactor(appname, config):
start_reactor( start_reactor(
appname, appname,
config.soft_file_limit, soft_file_limit=config.soft_file_limit,
config.gc_thresholds, gc_thresholds=config.gc_thresholds,
config.worker_pid_file, pid_file=config.worker_pid_file,
config.worker_daemonize, daemonize=config.worker_daemonize,
config.worker_cpu_affinity, cpu_affinity=config.worker_cpu_affinity,
logger, print_pidfile=config.print_pidfile,
logger=logger,
) )
@ -79,6 +80,7 @@ def start_reactor(
pid_file, pid_file,
daemonize, daemonize,
cpu_affinity, cpu_affinity,
print_pidfile,
logger, logger,
): ):
""" Run the reactor in the main process """ Run the reactor in the main process
@ -93,6 +95,7 @@ def start_reactor(
pid_file (str): name of pid file to write to if daemonize is True 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 daemonize (bool): true to run the reactor in a background process
cpu_affinity (int|None): cpu affinity mask 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 logger (logging.Logger): logger instance to pass to Daemonize
""" """
@ -124,6 +127,9 @@ def start_reactor(
reactor.run() reactor.run()
if daemonize: if daemonize:
if print_pidfile:
print(pid_file)
daemon = Daemonize( daemon = Daemonize(
app=appname, app=appname,
pid=pid_file, pid=pid_file,

View File

@ -636,17 +636,15 @@ def run(hs):
# be quite busy the first few minutes # be quite busy the first few minutes
clock.call_later(5 * 60, start_phone_stats_home) 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( _base.start_reactor(
"synapse-homeserver", "synapse-homeserver",
hs.config.soft_file_limit, soft_file_limit=hs.config.soft_file_limit,
hs.config.gc_thresholds, gc_thresholds=hs.config.gc_thresholds,
hs.config.pid_file, pid_file=hs.config.pid_file,
hs.config.daemonize, daemonize=hs.config.daemonize,
hs.config.cpu_affinity, cpu_affinity=hs.config.cpu_affinity,
logger, print_pidfile=hs.config.print_pidfile,
logger=logger,
) )

View File

@ -28,7 +28,7 @@ class WorkerConfig(Config):
if self.worker_app == "synapse.app.homeserver": if self.worker_app == "synapse.app.homeserver":
self.worker_app = None 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_daemonize = config.get("worker_daemonize")
self.worker_pid_file = config.get("worker_pid_file") self.worker_pid_file = config.get("worker_pid_file")
self.worker_log_file = config.get("worker_log_file") self.worker_log_file = config.get("worker_log_file")
@ -48,6 +48,17 @@ class WorkerConfig(Config):
self.worker_main_http_uri = config.get("worker_main_http_uri", None) self.worker_main_http_uri = config.get("worker_main_http_uri", None)
self.worker_cpu_affinity = config.get("worker_cpu_affinity") 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: if self.worker_listeners:
for listener in self.worker_listeners: for listener in self.worker_listeners:
bind_address = listener.pop("bind_address", None) bind_address = listener.pop("bind_address", None)
@ -59,5 +70,16 @@ class WorkerConfig(Config):
bind_addresses.append('') bind_addresses.append('')
def read_arguments(self, args): 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: if args.daemonize is not None:
self.worker_daemonize = args.daemonize 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