Avoid race condition when streaming deleted statuses (#10280)

* Avoid race condition when streaming deleted statuses

* Move redis lock to DistributionWorker to avoid extra Redis value
This commit is contained in:
ThibG authored and Eugen Rochko committed 2019-03-16 20:18:47 +01:00
1 parent db06b25376
commit 6b0eda14a1
2 files changed
+26 -10

No files matched your search

+7 -1
View File
@@ -4,7 +4,13 @@ class DistributionWorker
include Sidekiq::Worker
def perform(status_id)
FanOutOnWriteService.new.call(Status.find(status_id))
RedisLock.acquire(redis: Redis.current, key: "distribute:#{status_id}") do |lock|
if lock.acquired?
FanOutOnWriteService.new.call(Status.find(status_id))
else
raise Mastodon::RaceConditionError
end
end
rescue ActiveRecord::RecordNotFound
true
end