Testing Postgres race conditions with synchronization barriers
Les conditions de course surviennent lorsque des opérations concurrentes lisent une valeur obsolète et écrivent ensuite, et les tests séquentiels ne les dénouent pas sans barrière. Une barrière est un point de synchronisation qui attend un nombre défini de tâches et les libère en même temps, imposant l’interleaving exact nécessaire pour reproduire la condition. En testant la logique de crédit sans barrière, deux crédits simultanés peuvent produire 150 au lieu de 200; l’ajout de transactions ne résout pas le problème et FOR UPDATE peut entraîner un deadlock selon le placement de la barrière. Pour tester sans impacter la production, on peut injecter la barrière via un hook optionnel présent uniquement dans les tests, afin que le code de production reste inchangé. L’usage des tests avec barrière exige une base PostgreSQL réelle et permet de valider que la barrière révèle les régressions; si le test passe dans les deux sens, il peut être considéré comme vanité et être retiré.