From c0fdb2f33d126fa64b70f8f2d2002cdc1297e77d Mon Sep 17 00:00:00 2001 From: Alan Guo Xiang Tan Date: Tue, 28 Jan 2025 15:31:00 +0800 Subject: [PATCH] PERF: Optimize `uploads:disable_secure_uploads` to load in batches (#31030) This commit updates the `uploads:disable_secure_uploads` to be more memory efficient by loading records in batches instead. --- lib/tasks/uploads.rake | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/tasks/uploads.rake b/lib/tasks/uploads.rake index 14f65e4dbf5..f35d0de2d35 100644 --- a/lib/tasks/uploads.rake +++ b/lib/tasks/uploads.rake @@ -574,23 +574,29 @@ task "uploads:disable_secure_uploads" => :environment do .joins(:upload_references) .where(upload_references: { target_type: "Post" }) .where(secure: true) + secure_upload_count = secure_uploads.count - secure_upload_ids = secure_uploads.pluck(:id) puts "", "Marking #{secure_upload_count} uploads as not secure.", "" - secure_uploads.update_all( - secure: false, - security_last_changed_at: Time.zone.now, - security_last_changed_reason: "marked as not secure by disable_secure_uploads task", - ) - post_ids_to_rebake = - DB.query_single( - "SELECT DISTINCT target_id FROM upload_references WHERE upload_id IN (?) AND target_type = 'Post'", - secure_upload_ids, + secure_uploads.in_batches do |relation| + secure_upload_ids = relation.pluck(:id) + + relation.update_all( + secure: false, + security_last_changed_at: Time.zone.now, + security_last_changed_reason: "marked as not secure by disable_secure_uploads task", ) - adjust_acls(secure_upload_ids) - mark_upload_posts_for_rebake(post_ids_to_rebake) + + post_ids_to_rebake = + DB.query_single( + "SELECT DISTINCT target_id FROM upload_references WHERE upload_id IN (?) AND target_type = 'Post'", + secure_upload_ids, + ) + + adjust_acls(secure_upload_ids) + mark_upload_posts_for_rebake(post_ids_to_rebake) + end puts "", "Rebaking and uploading complete!", "" end