Commit 20853049 authored by Patricio Cano's avatar Patricio Cano

Refactored initializer code to its own class and added tests

parent 1d3ada80
......@@ -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
......
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
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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment