Problem
Gleichzeitige Bearbeitungen einer Wiki-Seite können zu unerwartetem Verhalten führen. In meinem Fall wurde die Beziehung quoted_posts zwischen zwei Beiträgen fehlerhaft.
Dies kann zu weiteren Problemen führen, wenn quoted_posts verwendet wird, wie beispielsweise in User#refresh_avatar. Durch das Fehlen von quoted_posts ist es nicht möglich, alle zitierten Beiträge neu zu verarbeiten.
Mögliche Ursache
Die Warnung, die durch diesen Commit eingeführt wurde, reicht nicht aus, um gleichzeitige Bearbeitungen eines Beitrags zu schützen, da die Prüfung nicht atomar ist. Dies ist eine seltene Situation, kann jedoch dennoch auftreten.
PostRevisor#revise! ruft QuotedPost.extract_from(@post) auf, was alle quoted_posts löscht, wenn ein Beitrag keine Zitate enthält. Wenn zwei Bearbeitungen gleichzeitig PostRevisor#revise! aufrufen, wobei eine Bearbeitung ein Zitat hinzufügt und die andere ebenfalls ein Zitat hinzufügt, kann der Beitragstext am Ende so aussehen, als ob er die Bearbeitung mit den Zitaten enthält, während die quoted_post-Beziehung durch die Bearbeitung ohne Zitate zerstört wurde.
Mögliche Lösung
Vielleicht sollten wir erwägen, beim Bearbeiten eines Beitrags eine Redis-Sperre zu verwenden.