Skip to content

🐛 [BUG] - gitlab-client : createGroupRepo et commit concurrents sans tolĂ©rance au conflit (Observability + ArgoCD) #2621

Description

@shikanime

Description

Deux trous d'idempotence résident dans gitlab-client.service.ts, partagés par les modules Observability et ArgoCD.

1. createGroupRepo sans tolĂ©rance au conflit (gitlab-client.service.ts:297-307) — appelĂ© par getOrCreateValuesRepo (observability-client.service.ts:38) sur chaque upsert projet (observability.service.ts:129) et chaque suppression (:147). C'est un Projects.create brut sans traitement du has already been taken. Deux synchronisations concurrentes qui voient toutes deux le dĂ©pĂŽt absent appellent toutes deux createGroupRepo ; la seconde lĂšve le 409 GitLab. Pattern identique Ă  celui dĂ©jĂ  corrigĂ© pour les sous-groupes keycloak (keycloak-client.service.ts:212-220) et les dĂ©pĂŽts systĂšme (gitlab-client.service.ts:274-279, qui relit sur has already been taken).

2. Course lecture-Ă©criture sur le commit (maybeCreateCommit, gitlab-client.service.ts:321 + generateCreateOrUpdateAction :336-348) — l'action lit le fichier puis un Commits.create sĂ©parĂ© Ă©crit (:332). Deux syncs qui se chevauchent peuvent voir le fichier absent, Ă©mettre toutes deux action: 'create', et la seconde frappe le « already exists » GitLab avec 400 sans tolĂ©rance → la sync Ă©choue. MĂȘme schĂ©ma pour les delete concurrents.

Etapes de reproduction

  1. DĂ©clencher une synchronisation concurrente du mĂȘme projet.
  2. Pour le cas 1 : deux runs voient le dépÎt de valeurs absent et l'un des createGroupRepo lÚve has already been taken.
  3. Pour le cas 2 : deux runs voient le fichier absent, les deux émettent action: 'create', le second Commits.create lÚve un 400.

Version de la console impactée

server-nestjs (gitlab-client — modules Observability et ArgoCD)

Définition du fini

  • createGroupRepo tolĂšre has already been taken et relit le dĂ©pĂŽt existant (idiome gitlab-client.service.ts:274-279)
  • Le commit concurrent tolĂšre le conflit de crĂ©ation et rĂ©concilie (relit le fichier / no-op si dĂ©jĂ  prĂ©sent)
  • 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