Problema
Le modifiche concorrenti a una pagina wiki possono causare comportamenti imprevisti. Nel mio caso, la relazione quoted_posts tra due post diventa errata.
Ciò può portare ad altri problemi quando quoted_posts viene utilizzato, ad esempio in User#refresh_avatar. L’assenza di quoted_posts impedisce di rigenerare tutti i post citati.
Possibile Causa
L’avviso introdotto da questo commit non è sufficiente a proteggere le modifiche concorrenti a un post, poiché il controllo non è atomico. Si tratta di una situazione rara, ma può comunque verificarsi.
PostRevisor#revise! chiama QuotedPost.extract_from(@post), che elimina tutti i quoted_posts se non ci sono citazioni in un post. Quando due modifiche chiamano PostRevisor#revise! contemporaneamente, una per aggiungere un post citato e l’altra per aggiungerne un altro, il contenuto del post potrebbe finire con la modifica che contiene le citazioni, mentre la relazione quoted_post viene distrutta dalla modifica senza alcuna citazione.
Possibile Soluzione
Forse dovremmo prendere in considerazione l’acquisizione di un lock Redis durante la modifica di un post.