-
Notifications
You must be signed in to change notification settings - Fork 3
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
Passer de delayed_job
à good_job
#3338
Conversation
23b5b43
to
941e915
Compare
fe753fd
to
b76bf91
Compare
b76bf91
to
8043228
Compare
8043228
to
e45c43a
Compare
around { |example| perform_enqueued_jobs { example.run } } | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
En exécutant toujours les jobs de façon synchrone, ces tests échouaient car ils exécutaient les 20 retries. Je suis donc passé à un mode de test où l'on appelle #deliver_later
pour mettre le job à la file, puis perform_enqueued_jobs
pour exécuter le job qui est dans la file, et vérifier qu'il a bien contacté Sentry ou pas, et déclenché un retry ou pas. 😉
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C'est top :)
Merci beaucoup. Ca va être un plaisir à utiliser.
A priori avoir fixé à 10 retry les jobs des webhook ne devrait pas poser de problèmes particuliers pour rdv-i (mais juste pour info @aminedhobb )
5f6f3b6
to
5c6aa21
Compare
Fixes #2231
Pourquoi ?
Nos problématiques actuelles avec
DelayedJob
:DelayedJob
etActiveJob
, ce qui rend difficile de savoir quelles fonctionnalités sont dispoGoodJob
répond à ces problématiques tout en apportant d'autres "nice to have" pour nous :De manière générale,
GoodJob
est plus moderne, plus expert et plus agréable à utiliser queDelayedJob
, ce qui devrait apporter un plaisir non négligeable dans notre travail. Je recommande la lecture du README deGoodJob
qui aborde de nombreuses problématiques propres à la gestion de jobs, et démontrent ainsi l'expertise du concepteur de la gem.Comment ?
Changement dans le code
La migration d'un système à l'autre se fait assez simplement :
Procfile
good_job.rb
Les retries
Le changement le plus subtil concerne les retries. En effet, avec
ActiveJob
(et donc par défaut dansGoodJob
), un job qui échoue n'est pas ré-essayé, il est simplement marqué"discarded"
(et donc visible dans la section "Dsicarded" du dashboard). Afin qu'un job soit ré-essayé, il faut utiliser la méthoderetry_on
(une méthode standard deActiveJob
, cf. doc de GoodJob sur ce sujet).Jusqu'à maintenant, chaque échec d’exécution était envoyé à Sentry à chaque retry. J'ai donc fait en sorte de garder ce comportement pour le moment, et nous pourrons ensuite modifier chaque job au cas par cas pour décidé si chaque retry a besoin d'être loggué dans Sentry ou pas, le nombre de retries, leur fréquence, tout ça selon le type d'exception levée ! 😋
J'ai défini le nombre de retry avant abandon à 20, ce qui signifie qu'on abandonne environ 24h après la première exécution. Ça me paraît judicieux, car actuellement on est à 25, ce qui fait qu'on a par exemple des jobs de notifs ("votre RDV est après demain") qui ré-essayent pendant 2 semaines. 😬 Je travaille sur une seconde PR qui propose des ajustement spécifiques à chaque job et chaque erreur.
Migration
Je pense que le plus simple est de ne pas migrer les jobs existants dans la table
delayed_jobs
. En effet, en temps normal, tous les jobs stockés dans cette table sont en retry infini car ils déclenchent une erreur irrémédiable (webhook qui prend une 500 de chez Zimbra, SMS qui ne peut pas être routé car le numéro a changé de fournisseur). Nous pouvons garder la tabledelayed_jobs
dans la base pour le moment, puis la supprimer quand nous aurons vérifié que les jobs qu'elle contient sont à jeter.Checklist
Avant la revue :
Revue :