Skip to content
Snippets Groups Projects
Unverified Commit a57863d2 authored by Romain Bouyé's avatar Romain Bouyé Committed by GitHub
Browse files

synctl warns when no process is stopped and avoids start (#6598)

* If an error occurs when stopping a process synctl now logs a warning.
* During a restart, synctl will avoid attempting to start Synapse if an error
  occurs during stopping Synapse.
parent ab3e19d8
No related branches found
No related tags found
No related merge requests found
`synctl` now warns if it was unable to stop Synapse and will not attempt to start Synapse if nothing was stopped. Contributed by Romain Bouyé.
......@@ -142,12 +142,23 @@ def start_worker(app: str, configfile: str, worker_configfile: str) -> bool:
return False
def stop(pidfile, app):
def stop(pidfile: str, app: str) -> bool:
"""Attempts to kill a synapse worker from the pidfile.
Args:
pidfile: path to file containing worker's pid
app: name of the worker's appservice
Returns:
True if the process stopped successfully
False if process was already stopped or an error occured
"""
if os.path.exists(pidfile):
pid = int(open(pidfile).read())
try:
os.kill(pid, signal.SIGTERM)
write("stopped %s" % (app,), colour=GREEN)
return True
except OSError as err:
if err.errno == errno.ESRCH:
write("%s not running" % (app,), colour=YELLOW)
......@@ -155,6 +166,14 @@ def stop(pidfile, app):
abort("Cannot stop %s: Operation not permitted" % (app,))
else:
abort("Cannot stop %s: Unknown error" % (app,))
return False
else:
write(
"No running worker of %s found (from %s)\nThe process might be managed by another controller (e.g. systemd)"
% (app, pidfile),
colour=YELLOW,
)
return False
Worker = collections.namedtuple(
......@@ -300,11 +319,17 @@ def main():
action = options.action
if action == "stop" or action == "restart":
has_stopped = True
for worker in workers:
stop(worker.pidfile, worker.app)
if not stop(worker.pidfile, worker.app):
# A worker could not be stopped.
has_stopped = False
if start_stop_synapse:
stop(pidfile, "synapse.app.homeserver")
if not stop(pidfile, "synapse.app.homeserver"):
has_stopped = False
if not has_stopped:
sys.exit(1)
# Wait for synapse to actually shutdown before starting it again
if action == "restart":
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment