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

rebase/4.0.0rc2
Eugen Rochko 2018-11-16 19:46:23 +01:00 committed by GitHub
parent 074960bb0f
commit 9311430ed7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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,9 +12,11 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
private private
def delete_person def delete_person
lock_or_return("delete_in_progress:#{@account.id}") do
SuspendAccountService.new.call(@account) SuspendAccountService.new.call(@account)
@account.destroy! @account.destroy!
end end
end
def delete_note def delete_note
return if object_uri.nil? return if object_uri.nil?