Merge pull request #2774 from matrix-org/erikj/synctl

When using synctl with workers, don't start the main synapse automatically
This commit is contained in:
Erik Johnston 2018-01-12 12:00:07 +00:00 committed by GitHub
commit fefeb0ab0e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 5 deletions

View File

@ -1,3 +1,10 @@
Unreleased
==========
synctl no longer starts the main synapse when using ``-a`` option with workers.
A new worker file should be added with ``worker_app: synapse.app.homeserver``
Changes in synapse v0.26.0 (2018-01-05) Changes in synapse v0.26.0 (2018-01-05)
======================================= =======================================

View File

@ -184,6 +184,9 @@ def main():
worker_configfiles.append(worker_configfile) worker_configfiles.append(worker_configfile)
if options.all_processes: if options.all_processes:
# To start the main synapse with -a you need to add a worker file
# with worker_app == "synapse.app.homeserver"
start_stop_synapse = False
worker_configdir = options.all_processes worker_configdir = options.all_processes
if not os.path.isdir(worker_configdir): if not os.path.isdir(worker_configdir):
write( write(
@ -200,11 +203,29 @@ def main():
with open(worker_configfile) as stream: with open(worker_configfile) as stream:
worker_config = yaml.load(stream) worker_config = yaml.load(stream)
worker_app = worker_config["worker_app"] worker_app = worker_config["worker_app"]
worker_pidfile = worker_config["worker_pid_file"] if worker_app == "synapse.app.homeserver":
worker_daemonize = worker_config["worker_daemonize"] # We need to special case all of this to pick up options that may
assert worker_daemonize, "In config %r: expected '%s' to be True" % ( # be set in the main config file or in this worker config file.
worker_configfile, "worker_daemonize") worker_pidfile = (
worker_cache_factor = worker_config.get("synctl_cache_factor") worker_config.get("pid_file")
or pidfile
)
worker_cache_factor = worker_config.get("synctl_cache_factor") or cache_factor
daemonize = worker_config.get("daemonize") or config.get("daemonize")
assert daemonize, "Main process must have daemonize set to true"
# The master process doesn't support using worker_* config.
for key in worker_config:
if key == "worker_app": # But we allow worker_app
continue
assert not key.startswith("worker_"), \
"Main process cannot use worker_* config"
else:
worker_pidfile = worker_config["worker_pid_file"]
worker_daemonize = worker_config["worker_daemonize"]
assert worker_daemonize, "In config %r: expected '%s' to be True" % (
worker_configfile, "worker_daemonize")
worker_cache_factor = worker_config.get("synctl_cache_factor")
workers.append(Worker( workers.append(Worker(
worker_app, worker_configfile, worker_pidfile, worker_cache_factor, worker_app, worker_configfile, worker_pidfile, worker_cache_factor,
)) ))

View File

@ -23,6 +23,11 @@ class WorkerConfig(Config):
def read_config(self, config): def read_config(self, config):
self.worker_app = config.get("worker_app") self.worker_app = config.get("worker_app")
# Canonicalise worker_app so that master always has None
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_daemonize = config.get("worker_daemonize")
self.worker_pid_file = config.get("worker_pid_file") self.worker_pid_file = config.get("worker_pid_file")