Prevent multiple handlers for Delete of Actor from running (#9292)

This commit is contained in:
Eugen Rochko 2018-11-16 19:46:23 +01:00
parent e8a4ba49cf
commit c35be6c7e1
2 changed files with 10 additions and 2 deletions

View file

@ -129,4 +129,10 @@ class ActivityPub::Activity
::FetchRemoteStatusService.new.call(@object['url']) ::FetchRemoteStatusService.new.call(@object['url'])
end end
end end
def lock_or_return(key, expire_after = 7.days.seconds)
yield if redis.set(key, true, nx: true, ex: expire_after)
ensure
redis.del(key)
end
end end

View file

@ -12,8 +12,10 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
private private
def delete_person def delete_person
SuspendAccountService.new.call(@account) lock_or_return("delete_in_progress:#{@account.id}") do
@account.destroy! SuspendAccountService.new.call(@account)
@account.destroy!
end
end end
def delete_note def delete_note