diff options
author | Ben Kochie <bjk@gitlab.com> | 2019-07-17 15:50:37 +0300 |
---|---|---|
committer | Ben Kochie <bjk@gitlab.com> | 2019-07-18 12:54:05 +0300 |
commit | f7f7c3016252a09acd68c822c8950848e313ce8a (patch) | |
tree | f3c816ff40bb639e1fa66002db10f9f6b53ea379 /config | |
parent | 691d88b71d51786983b823207d876cee7c93f5d4 (diff) |
Update usage ping cron behavior
* Splay the start by sleeping up to one minute.
* Adjust sideikiq retries to try up to approximately three hours.
* Randomize the minute fully within the hour.
* Psudo-randomize the day of the week based on the instance UUID.
Diffstat (limited to 'config')
-rw-r--r-- | config/settings.rb | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/config/settings.rb b/config/settings.rb index da459afcce2..8756c120645 100644 --- a/config/settings.rb +++ b/config/settings.rb @@ -1,4 +1,5 @@ require 'settingslogic' +require 'digest/md5' # We can not use `Rails.root` here, as this file might be loaded without the # full Rails environment being loaded. We can not use `require_relative` either, @@ -170,14 +171,17 @@ class Settings < Settingslogic URI.parse(url_without_path).host end - # Runs every minute in a random ten-minute period on Sundays, to balance the - # load on the server receiving these pings. The usage ping is safe to run - # multiple times because of a 24 hour exclusive lock. + # Runs at a random time of day on a consistent day of the week based on + # the instance UUID. This is to balance the load on the service receiving + # these pings. The sidekiq job handles temporary http failures. def cron_for_usage_ping hour = rand(24) - minute = rand(6) + minute = rand(60) + # Set a default UUID for the case when the UUID hasn't been initialized. + uuid = Gitlab::CurrentSettings.uuid || 'uuid-not-set' + day_of_week = Digest::MD5.hexdigest(uuid).to_i(16) % 7 - "#{minute}0-#{minute}9 #{hour} * * 0" + "#{minute} #{hour} * * #{day_of_week}" end end end |