Skip to content

🐛 [BUG] - Réconciliation Registry non idempotente : 4 chemins de création sans tolérance 409 #2620

Description

@shikanime

Description

Les créations du module Registry ne tolèrent pas le conflit « existe déjà » (409) : chaque création lève sur un statut >= 300. Sous exécution concurrente (cron + gestionnaire d'événement, ou événements projet parallèles), deux runs peuvent tous deux passer la vérification d'existence puis l'un des POST échoue.

Les 4 chemins concernés (registry.service.ts) :

  • createProject (:232) — gardé par getProjectByName (:216), mais lève sur 409 (l.233-235)
  • addGroupMember (:176) — gardé par le snapshot membersByName (:157), mais lève sur 409 (l.177-179)
  • createRobot (:83) — gardé par getRobot (:127) + retour Vault précoce (:122-125), mais lève sur 409 (l.86-88)
  • createRetention (:260) — gardé par getRetentionId (:256), mais lève sur 409 (l.261-263)

En séquentiel, la ré-synchronisation est idempotente (chaque création a une garde d'existence, les suppressions tolèrent 404). Le gap n'apparaît qu'en concurrence.

Etapes de reproduction

  1. Déclencher une réconciliation concurrente du même projet.
  2. Deux runs passent la garde d'existence puis l'un des POST lève un 409 non toléré.
  3. Voir la sync marquée en échec.

Version de la console impactée

server-nestjs (module Registry)

Définition du fini

  • Les 4 chemins de création tolèrent le 409 « existe déjà » et réconcilient (met à jour / relit l'existant)
  • Le correctif est aligné sur l'idiome 409 déjà présent ailleurs dans le codebase
  • Les tests liés à ce correctif ont été ajoutés

Issues liees

Relie a #2087 : migration des plugins vers une approche declarative (moteur Alchemy.run), dont cette idempotence est un prerequis.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions