From de57efd055c8c6af9e6e2aa450cea790546aabbc Mon Sep 17 00:00:00 2001
From: ThibG <thib@sitedethib.com>
Date: Wed, 23 Dec 2020 16:43:11 +0100
Subject: [PATCH] Fix mentions not being deleted efficiently (#15416)

As a regression from the recent optimizations, mentions were left untouched
until `account.destroy`, which would then delete them individually,
and executing queries to find and delete associated notifications, resulting
in a massive slowdown.

Co-authored-by: Claire <claire.github-309c@sitedethib.com>
---
 app/services/delete_account_service.rb | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/app/services/delete_account_service.rb b/app/services/delete_account_service.rb
index 2bb533cfb..f8154cc3e 100644
--- a/app/services/delete_account_service.rb
+++ b/app/services/delete_account_service.rb
@@ -142,6 +142,7 @@ class DeleteAccountService < BaseService
     purge_user!
     purge_profile!
     purge_statuses!
+    purge_mentions!
     purge_media_attachments!
     purge_polls!
     purge_generated_notifications!
@@ -159,6 +160,10 @@ class DeleteAccountService < BaseService
     end
   end
 
+  def purge_mentions!
+    @account.mentions.reorder(nil).where.not(status_id: reported_status_ids).in_batches.delete_all
+  end
+
   def purge_media_attachments!
     @account.media_attachments.reorder(nil).find_each do |media_attachment|
       next if keep_account_record? && reported_status_ids.include?(media_attachment.status_id)