FIX: Prevent concurrent updates to top_topics (#19854)

to prevent lock timeouts
This commit is contained in:
Daniel Waterworth 2023-01-12 14:03:26 -06:00 committed by GitHub
parent 28078d78e2
commit 3030a53819
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 7 deletions

View File

@ -5,21 +5,25 @@ class TopTopic < ActiveRecord::Base
# The top topics we want to refresh often
def self.refresh_daily!
transaction do
remove_invisible_topics
add_new_visible_topics
DistributedMutex.synchronize("update_top_topics", validity: 5.minutes) do
transaction do
remove_invisible_topics
add_new_visible_topics
update_counts_and_compute_scores_for(:daily)
update_counts_and_compute_scores_for(:daily)
end
end
end
# We don't have to refresh these as often
def self.refresh_older!
older_periods = periods - %i[daily all]
DistributedMutex.synchronize("update_top_topics", validity: 5.minutes) do
older_periods = periods - %i[daily all]
transaction { older_periods.each { |period| update_counts_and_compute_scores_for(period) } }
transaction { older_periods.each { |period| update_counts_and_compute_scores_for(period) } }
compute_top_score_for(:all)
compute_top_score_for(:all)
end
end
def self.refresh!