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

[TECH] Amélioration de PGBoss (reprise de la PR 11308). #11431

Open
wants to merge 3 commits into
base: dev
Choose a base branch
from

Conversation

HEYGUL
Copy link
Contributor

@HEYGUL HEYGUL commented Feb 16, 2025

🥞 Problème

On utilise directement les tables et schémas de base de données de pgBoss.
Cela a pour inconvénient de coupler notre code aux évolutions internes de pgBoss.

🥓 Proposition

pgBoss offre des fonctions natives d'abstraction pour toutes les tâches nécessaires : ajout de job, récupérer les jobs programmés, etc.
On peut donc modifier notre code pour s'affranchir des appels aux tables pgboss.*.
On peut aussi modifier les helpers de test.

🧃 Remarques

Suite à un soucis lorsque le worker n'est pas dans le conteneur web, la PR initiale avait été "annulée".

Le pb venait du fait que pgBoss n'était pas démarré dans le conteneur web (car cela n'était fait que par l'instanciation du worker).
➡️ Voir le dernier commit de la branche.

😋 Pour tester

Tests à définir par les équipes.

Tests accès:

  • Envoi d'email de création de compte
  • Audit logger: anonymisation d'utilisateur
  • Audit logger: changement d'email

Test certification:

  • Pix certif : créer une certif

  • Pix App : passer une certification jusqu'au bout (écran de fin de test)

  • Pix Admin : voir que la certification n'est pas en statut démarré, ni dans la section a traiter, et que son score est OK

    • Si ce n'est pas le cas : c'est que le job n'a pas ete publie ou traite
  • Niveau tech : tout est OK si on voit un événement CertificationCompletedJob pour le certification-course dans la table pgboss.job

@pix-bot-github
Copy link

Une fois les applications déployées, elles seront accessibles via les liens suivants :

Les variables d'environnement seront accessibles via les liens suivants :

@HEYGUL HEYGUL marked this pull request as ready for review February 16, 2025 13:52
@HEYGUL HEYGUL requested review from a team as code owners February 16, 2025 13:52
Copy link
Member

@yaf yaf left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎉 Merci ! 🙇

Je vais essayer de refaire le test que nous avions fait pour découvrir qu'il y avait un pépin avec la précédente PR.

const rowCount = results.reduce((total, batchResult) => total + (batchResult.rowCount || 0), 0);

return { rowCount };
await pgBoss.insert(jobs);
Copy link
Contributor

@Steph0 Steph0 Feb 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

J'avais fais la remontee sur la PR de rollback, on perd ici le transactionnel en passant a insert.

Dans le cas detecte sur la PR qui a ete rollback, nous avons constate que en cas d'echec de publication des jobs (batchInsert avant), la transaction (qui existe bien) etait donc pas rollback avec insert ca met des elements de Certif en un etat bancal.

Il semble que il existe justement la possibilite de le mettre "transaction aware", mais avec send et pas insert (via Connection options).

Je souhaiterais que l'on garde le transactionnel pour rester iso au fonctionnement precedent.

Copy link
Contributor

@Steph0 Steph0 Feb 17, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Autre element, avez-vous pu verifier le point sur la PR de rollback concernant le fait que nous ne voyons pas d'erreurs ou log en cas d'echec des insert (erreur silencieuse).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

le soucis dans le cas présent est que insert ne lève pas d'erreurs quand la base n'est pas ouverte au préalable : https://github.com/timgit/pg-boss/blob/067fff74ed9973f6fa71def1bb43ef84b2d21d56/src/db.js#L27

on peut effectivement remettre la transaction autour de l'insert, au cas où une erreur soit levée bien que la base soit ouverte

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Steph0 je viens de pousser un commit remettant la transaction, peux-tu me dire si c'est ok ?

@Steph0
Copy link
Contributor

Steph0 commented Feb 17, 2025

@HEYGUL sur scaling j'ai mis START_IN_WEB_PROCESS = false + j'ai scale les workers a 1, sinon on peut pas verifier que ca fonctionne

@HEYGUL HEYGUL force-pushed the revert-11381-tech-revert-improve-pg-boss-commits branch 2 times, most recently from d76bc97 to 07c5baa Compare February 18, 2025 13:36
@HEYGUL HEYGUL force-pushed the revert-11381-tech-revert-improve-pg-boss-commits branch from 07c5baa to b3ce581 Compare February 18, 2025 13:54
Copy link
Member

@lionelB lionelB left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fonc OK pour prescription (pole-emploi-sendings / calcul de certificabilité)

@@ -62,7 +58,10 @@ export class JobRepository {
}

async #send(jobs) {
await pgBoss.insert(jobs);
const knexConn = DomainTransaction.getConnection();
await knexConn.transaction(async () => {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion : ajouter un test pour la transaction

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants