Unverified Commit 6d5647ec authored by Benjamin Neff's avatar Benjamin Neff
Browse files

Handle duplicate account deletions

parent b920ddbf
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -10,7 +10,11 @@ module Diaspora
      end

      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

      def self.account_migration(entity)
+21 −0
Original line number Diff line number Diff line
@@ -12,6 +12,27 @@ describe Diaspora::Federation::Receive do

      expect(AccountDeletion.exists?(person: sender)).to be_truthy
    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

  describe ".account_migration" do