From 900d4187efdd207e958a5ad7920d97a92bff7c96 Mon Sep 17 00:00:00 2001 From: Penar Musaraj Date: Fri, 12 Feb 2021 08:52:59 -0500 Subject: [PATCH] DEV: Prevents rate limits for new feature checks on multisite (#12053) --- app/jobs/scheduled/check_new_features.rb | 3 ++- lib/discourse_updates.rb | 10 +++++++--- spec/multisite/jobs_spec.rb | 6 ++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/app/jobs/scheduled/check_new_features.rb b/app/jobs/scheduled/check_new_features.rb index 0bb066bddf5..cca5d9b7d70 100644 --- a/app/jobs/scheduled/check_new_features.rb +++ b/app/jobs/scheduled/check_new_features.rb @@ -6,7 +6,8 @@ module Jobs every 1.day def execute(args) - DiscourseUpdates.perform_new_feature_check + @new_features_json ||= DiscourseUpdates.new_features_payload + DiscourseUpdates.update_new_features(@new_features_json) end end diff --git a/lib/discourse_updates.rb b/lib/discourse_updates.rb index 91e5072bb78..c7bd0722fcf 100644 --- a/lib/discourse_updates.rb +++ b/lib/discourse_updates.rb @@ -115,10 +115,14 @@ module DiscourseUpdates keys.present? ? keys.map { |k| Discourse.redis.hgetall(k) } : [] end - def perform_new_feature_check + def new_features_payload response = Excon.new(new_features_endpoint).request(expects: [200], method: :Get) - json = JSON.parse(response.body) - Discourse.redis.set(new_features_key, response.body) + JSON.parse(response.body) + end + + def update_new_features(json = nil) + json ||= new_features_payload + Discourse.redis.set(new_features_key, json) end def new_features diff --git a/spec/multisite/jobs_spec.rb b/spec/multisite/jobs_spec.rb index 461ede83a7d..4ed2054137a 100644 --- a/spec/multisite/jobs_spec.rb +++ b/spec/multisite/jobs_spec.rb @@ -8,4 +8,10 @@ RSpec.describe "Running Sidekiq Jobs in Multisite", type: :multisite do Jobs::DestroyOldDeletionStubs.new.perform({}) end.to_not change { RailsMultisite::ConnectionManagement.current_db } end + + it 'CheckNewFeatures should only hit the payload once' do + # otherwise it will get rate-limited by meta + DiscourseUpdates.expects(:new_features_payload).returns("{}").once + Jobs::CheckNewFeatures.new.perform({}) + end end