Skip to content
Extraits de code Groupes Projets
Valider a4f07bad rédigé par ThibG's avatar ThibG Validation de Eugen Rochko
Parcourir les fichiers

Reduce chances of race conditions when processing deleted toots (#9815)

* Reduce chances of race conditions when processing deleted toots

* Prevent race condition when processing deleted toots
parent 5363c724
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -5,10 +5,12 @@ class ActivityPub::Activity::Create < ActivityPub::Activity
CONVERTED_TYPES = %w(Image Video Article Page).freeze
def perform
return if delete_arrived_first?(object_uri) || unsupported_object_type? || invalid_origin?(@object['id'])
return if unsupported_object_type? || invalid_origin?(@object['id'])
RedisLock.acquire(lock_options) do |lock|
if lock.acquired?
return if delete_arrived_first?(object_uri)
@status = find_existing_status
if @status.nil?
......
......@@ -21,11 +21,13 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
def delete_note
return if object_uri.nil?
RedisLock.acquire(lock_options) do |_lock|
delete_later!(object_uri)
end
@status = Status.find_by(uri: object_uri, account: @account)
@status ||= Status.find_by(uri: @object['atomUri'], account: @account) if @object.is_a?(Hash) && @object['atomUri'].present?
delete_later!(object_uri)
return if @status.nil?
if @status.public_visibility? || @status.unlisted_visibility?
......@@ -68,4 +70,8 @@ class ActivityPub::Activity::Delete < ActivityPub::Activity
def payload
@payload ||= Oj.dump(@json)
end
def lock_options
{ redis: Redis.current, key: "create:#{object_uri}" }
end
end
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter