Concurrent edits to one wiki page can lead to unexpected behavior. In my case, the
quoted_posts relationship between two post becomes wrong.
This may leads to other problems when
quoted_posts is used, like in User#refresh_avatar. The missing
quoted_posts makes it unable to rebake all quoted posts.
The warning introduced by this commit is not enough to safeguard concurrent edit to a post, as the check is not atomic. This is a rare situation but it still can happen.
QuotedPost.extract_from(@post) , which delete all
quoted_posts if there are no any quotes in a post. When two edit calls PostRevisor#revise! simultaneously, with one edit to add a quoted post and another to add a quoted post, the post content could end up with the edit that has quotes and the
quoted_post relationship destroyed by the edit without any quotes.
Maybe we should consider acquiring a Redis lock when editing a post.