gip-inclusion / rdv-insertion

Application permettant de fluidifier le parcours d’accompagnement social et professionnel sur les territoires
https://www.rdv-insertion.fr
13 stars 4 forks source link

[Bug] Assurer la synchro entre rdvs et rdvi #2134

Closed aminedhobb closed 1 month ago

aminedhobb commented 4 months ago

Problème

Certains jobs n'ont pas de mécanisme qui assurent que le dernier job arrivé sur rdvi est bien le dernier traité. Par exemple, si on ajoute puis retire un usager d'une organisation à la volée, rien ne garantit à priori que le job d'ajout ne sera pas traité après le job d'ajout, ce qui entrainerait une désynchronisation entre les rdvi et rdvsp. C'est le cas pour les jobs suivants:

Proposition de solution

On pourrait créer une table où on enregistrait les webhooks traités et qui prendrait en entrée:

Du coup pour chacun de ces jobs on checkerait d'abord si un webhook a été processé ultérieurement pour ces ressources et on filtrerait le cas échéant. On enregistrerait une nouvelle entrée à la fin du job. Tous ces jobs devront être bien sûr wrappé dans un lock (avec comme clé le webhook identifier).

On peut implémenter le locking mécanisme nous-même ou utiliser la gem sidekiq-unique-jobs.

aminedhobb commented 3 months ago

On va peut-être en profiter pour migrer de sidekiq vers solid queue et profiter de cette API : https://github.com/rails/solid_queue?tab=readme-ov-file#concurrency-controls