scripts: Only stop/restart zulip_deliver_scheduled_* processes if known.

Running `supervisorctl stop` or `supervisorctl restart` on a process
name which is not known is an error:

```
$ supervisorctl stop nonexistent-process
nonexistent-process: ERROR (no such process)
$ echo $?
1
```

ef6d0ec5ca moved
zulip_deliver_scheduled_* out of the `workers:` group.  Since upgrades
run `stop-server` before applying puppet, the list of processes at
that time is from the previous version of Zulip, so may not have the
new `zulip_deliver_scheduled_*` names -- and the `stop-server` will
hence fail.

If the upgrade is not applying puppet, it will `restart-server`. At
that point, the old names will still be in the configuration, so
relying on the current `superisorctl status` is the best gauge of what
exists to restart.

In short, only ever stop/start/restart the `zulip_deliver_scheduled_*`
processes if `supervisorctl status` knows about them already.
This commit is contained in:
Alex Vandiver 2021-07-08 18:26:26 -07:00
parent 7e07bbc192
commit 08c39a7388
2 changed files with 14 additions and 4 deletions

View File

@ -80,11 +80,16 @@ if has_application_server():
workers.extend(list_supervisor_processes("zulip-workers:*")) workers.extend(list_supervisor_processes("zulip-workers:*"))
if has_application_server(once=True): if has_application_server(once=True):
# These used to be included in "zulip-workers:*"; since we may
# be restarting an older version of Zulip, which has not
# applied puppet to reload the new list of processes, only
# stop them if they currently exist according to
# `supervisorctl`.
workers.extend( workers.extend(
[ list_supervisor_processes(
"zulip_deliver_scheduled_emails", "zulip_deliver_scheduled_emails",
"zulip_deliver_scheduled_messages", "zulip_deliver_scheduled_messages",
] )
) )
if has_process_fts_updates(): if has_process_fts_updates():

View File

@ -13,6 +13,7 @@ from scripts.lib.zulip_tools import (
WARNING, WARNING,
has_application_server, has_application_server,
has_process_fts_updates, has_process_fts_updates,
list_supervisor_processes,
) )
deploy_path = os.path.realpath(os.path.join(os.path.dirname(__file__), "..")) deploy_path = os.path.realpath(os.path.join(os.path.dirname(__file__), ".."))
@ -41,11 +42,15 @@ if has_application_server():
services.extend(["zulip-tornado", "zulip-tornado:*"]) services.extend(["zulip-tornado", "zulip-tornado:*"])
services.append("zulip-workers:*") services.append("zulip-workers:*")
if has_application_server(once=True): if has_application_server(once=True):
# These used to be included in "zulip-workers:*"; since we may
# be stopping an older version of Zulip, which has not applied
# puppet to reload the new list of processes, only stop them
# if they currently exist according to `supervisorctl`.
services.extend( services.extend(
[ list_supervisor_processes(
"zulip_deliver_scheduled_emails", "zulip_deliver_scheduled_emails",
"zulip_deliver_scheduled_messages", "zulip_deliver_scheduled_messages",
] ),
) )
subprocess.check_call(["supervisorctl", "stop", *services]) subprocess.check_call(["supervisorctl", "stop", *services])