Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Transport.Jobs.Workflow : gérer Oban.TimeoutError #4408

Closed
AntoineAugusti opened this issue Dec 29, 2024 · 3 comments · Fixed by #4409
Closed

Transport.Jobs.Workflow : gérer Oban.TimeoutError #4408

AntoineAugusti opened this issue Dec 29, 2024 · 3 comments · Fixed by #4409
Assignees
Labels
bug Un truc pas normal qui pose problème ops Gestion des serveurs et de la production

Comments

@AntoineAugusti
Copy link
Member

Symptômes du bug décrits dans #4406 et oban-bg/oban#1210 en détails.

Les jobs de la queue workflow ne sont pas exécutés et en regardant en console il y a des jobs qui sont dans des états incohérents entre la console de production et la base de données.

Il se trouve que quand un Transport.Jobs.Workflow exécute un job avec un timeout et que cette situation se produit, la payload reçue par le handler Telemetry n'était pas bien gérée oban-bg/oban#1210 (comment). La documentation d'Oban est perfectible pour les événements oban-bg/oban#1153 (comment)

Ceci empêche le job Workflow de se mettre à jour : retry ou discarded. Le job reste en executing pendant plus de 60 minutes et se fait donc remettre en available par le plugin Lifeline oban-bg/oban#1210 (comment).

On ne s'attendait pas à avoir une struct dans ce bout de code, ce qui cause le problème. Un crash dans un handler se voit mal, remonte mal (pas du tout même ?) dans Sentry (identifié dans #3454 précédemment). Bref, difficile à voir.

@AntoineAugusti AntoineAugusti added bug Un truc pas normal qui pose problème ops Gestion des serveurs et de la production labels Dec 29, 2024
@AntoineAugusti AntoineAugusti self-assigned this Dec 29, 2024
@AntoineAugusti
Copy link
Member Author

AntoineAugusti commented Dec 29, 2024

Conséquences de ce job : la queue workflow est bloquée, on n'historise plus aucune ressource statique jusqu'au reboot du worker et on va stopper de nouveau si on tombe sur une ressource qu'on a du mal à historiser (serveur HTTP qui met plus de 2 minutes à répondre, vu en production…).

Si on n'historise plus les ressources statiques, ensuite :

  • on n'a plus les bonnes informations des ressources affichées dans l'API
  • plus de validations
  • plus de conversions
  • plus de visualisations
  • plus de notifications par rapport aux nouvelles données
  • on risque de prévenir d'expiration de données alors que les données ont été mises à jour (on ne détecte pas le changement de ressource)

@AntoineAugusti
Copy link
Member Author

AntoineAugusti commented Dec 29, 2024

Les workflows s'exécutent correctement

select state, count(1)
from oban_jobs
where queue = 'workflow'
group by 1
state count
available 27
executing 2
completed 838
discarded 9

On retrouve bien des jobs avec des Oban.TimeoutError.

select distinct args->'first_job_args'->'resource_id'
from oban_jobs
where queue = 'workflow'
  and state = 'discarded'
  and errors::text ilike '%timeouterror%'
;
-- 81380
-- 81381
-- 81382
-- 81383

Ces 4 ressources sont bien indisponibles actuellement, il est donc cohérent d'avoir eu un timeout quand on a tenté de les historiser.

Exemple : https://transport.data.gouv.fr/resources/81380

@AntoineAugusti
Copy link
Member Author

Oban a clarifié la documentation oban-bg/oban@c826da3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Un truc pas normal qui pose problème ops Gestion des serveurs et de la production
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant