Refactored initializer code to its own class and added tests

This commit is contained in:
Patricio Cano 2016-11-08 16:31:37 -06:00
parent 1d3ada80ad
commit 208530494e
3 changed files with 56 additions and 7 deletions

View file

@ -29,13 +29,7 @@ Sidekiq.configure_server do |config|
end
Sidekiq::Cron::Job.load_from_hash! cron_jobs
if Gitlab::CurrentSettings.sidekiq_throttling_enabled?
factor = current_application_settings.sidekiq_throttling_factor
current_application_settings.sidekiq_throttling_queues.each do |queue|
Sidekiq::Queue[queue].limit = (factor * Sidekiq.options[:concurrency]).ceil
end
end
Gitlab::SidekiqThrottler.execute!
# Database pool should be at least `sidekiq_concurrency` + 2
# For more info, see: https://github.com/mperham/sidekiq/blob/master/4.0-Upgrade.md

View file

@ -0,0 +1,21 @@
module Gitlab
class SidekiqThrottler
class << self
def execute!
if Gitlab::CurrentSettings.sidekiq_throttling_enabled?
current_application_settings.sidekiq_throttling_queues.each do |queue|
Sidekiq::Queue[queue].limit = set_limit
end
end
end
private
def set_limit
factor = current_application_settings.sidekiq_throttling_factor
(factor * Sidekiq.options[:concurrency]).ceil
end
end
end
end

View file

@ -0,0 +1,34 @@
require 'spec_helper'
describe Gitlab::SidekiqThrottler do
before do
Sidekiq.options[:concurrency] = 35
stub_application_setting(
sidekiq_throttling_enabled: true,
sidekiq_throttling_factor: 0.1,
sidekiq_throttling_queues: %w[build project_cache]
)
end
describe '#set_limit' do
it 'returns the correct limit' do
expect(Gitlab::SidekiqThrottler.send(:set_limit)).to eq 4
end
end
describe '#execute!' do
it 'sets limits on the selected queues' do
Gitlab::SidekiqThrottler.execute!
expect(Sidekiq::Queue['build'].limit).to eq 4
expect(Sidekiq::Queue['project_cache'].limit).to eq 4
end
it 'does not set limits on other queues' do
Gitlab::SidekiqThrottler.execute!
expect(Sidekiq::Queue['merge'].limit).to be_nil
end
end
end