If an instance of pulp_celerybeat dies unexpectedly, Pulp incorrectly tries to "cancel all tasks in its queue"
This bug is introduced with https://github.com/pulp/pulp/pull/1940/ because before then it wasn't possible to run multiple pulp_celerybeat processes concurrently.
1. Start a clustered pulp installation with two machines in the cluster. Suppose these hostnames are called boxA and boxB. Start all pulp_* and httpd services on boxA.
2. Start a second pulp_celerybeat instance on boxB.
3. Use the /status/ API to verify that you can see both entries. They should show as 'scheduler@boxA' and 'scheduler@boxB'.
4. kill -9 the pulp_celerybeat service on boxB.
5. Wait for 6 or 7 minutes
6. Observe a traceback similar to the following in the logs of boxA.
pulp.server.async.scheduler:ERROR: Workers 'scheduler@boxB' has gone missing, removing from list of workers pulp.server.async.tasks:ERROR: The worker named scheduler@boxB is missing. Canceling the tasks in its queue.
Two things are wrong with this, and both of them are located in this section of code.
(1) It should never call _delete_worker(worker.name) which attempts to cancel tasks, log, and clean up reservations, none of which make sense to do for pulp_celerybeat. Instead it should delete the worker record synchronously and continue.
(2) The error message is misleading. I'll suggest it should read something like:
pulp_celerybeat 'scheduler@boxB' has gone missing.
Fixes a misleading error message when a duplicate celerybeat worker is killed. Moved and renamed scheduler constants for consistency and clarity. closes #1113
Please register to edit this issue