diff --git a/synapse/app/synctl.py b/synapse/app/synctl.py
index d658f967ba..356e5cb6a7 100755
--- a/synapse/app/synctl.py
+++ b/synapse/app/synctl.py
@@ -111,7 +111,7 @@ def stop(pidfile, app):
Worker = collections.namedtuple("Worker", [
- "app", "configfile", "pidfile", "cache_factor"
+ "app", "configfile", "pidfile", "cache_factor", "cache_factors",
])
@@ -218,6 +218,10 @@ def main():
or pidfile
)
worker_cache_factor = worker_config.get("synctl_cache_factor") or cache_factor
+ worker_cache_factors = (
+ worker_config.get("synctl_cache_factors")
+ or cache_factors
+ )
daemonize = worker_config.get("daemonize") or config.get("daemonize")
assert daemonize, "Main process must have daemonize set to true"
@@ -233,8 +237,10 @@ def main():
assert worker_daemonize, "In config %r: expected '%s' to be True" % (
worker_configfile, "worker_daemonize")
worker_cache_factor = worker_config.get("synctl_cache_factor")
+ worker_cache_factors = worker_config.get("synctl_cache_factors", {})
workers.append(Worker(
worker_app, worker_configfile, worker_pidfile, worker_cache_factor,
+ worker_cache_factors,
))
action = options.action
@@ -269,15 +275,19 @@ def main():
start(configfile)
for worker in workers:
+ env = os.environ.copy()
+
if worker.cache_factor:
os.environ["SYNAPSE_CACHE_FACTOR"] = str(worker.cache_factor)
+ for cache_name, factor in worker.cache_factors.iteritems():
+ os.environ["SYNAPSE_CACHE_FACTOR_" + cache_name.upper()] = str(factor)
+
start_worker(worker.app, configfile, worker.configfile)
- if cache_factor:
- os.environ["SYNAPSE_CACHE_FACTOR"] = str(cache_factor)
- else:
- os.environ.pop("SYNAPSE_CACHE_FACTOR", None)
+ # Reset env back to the original
+ os.environ.clear()
+ os.environ.update(env)
if __name__ == "__main__":
|