Bug #75478
Sur un crash dans un job de cron, le statut du tenant n'a pas été posé à terminé bloquant les jobs pendant 1 journée
0%
Description
Cf. #75438-5
La trace qui bloque le cron : https://sentry.entrouvert.org/entrouvert/publik/issues/108094/?environment=prod
AttributeError: 'NoneType' object has no attribute 'cursor' File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "django/core/management/__init__.py", line 419, in execute_from_command_line utility.execute() File "django/core/management/__init__.py", line 413, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "django/core/management/base.py", line 354, in run_from_argv self.execute(*args, **cmd_options) File "django/core/management/base.py", line 398, in execute output = self.handle(*args, **options) File "wcs/qommon/management/commands/cron.py", line 114, in handle sql.mark_cron_status('done') File "wcs/sql.py", line 742, in f return func(*args, **kwargs) File "wcs/sql.py", line 5141, in mark_cron_status conn, cur = get_connection_and_cursor() File "wcs/sql.py", line 620, in get_connection_and_cursor cur = conn.cursor()
effectivement si on a plus de base, il sera difficile de marquer la tâche comme terminée :/ On a le choix soit on attend un peu, soit on pose une pierre tombale ailleurs (genre dans /var/lib/wcs/tenants/<tenant>/cron-crashed) pour récupérer ça au prochain cron.
History
Updated by Benjamin Dauvergne 5 days ago
- ajouter une colonne hearbeat : datetime.
- régulièrement pendant les jobs appeler un update_cron_hearbeat() pour dire que ça tourne toujours
- changer la condition à
now() - heartbeat > 10 minutes
- sur un update_cron_hearbeat() si la condition est déjà fausse, crasher proprement (ça veut dire qu'on avance trpo lentement)
On peut peut-être ne pas ajouter de colonne et réutiliser timestamp (code à relire).
Updated by Frédéric Péters about 11 hours ago
Avant de lancer quoique ce soit, il y a déjà une détection de cron anormalement coupé :
running += 1 if now() - timestamp > datetime.timedelta(days=1): stalled_tenants.append(hostname)
Le sujet serait simplement de réduire ce delta ?
Updated by Benjamin Dauvergne about 11 hours ago
Il faudrait mettre 20 minutes et ce sera trop court.
Updated by Frédéric Péters about 10 hours ago
Quel problème à mettre, par exemple, 6 heures ? Sur le ticket pointé, ça aurait été suffisant. Et la situation (indisponibilité du serveur SQL) est suffisamment anormale et rare. (pour rester sur une correction simple).
Updated by Benjamin Dauvergne about 10 hours ago
- Assignee deleted (
Benjamin Dauvergne)
Frédéric Péters a écrit :
Quel problème à mettre, par exemple, 6 heures ? Sur le ticket pointé, ça aurait été suffisant. Et la situation (indisponibilité du serveur SQL) est suffisamment anormale et rare. (pour rester sur une correction simple).
Dans ce cas particulier c'est ok, dans plein d'autres qui demanderont qu'un truc arrive pendant ces 6h ça ne conviendra pas. Je laisse ce ticket.
Updated by Frédéric Péters about 10 hours ago
- Assignee set to Frédéric Péters
demanderont qu'un truc arrive pendant ces 6h ça ne conviendra pas
On n'a jamais offert de garantie sur l'exécution, avant la parallélisation des cron on a parfois été bien au-delà des 6 heures, donc perso je doute de ça.
Et ok pour faire moi-même le patch simple.
Updated by Gitea (Bot) Gitea about 8 hours ago
- Status changed from Nouveau to Solution proposée
Frédéric Péters (fpeters) a ouvert une pull request sur Gitea concernant cette demande :
- URL : https://git.entrouvert.org/entrouvert/wcs/pulls/174
- Titre : cron: reduce stalled job detection to 6 hours (#75478)
- Modifications : https://git.entrouvert.org/entrouvert/wcs/pulls/174/files
Updated by Gitea (Bot) Gitea about 8 hours ago
- Status changed from Solution proposée to Solution validée
Emmanuel Cazenave (ecazenave) a approuvé une pull request sur Gitea concernant cette demande :