rake task to compute user null counter caches

This commit is contained in:
Dylan Knutson
2025-06-23 19:54:58 +00:00
parent 5a771fa130
commit 79a6fee997

View File

@@ -622,3 +622,37 @@ desc "Enqueue pending post file jobs"
task enqueue_pending_post_file_jobs: :environment do
EnqueueDuePostFileJobs.new.run
end
desc "Compute null counter caches for all users"
task compute_null_user_counter_caches: :environment do
counter_caches = {
user_post_creations_count: :user_post_creations,
user_post_favs_count: :user_post_favs,
user_user_follows_from_count: :user_user_follows_from,
user_user_follows_to_count: :user_user_follows_to,
}
query =
Domain::User.where(
counter_caches.map { |col, _| "(\"#{col}\" IS NULL)" }.join(" OR "),
)
total = query.count
query = query.select(:id, *counter_caches.keys)
puts "computing #{counter_caches.keys.join(", ")} for #{total} users"
pb = ProgressBar.create(total:, format: "%t: %c/%C %B %p%% %a %e")
query.find_in_batches(batch_size: 32) do |batch|
ReduxApplicationRecord.transaction do
batch.each do |user|
nil_caches =
counter_caches.keys.filter { |cache| user.send(cache).nil? }
Domain::User.reset_counters(
user.id,
*nil_caches.map { |col| counter_caches[col] },
)
pb.progress = [pb.progress + 1, total].min
end
end
end
end