Refactored initializer code to its own class and added tests
This commit is contained in:
parent
1d3ada80ad
commit
208530494e
3 changed files with 56 additions and 7 deletions
|
@ -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
|
||||
|
|
21
lib/gitlab/sidekiq_throttler.rb
Normal file
21
lib/gitlab/sidekiq_throttler.rb
Normal 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
|
34
spec/lib/gitlab/sidekiq_throttler_spec.rb
Normal file
34
spec/lib/gitlab/sidekiq_throttler_spec.rb
Normal 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
|
Loading…
Reference in a new issue