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 end
def transaction(&blk) def transaction(&blk)
Post.transaction do if new_topic?
if new_topic? Post.transaction do
blk.call blk.call
else end
# we need to ensure post_number is monotonically increasing with no gaps else
# so we serialize creation to avoid needing rollbacks # we need to ensure post_number is monotonically increasing with no gaps
DistributedMutex.synchronize("topic_id_#{@opts[:topic_id]}", &blk) # 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 end
end end