Skip to content
Extraits de code Groupes Projets
Non vérifiée Valider 6d5647ec rédigé par Benjamin Neff's avatar Benjamin Neff
Parcourir les fichiers

Handle duplicate account deletions

parent b920ddbf
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -10,7 +10,11 @@ module Diaspora ...@@ -10,7 +10,11 @@ module Diaspora
end end
def self.account_deletion(entity) def self.account_deletion(entity)
AccountDeletion.create!(person: author_of(entity)) person = author_of(entity)
AccountDeletion.create!(person: person) unless AccountDeletion.where(person: person).exists?
rescue => e # rubocop:disable Lint/RescueWithoutErrorClass
raise e unless AccountDeletion.where(person: person).exists?
logger.warn "ignoring error on receive AccountDeletion:#{entity.author}: #{e.class}: #{e.message}"
end end
def self.account_migration(entity) def self.account_migration(entity)
......
...@@ -12,6 +12,27 @@ describe Diaspora::Federation::Receive do ...@@ -12,6 +12,27 @@ describe Diaspora::Federation::Receive do
expect(AccountDeletion.exists?(person: sender)).to be_truthy expect(AccountDeletion.exists?(person: sender)).to be_truthy
end end
it "ignores duplicate the account deletion" do
AccountDeletion.create(person: sender)
expect(AccountDeletion).not_to receive(:create!)
Diaspora::Federation::Receive.account_deletion(account_deletion_entity)
expect(AccountDeletion.exists?(person: sender)).to be_truthy
end
it "handles race conditions on parallel receive" do
expect(AccountDeletion).to receive(:create!) do
AccountDeletion.create(person: sender)
raise "Some database error"
end
Diaspora::Federation::Receive.account_deletion(account_deletion_entity)
expect(AccountDeletion.exists?(person: sender)).to be_truthy
end
end end
describe ".account_migration" do describe ".account_migration" do
......
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