You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
🐛 [BUG] - Réconciliation Registry non idempotente : 4 chemins de création sans tolérance 409 #2620
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
Déclencher une réconciliation concurrente du même projet.
Deux runs passent la garde d'existence puis l'un des POST lève un 409 non toléré.
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.
Activity
fix(server-nestjs): make Registry create paths idempotent (409 confli…
fix(server-nestjs): make Registry create paths idempotent (getOrCreat…
fix(server-nestjs): make Registry create paths idempotent (getOrCreat…
fix(server-nestjs): make Registry create paths idempotent (ensure pat…
fix(server-nestjs): make Registry create paths idempotent (ensure pat…
fix(server-nestjs): do not rotate the robot on a creation race collision
fix(server-nestjs): parse Harbor conflict body with zod, drop phantom…
fix(server-nestjs): tighten ensure contract and reconcile retention v…
fix(server-nestjs): tighten ensure contract and reconcile retention v…
fix(server-nestjs): trim comments and share makeConflictResponse test…
8 remaining items
fix(server-nestjs): move ensureQuota back into the service
fix(server-nestjs): inline ensureQuota into ensureProjectQuota
fix(server-nestjs): treat real HTTP 409 as a registry create conflict
fix(server-nestjs): reconcile single Harbor retention policy on re-sync
fix(server-nestjs): reconcile single Harbor retention policy on re-sync
fix(server-nestjs): reconcile single Harbor retention policy on re-sync