ADR-0015 — Atomicité via PESSIMISTIC_WRITE + Operation atomique
| Statut | Accepté |
|---|---|
| Date | 2025-11-15 |
| Auteurs | Julien Jorry |
Contexte
Deux prélèvements concurrents ne doivent pas lire le même solde et l'épuiser deux fois. L'optimistic locking Doctrine implique du retry, trop coûteux en cron mensuel SSA où des milliers de prélèvements partent en série. Il faut un lock pessimiste avant calcul du solde.
Décision
Tout service touchant un compte fait : $em->lock($account, LockMode::PESSIMISTIC_WRITE) en début de transaction. Une Operation Kohinos (paire crédit/débit) est l'unité atomique élémentaire : persist + flush dans une seule transaction DB. Lié à ADR-0001 (double-entry).
Conséquences positives
- Aucune race condition possible.
- Pas de retry à gérer.
- Simplicité de raisonnement.
Conséquences négatives
- Sérialisation des opérations sur un même compte (acceptable : rare).
- Risque de deadlock si ordre de lock incohérent — convention : lock par
id ASC.
Alternatives examinées
- Optimistic locking — rejeté : retry coûteux en cron mensuel.
- SELECT ... FOR UPDATE manuel — équivalent mais sans abstraction Doctrine.