rake task to compute user null counter caches
This commit is contained in:
34
Rakefile
34
Rakefile
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user