summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatricio Cano <suprnova32@gmail.com>2016-11-08 16:31:37 -0600
committerPatricio Cano <suprnova32@gmail.com>2016-11-10 11:38:11 -0600
commit208530494e5d2c5c62a3e1c24489aae0e4935e3a (patch)
tree5e4d76a6380566ab771b58c5017fba23ff321ace
parent1d3ada80ad6cb9a4927512fdf4018907bf3098a6 (diff)
downloadgitlab-ce-208530494e5d2c5c62a3e1c24489aae0e4935e3a.tar.gz
Refactored initializer code to its own class and added tests
-rw-r--r--config/initializers/sidekiq.rb8
-rw-r--r--lib/gitlab/sidekiq_throttler.rb21
-rw-r--r--spec/lib/gitlab/sidekiq_throttler_spec.rb34
3 files changed, 56 insertions, 7 deletions
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index 7cc5e396f98..b87b31d9697 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -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
diff --git a/lib/gitlab/sidekiq_throttler.rb b/lib/gitlab/sidekiq_throttler.rb
new file mode 100644
index 00000000000..771736e7606
--- /dev/null
+++ b/lib/gitlab/sidekiq_throttler.rb
@@ -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
diff --git a/spec/lib/gitlab/sidekiq_throttler_spec.rb b/spec/lib/gitlab/sidekiq_throttler_spec.rb
new file mode 100644
index 00000000000..ac4a64c0f43
--- /dev/null
+++ b/spec/lib/gitlab/sidekiq_throttler_spec.rb
@@ -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