Comment corriger UNABLE_TO_LOCK_ROW dans les déploiements Salesforce
Un enregistrement que le déploiement doit mettre à jour est verrouillé par une autre transaction s'exécutant simultanément.
Apparaît pendant : le DML à l'exécution, une collision de timing plutôt qu'un problème de métadonnées ou de donnéesCe que cela signifie
UNABLE_TO_LOCK_ROW signifie que Salesforce n'a pas pu acquérir de verrou sur un enregistrement parce qu'une autre transaction, un job batch, un flow planifié, ou un test Apex concurrent, était déjà en train de le mettre à jour. C'est un problème de timing, pas de métadonnées : le déploiement ou ses tests sont corrects, mais ils sont entrés en collision avec autre chose s'exécutant dans l'org.
C'est particulièrement fréquent avec les relations maîtres-détails, car la mise à jour de tout enregistrement enfant acquiert un verrou sur le parent pour le recalcul du roll-up summary, donc deux insertions d'enfants tentant de mettre à jour le même parent en même temps se disputeront ce verrou.
Causes courantes
La solution
- Réessayez le déploiementLes verrous de ligne sont temporaires. Relancer le même déploiement réussit souvent une fois la transaction concurrente terminée.
- Déployez pendant une fenêtre de faible activitéPlanifiez les déploiements en production en dehors des heures ouvrées ou mettez d'abord en pause les jobs planifiés conflictuels.
- Évitez la contention sur un enregistrement partagé dans les testsRestructurez les tests Apex afin qu'ils ne mettent pas tous à jour le même enregistrement de paramètres singleton au sein de la même transaction.
for (Account parent : [SELECT Id FROM Account WHERE Id IN :parentIds FOR UPDATE]) { // lock parents explicitly and predictably before child DML }
Comment Serpent évite cela
Serpent AI planifie les déploiements pour éviter les jobs conflictuels connus, et une ligne verrouillée se traduit par une nouvelle tentative en un clic sur la même tâche au lieu d'une release en échec. Consultez la bibliothèque des erreurs de déploiement Salesforce.

Prévention
Erreurs associées
UNABLE_TO_LOCK_ROW, expliqué
Commencez gratuitement. Sans carte bancaire, sans installation, sans engagement.
Configuration en moins de 15 minutes. Aucune embauche DevOps nécessaire.
