L’article explique comment éviter les race conditions dans Symfony Workflow en production, illustré par un bug où une commande passe simultanément en état "expédié" et "annulé". L’auteur montre que Symfony Workflow seul ne gère pas les accès concurrents, laissant deux processus modifier le même état en parallèle.
La solution repose sur le composant Symfony Lock, qui permet de verrouiller une ressource (comme une commande) pendant une transition. En utilisant Redis comme stockage partagé, le verrou empêche les accès simultanés et garantit qu’un seul processus peut modifier l’état à la fois. L’article détaille la configuration et l’intégration avec Symfony Messenger pour une gestion robuste des conflits.
L’auteur propose une implémentation progressive, partant d’une approche naïve pour aboutir à une solution production-ready, adaptable à tout projet Symfony utilisant des workers asynchrones.
Tout est dans le titre
Tout est dans le titre
L'auteur utilise Redis et la création d'un attribut PHP (décorateur) pour marquer certains points d'entrée comme "lockables" pendant un certain temps (sémaphore).
Tout est dans le titre
Il s'agit d'une technique de design adaptatif, permettant une transition douce entre 2 valeurs, selon la taille du viewport courant, plutôt qu'un passage direct d'une valeur à l'autre. Le 1er exemple d'implémentation concerne la typographie.