Problème
Des modifications concurrentes sur une page wiki peuvent entraîner un comportement inattendu. Dans mon cas, la relation quoted_posts entre deux publications devient incorrecte.
Cela peut entraîner d’autres problèmes lorsque quoted_posts est utilisé, comme dans User#refresh_avatar. L’absence de quoted_posts empêche de retransformer toutes les publications citées.
Cause possible
L’avertissement introduit par ce commit ne suffit pas à protéger les modifications concurrentes d’une publication, car la vérification n’est pas atomique. Il s’agit d’une situation rare, mais elle peut tout de même se produire.
PostRevisor#revise! appelle QuotedPost.extract_from(@post), qui supprime toutes les quoted_posts s’il n’y a aucune citation dans une publication. Lorsque deux modifications appellent PostRevisor#revise! simultanément, l’une pour ajouter une publication citée et l’autre également pour ajouter une publication citée, le contenu de la publication peut se retrouver avec la modification contenant des citations, tandis que la relation quoted_post est détruite par la modification sans aucune citation.
Correction possible
Nous devrions peut-être envisager d’acquérir un verrou Redis lors de la modification d’une publication.