FIX: avoid race condition creating posts

in some cases the distributed mutex was not protecting us
and transactions would fail
This commit is contained in:
Sam 2018-08-23 15:10:55 +10:00
parent 2711f173dc
commit cbd9045c6b

View File

@ -325,13 +325,17 @@ class PostCreator
end
def transaction(&blk)
Post.transaction do
if new_topic?
if new_topic?
Post.transaction do
blk.call
else
# we need to ensure post_number is monotonically increasing with no gaps
# so we serialize creation to avoid needing rollbacks
DistributedMutex.synchronize("topic_id_#{@opts[:topic_id]}", &blk)
end
else
# we need to ensure post_number is monotonically increasing with no gaps
# so we serialize creation to avoid needing rollbacks
DistributedMutex.synchronize("topic_id_#{@opts[:topic_id]}") do
Post.transaction do
blk.call
end
end
end
end