Description
Dans le cadre de la campagne d'idempotence des créations de ressources (#2605, #2623, #2624, #2626, #2627, #2632), corrigée sur registry, Nexus, GitLab, vault-argocd et Keycloak, le module SonarQube présente le même défaut.
ensureUser (sonarqube.service.ts:203) appelle client.createUser (sonarqube-client.service.ts:291), qui émet POST users/create et lève sur toute réponse non-2xx. Lors de deux synchronisations concurrentes, le second createUser reçoit 400 already exists et interrompt toute la synchronisation du projet.
ensureGroup (ligne 359) applique déjà le motif read-then-create ; ensureUser doit bénéficier de la même robustesse (tolérer un 400/409 « already exists » ou revérifier l'existence avant le POST).
Etapes de reproduction
- Déclencher deux synchronisations SonarQube d'un même projet en parallèle (double-sync concurrent).
- Les deux exécutions passent la lecture d'existence, puis émettent chacune
POST users/create pour le même utilisateur.
- La seconde écriture perdante reçoit
400 already exists et fait échouer toute la synchronisation.
Captures d'écran
No response
Logs
POST /api/users/create → 400 {"errors":[{"msg":"User already exists"}]}
Navigateurs
No response
OS
No response
Version de la console impactée
No response
Définition du fini
Description
Dans le cadre de la campagne d'idempotence des créations de ressources (#2605, #2623, #2624, #2626, #2627, #2632), corrigée sur registry, Nexus, GitLab, vault-argocd et Keycloak, le module SonarQube présente le même défaut.
ensureUser(sonarqube.service.ts:203) appelleclient.createUser(sonarqube-client.service.ts:291), qui émetPOST users/createet lève sur toute réponse non-2xx. Lors de deux synchronisations concurrentes, le secondcreateUserreçoit400 already existset interrompt toute la synchronisation du projet.ensureGroup(ligne 359) applique déjà le motif read-then-create ;ensureUserdoit bénéficier de la même robustesse (tolérer un 400/409 « already exists » ou revérifier l'existence avant le POST).Etapes de reproduction
POST users/createpour le même utilisateur.400 already existset fait échouer toute la synchronisation.Captures d'écran
No response
Logs
POST /api/users/create → 400 {"errors":[{"msg":"User already exists"}]}Navigateurs
No response
OS
No response
Version de la console impactée
No response
Définition du fini