Description
Les crĂ©ations Nexus dans le chemin de synchronisation projet ne tolĂšrent pas le conflit « existe dĂ©jà » (409) : chaque wrapper create* fait un POST brut qui lĂšve sur collision. Sous exĂ©cution concurrente (gestionnaire d'Ă©vĂ©nement + cron qui se chevauchent, ou Ă©vĂ©nements projet parallĂšles), deux runs peuvent tous deux passer la lecture get*() puis l'un des POST Ă©choue â la sync Ă©choue.
Les 7 chemins concernĂ©s partagent la mĂȘme forme (lecture get*() â create*() POST sans tolĂ©rance 409 dans nexus-client.service.ts) :
createSecurityUsers (:274) â appelĂ© par ensureUser (nexus.service.ts:455)
createSecurityRoles (:238) â ensureRole (:419) et ensureSecurityRole (:475)
createRepositoriesMavenHosted (:123) â ensureMavenHostedRepo (:197)
createRepositoriesMavenGroup (:133) â ensureMavenGroupRepo (:320)
createRepositoriesNpmHosted (:165) â ensureNpmHostedRepo (:216)
postRepositoriesNpmGroup (:186) â ensureNpmGroupRepo (:236)
createSecurityPrivilegesRepositoryView (:207) â upsertPrivilege (:173)
En séquentiel, la ré-synchronisation est idempotente (la lecture rattrape l'existant). Le gap n'apparaßt qu'en concurrence.
Etapes de reproduction
- DĂ©clencher une rĂ©conciliation concurrente du mĂȘme projet (cron + Ă©vĂ©nement
project.upsert simultanés).
- Deux runs passent la lecture
get*() puis l'un des create*() POST lÚve un conflit (409) non toléré.
- Voir la sync marquée en échec.
Version de la console impactée
server-nestjs (module Nexus)
Définition du fini
Issues liees
Relie a #2087 : migration des plugins vers une approche declarative (moteur Alchemy.run), dont cette idempotence est un prerequis.
Description
Les créations Nexus dans le chemin de synchronisation projet ne tolÚrent pas le conflit « existe déjà » (409) : chaque wrapper
create*fait un POST brut qui lĂšve sur collision. Sous exĂ©cution concurrente (gestionnaire d'Ă©vĂ©nement + cron qui se chevauchent, ou Ă©vĂ©nements projet parallĂšles), deux runs peuvent tous deux passer la lectureget*()puis l'un des POST Ă©choue â la sync Ă©choue.Les 7 chemins concernĂ©s partagent la mĂȘme forme (lecture
get*()âcreate*()POST sans tolĂ©rance 409 dansnexus-client.service.ts) :createSecurityUsers(:274) â appelĂ© parensureUser(nexus.service.ts:455)createSecurityRoles(:238) âensureRole(:419) etensureSecurityRole(:475)createRepositoriesMavenHosted(:123) âensureMavenHostedRepo(:197)createRepositoriesMavenGroup(:133) âensureMavenGroupRepo(:320)createRepositoriesNpmHosted(:165) âensureNpmHostedRepo(:216)postRepositoriesNpmGroup(:186) âensureNpmGroupRepo(:236)createSecurityPrivilegesRepositoryView(:207) âupsertPrivilege(:173)En sĂ©quentiel, la rĂ©-synchronisation est idempotente (la lecture rattrape l'existant). Le gap n'apparaĂźt qu'en concurrence.
Etapes de reproduction
project.upsertsimultanés).get*()puis l'un descreate*()POST lÚve un conflit (409) non toléré.Version de la console impactée
server-nestjs (module Nexus)
Définition du fini
Issues liees
Relie a #2087 : migration des plugins vers une approche declarative (moteur Alchemy.run), dont cette idempotence est un prerequis.