sidekiq-limit_fetch 4.4.0 → 4.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +2 -0
  3. data/.rubocop.yml +29 -0
  4. data/Appraisals +2 -0
  5. data/Gemfile +2 -0
  6. data/Rakefile +2 -0
  7. data/bench/compare.rb +17 -13
  8. data/demo/Gemfile +3 -2
  9. data/demo/Rakefile +6 -5
  10. data/demo/app/workers/a_worker.rb +2 -0
  11. data/demo/app/workers/b_worker.rb +2 -0
  12. data/demo/app/workers/c_worker.rb +2 -1
  13. data/demo/app/workers/fast_worker.rb +2 -0
  14. data/demo/app/workers/slow_worker.rb +2 -0
  15. data/demo/config/application.rb +3 -1
  16. data/demo/config/boot.rb +4 -2
  17. data/demo/config/environment.rb +3 -1
  18. data/demo/config/environments/development.rb +2 -0
  19. data/docker-compose.dev.yml +2 -2
  20. data/lib/sidekiq/extensions/manager.rb +20 -17
  21. data/lib/sidekiq/extensions/queue.rb +16 -13
  22. data/lib/sidekiq/limit_fetch/global/monitor.rb +64 -58
  23. data/lib/sidekiq/limit_fetch/global/selector.rb +49 -44
  24. data/lib/sidekiq/limit_fetch/global/semaphore.rb +130 -123
  25. data/lib/sidekiq/limit_fetch/instances.rb +22 -16
  26. data/lib/sidekiq/limit_fetch/queues.rb +163 -137
  27. data/lib/sidekiq/limit_fetch/unit_of_work.rb +26 -22
  28. data/lib/sidekiq/limit_fetch.rb +68 -64
  29. data/lib/sidekiq-limit_fetch.rb +2 -0
  30. data/sidekiq-limit_fetch.gemspec +18 -10
  31. data/spec/sidekiq/extensions/manager_spec.rb +19 -0
  32. data/spec/sidekiq/extensions/queue_spec.rb +2 -0
  33. data/spec/sidekiq/limit_fetch/global/monitor_spec.rb +59 -32
  34. data/spec/sidekiq/limit_fetch/queues_spec.rb +34 -18
  35. data/spec/sidekiq/limit_fetch/semaphore_spec.rb +2 -0
  36. data/spec/sidekiq/limit_fetch_spec.rb +14 -4
  37. data/spec/spec_helper.rb +8 -3
  38. metadata +39 -14
@@ -1,32 +1,36 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Sidekiq
2
- class LimitFetch::UnitOfWork < BasicFetch::UnitOfWork
3
- def initialize(queue, job)
4
- if post_6_5?
5
- super(queue, job, Sidekiq)
6
- else
7
- super
4
+ module LimitFetch
5
+ class UnitOfWork < BasicFetch::UnitOfWork
6
+ def initialize(queue, job)
7
+ if post_6_5?
8
+ super(queue, job, Sidekiq)
9
+ else
10
+ super
11
+ end
12
+ redis_retryable { Queue[queue_name].increase_busy }
8
13
  end
9
- redis_retryable { Queue[queue_name].increase_busy }
10
- end
11
14
 
12
- def acknowledge
13
- redis_retryable { Queue[queue_name].decrease_busy }
14
- redis_retryable { Queue[queue_name].release }
15
- end
15
+ def acknowledge
16
+ redis_retryable { Queue[queue_name].decrease_busy }
17
+ redis_retryable { Queue[queue_name].release }
18
+ end
16
19
 
17
- def requeue
18
- super
19
- acknowledge
20
- end
20
+ def requeue
21
+ super
22
+ acknowledge
23
+ end
21
24
 
22
- private
25
+ private
23
26
 
24
- def post_6_5?
25
- Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('6.5.0')
26
- end
27
+ def post_6_5?
28
+ Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('6.5.0')
29
+ end
27
30
 
28
- def redis_retryable(&block)
29
- Sidekiq::LimitFetch.redis_retryable(&block)
31
+ def redis_retryable(&block)
32
+ Sidekiq::LimitFetch.redis_retryable(&block)
33
+ end
30
34
  end
31
35
  end
32
36
  end
@@ -1,91 +1,95 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'forwardable'
2
4
  require 'sidekiq'
3
5
  require 'sidekiq/manager'
4
6
  require 'sidekiq/api'
5
7
 
6
- module Sidekiq::LimitFetch
7
- autoload :UnitOfWork, 'sidekiq/limit_fetch/unit_of_work'
8
+ module Sidekiq
9
+ module LimitFetch
10
+ autoload :UnitOfWork, 'sidekiq/limit_fetch/unit_of_work'
8
11
 
9
- require_relative 'limit_fetch/instances'
10
- require_relative 'limit_fetch/queues'
11
- require_relative 'limit_fetch/global/semaphore'
12
- require_relative 'limit_fetch/global/selector'
13
- require_relative 'limit_fetch/global/monitor'
14
- require_relative 'extensions/queue'
15
- require_relative 'extensions/manager'
12
+ require_relative 'limit_fetch/instances'
13
+ require_relative 'limit_fetch/queues'
14
+ require_relative 'limit_fetch/global/semaphore'
15
+ require_relative 'limit_fetch/global/selector'
16
+ require_relative 'limit_fetch/global/monitor'
17
+ require_relative 'extensions/queue'
18
+ require_relative 'extensions/manager'
16
19
 
17
- TIMEOUT = Sidekiq::BasicFetch::TIMEOUT
20
+ TIMEOUT = Sidekiq::BasicFetch::TIMEOUT
18
21
 
19
- extend self
22
+ extend self
20
23
 
21
- def post_7?
22
- @post_7 ||= Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('7.0.0')
23
- end
24
+ def post_7?
25
+ @post_7 ||= Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('7.0.0')
26
+ end
24
27
 
25
- RedisBaseConnectionError = post_7? ? RedisClient::ConnectionError : Redis::BaseConnectionError
26
- RedisCommandError = post_7? ? RedisClient::CommandError : Redis::CommandError
28
+ def post_6_5?
29
+ @post_6_5 ||= Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('6.5.0')
30
+ end
27
31
 
28
- def new(_)
29
- self
30
- end
32
+ RedisBaseConnectionError = post_7? ? RedisClient::ConnectionError : Redis::BaseConnectionError
33
+ RedisCommandError = post_7? ? RedisClient::CommandError : Redis::CommandError
31
34
 
32
- def retrieve_work
33
- queue, job = redis_brpop(Queues.acquire)
34
- Queues.release_except(queue)
35
- UnitOfWork.new(queue, job) if job
36
- end
35
+ def new(_)
36
+ self
37
+ end
37
38
 
38
- def config
39
- # Post 6.5, Sidekiq.options is deprecated and replaced with passing Sidekiq directly
40
- post_6_5? ? Sidekiq : Sidekiq.options
41
- end
39
+ def retrieve_work
40
+ queue, job = redis_brpop(Queues.acquire)
41
+ Queues.release_except(queue)
42
+ UnitOfWork.new(queue, job) if job
43
+ end
42
44
 
43
- # Backwards compatibility for sidekiq v6.1.0
44
- # @see https://github.com/mperham/sidekiq/pull/4602
45
- def bulk_requeue(*args)
46
- if Sidekiq::BasicFetch.respond_to?(:bulk_requeue) # < 6.1.0
47
- Sidekiq::BasicFetch.bulk_requeue(*args)
48
- else # 6.1.0+
49
- Sidekiq::BasicFetch.new(config).bulk_requeue(*args)
45
+ def config
46
+ # Post 6.5, Sidekiq.options is deprecated and replaced with passing Sidekiq directly
47
+ post_6_5? ? Sidekiq : Sidekiq.options
50
48
  end
51
- end
52
49
 
53
- def redis_retryable
54
- yield
55
- rescue RedisBaseConnectionError
56
- sleep TIMEOUT
57
- retry
58
- rescue RedisCommandError => error
59
- # If Redis was restarted and is still loading its snapshot,
60
- # then we should treat this as a temporary connection error too.
61
- if error.message =~ /^LOADING/
50
+ # Backwards compatibility for sidekiq v6.1.0
51
+ # @see https://github.com/mperham/sidekiq/pull/4602
52
+ def bulk_requeue(*args)
53
+ if Sidekiq::BasicFetch.respond_to?(:bulk_requeue) # < 6.1.0
54
+ Sidekiq::BasicFetch.bulk_requeue(*args)
55
+ else # 6.1.0+
56
+ Sidekiq::BasicFetch.new(post_7? ? Sidekiq.default_configuration.default_capsule : config).bulk_requeue(*args)
57
+ end
58
+ end
59
+
60
+ def redis_retryable
61
+ yield
62
+ rescue RedisBaseConnectionError
62
63
  sleep TIMEOUT
63
64
  retry
64
- else
65
- raise
66
- end
67
- end
65
+ rescue RedisCommandError => e
66
+ # If Redis was restarted and is still loading its snapshot,
67
+ # then we should treat this as a temporary connection error too.
68
+ raise unless e.message =~ /^LOADING/
68
69
 
69
- private
70
+ sleep TIMEOUT
71
+ retry
72
+ end
70
73
 
71
- def post_6_5?
72
- @post_6_5 ||= Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('6.5.0')
73
- end
74
+ private
74
75
 
75
- def redis_brpop(queues)
76
- if queues.empty?
77
- sleep TIMEOUT # there are no queues to handle, so lets sleep
78
- [] # and return nothing
79
- else
80
- redis_retryable do
81
- Sidekiq.redis do |it|
82
- if post_7?
83
- it.blocking_call(false, "brpop", *queues, TIMEOUT)
84
- else
85
- it.brpop(*queues, timeout: TIMEOUT)
76
+ # rubocop:disable Metrics/MethodLength
77
+ def redis_brpop(queues)
78
+ if queues.empty?
79
+ sleep TIMEOUT # there are no queues to handle, so lets sleep
80
+ [] # and return nothing
81
+ else
82
+ redis_retryable do
83
+ Sidekiq.redis do |it|
84
+ if post_7?
85
+ it.blocking_call(false, 'brpop', *queues, TIMEOUT)
86
+ else
87
+ it.brpop(*queues, timeout: TIMEOUT)
88
+ end
86
89
  end
87
90
  end
88
91
  end
89
92
  end
93
+ # rubocop:enable Metrics/MethodLength
90
94
  end
91
95
  end
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'sidekiq/limit_fetch'
@@ -1,24 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
1
4
  Gem::Specification.new do |gem|
2
5
  gem.name = 'sidekiq-limit_fetch'
3
- gem.version = '4.4.0'
6
+ gem.version = '4.4.1'
4
7
  gem.license = 'MIT'
5
8
  gem.authors = ['Dean Perry']
6
9
  gem.email = 'dean@deanpcmad.com'
7
10
  gem.summary = 'Sidekiq strategy to support queue limits'
8
11
  gem.homepage = 'https://github.com/deanpcmad/sidekiq-limit_fetch'
9
- gem.description = "Sidekiq strategy to restrict number of workers which are able to run specified queues simultaneously."
12
+ gem.description = 'Sidekiq strategy to restrict number of workers which are able to run specified ' \
13
+ 'queues simultaneously.'
14
+
15
+ gem.metadata['homepage_uri'] = gem.homepage
16
+ gem.metadata['source_code_uri'] = 'https://github.com/deanpcmad/sidekiq-limit_fetch'
17
+ gem.metadata['changelog_uri'] = 'https://github.com/deanpcmad/sidekiq-limit_fetch/blob/master/CHANGELOG.md'
18
+ gem.metadata['rubygems_mfa_required'] = 'true'
10
19
 
11
- gem.metadata["homepage_uri"] = gem.homepage
12
- gem.metadata["source_code_uri"] = "https://github.com/deanpcmad/sidekiq-limit_fetch"
13
- gem.metadata["changelog_uri"] = "https://github.com/deanpcmad/sidekiq-limit_fetch/blob/master/CHANGELOG.md"
20
+ gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
21
+ gem.require_paths = %w[lib]
14
22
 
15
- gem.files = `git ls-files`.split($/)
16
- gem.test_files = gem.files.grep %r{^spec/}
17
- gem.require_paths = %w(lib)
23
+ gem.required_ruby_version = '>= 2.7.0'
18
24
 
19
25
  gem.add_dependency 'sidekiq', '>= 6'
20
- gem.add_development_dependency 'redis-namespace', '~> 1.5', '>= 1.5.2'
21
26
  gem.add_development_dependency 'appraisal'
22
- gem.add_development_dependency 'rspec'
23
27
  gem.add_development_dependency 'rake'
28
+ gem.add_development_dependency 'redis-namespace', '~> 1.5', '>= 1.5.2'
29
+ gem.add_development_dependency 'rspec'
30
+ gem.add_development_dependency 'rubocop'
31
+ gem.add_development_dependency 'simplecov'
24
32
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Sidekiq::Manager do
4
+ let(:capsule_or_options) do
5
+ if Sidekiq::LimitFetch.post_7?
6
+ Sidekiq.default_configuration.default_capsule
7
+ elsif Sidekiq::LimitFetch.post_6_5?
8
+ Sidekiq
9
+ else
10
+ Sidekiq.options
11
+ end
12
+ end
13
+
14
+ it 'can be instantiated' do
15
+ expect(described_class).to be < Sidekiq::Manager::InitLimitFetch
16
+ manager = described_class.new(capsule_or_options)
17
+ expect(manager).to respond_to(:start)
18
+ end
19
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe Sidekiq::Queue do
2
4
  context 'singleton' do
3
5
  shared_examples :constructor do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe Sidekiq::LimitFetch::Global::Monitor do
2
4
  let(:monitor) { described_class.start! ttl, timeout }
3
5
  let(:ttl) { 1 }
@@ -12,11 +14,11 @@ RSpec.describe Sidekiq::LimitFetch::Global::Monitor do
12
14
 
13
15
  it 'should remove invalidated old locks' do
14
16
  2.times { queue.acquire }
15
- sleep 2*ttl
17
+ sleep ttl * 2
16
18
  expect(queue.probed).to eq 2
17
19
 
18
20
  allow(described_class).to receive(:update_heartbeat)
19
- sleep 2*ttl
21
+ sleep ttl * 2
20
22
  expect(queue.probed).to eq 0
21
23
  end
22
24
 
@@ -26,61 +28,86 @@ RSpec.describe Sidekiq::LimitFetch::Global::Monitor do
26
28
  Sidekiq.redis do |it|
27
29
  it.del Sidekiq::LimitFetch::Global::Monitor::PROCESS_SET
28
30
  end
29
- sleep 2*ttl
31
+ sleep ttl * 2
30
32
  expect(queue.probed).to eq 0
31
33
  end
32
-
33
34
  end
34
35
 
35
36
  context 'dynamic queue' do
36
37
  let(:limits) do
37
38
  {
38
39
  'queue1' => 3,
39
- 'queue2' => 3,
40
+ 'queue2' => 3
40
41
  }
41
42
  end
42
43
  let(:queues) { %w[queue1 queue2] }
43
44
  let(:queue) { Sidekiq::LimitFetch::Queues }
44
- let(:options) do
45
- {
46
- limits: limits,
47
- queues: queues,
48
- }
49
- end
50
45
 
51
- it 'should add dynamic queue' do
52
- queue.start(options.merge({ dynamic: true }))
53
- monitor
46
+ let(:config) { Sidekiq::Config.new(options) }
47
+ let(:capsule) do
48
+ config.capsule('default') do |cap|
49
+ cap.concurrency = 1
50
+ cap.queues = config[:queues]
51
+ end
52
+ end
54
53
 
55
- expect(queue.instance_variable_get(:@queues)).not_to include('queue3')
54
+ let(:capsule_or_options) do
55
+ Sidekiq::LimitFetch.post_7? ? capsule : options
56
+ end
56
57
 
57
- Sidekiq.redis do |it|
58
- it.sadd 'queues', 'queue3'
58
+ context 'without excluded queue' do
59
+ let(:options) do
60
+ {
61
+ limits: limits,
62
+ queues: queues,
63
+ dynamic: true
64
+ }
59
65
  end
60
66
 
61
- sleep 2*ttl
62
- expect(queue.instance_variable_get(:@queues)).to include('queue3')
67
+ it 'should add dynamic queue' do
68
+ queue.start(capsule_or_options)
69
+ monitor
63
70
 
64
- Sidekiq.redis do |it|
65
- it.srem 'queues', 'queue3'
71
+ expect(queue.instance_variable_get(:@queues)).not_to include('queue3')
72
+
73
+ Sidekiq.redis do |it|
74
+ it.sadd 'queues', 'queue3'
75
+ end
76
+
77
+ sleep ttl * 2
78
+ expect(queue.instance_variable_get(:@queues)).to include('queue3')
79
+
80
+ Sidekiq.redis do |it|
81
+ it.srem 'queues', 'queue3'
82
+ end
66
83
  end
67
84
  end
68
85
 
69
- it 'should exclude excluded dynamic queue' do
70
- queue.start(options.merge({ dynamic: { exclude: ['queue4'] } }))
71
- monitor
86
+ context 'with excluded queue' do
87
+ let(:options) do
88
+ {
89
+ limits: limits,
90
+ queues: queues,
91
+ dynamic: { exclude: ['queue4'] }
92
+ }
93
+ end
72
94
 
73
- expect(queue.instance_variable_get(:@queues)).not_to include('queue4')
95
+ it 'should exclude excluded dynamic queue' do
96
+ queue.start(capsule_or_options)
97
+ monitor
74
98
 
75
- Sidekiq.redis do |it|
76
- it.sadd 'queues', 'queue4'
77
- end
99
+ expect(queue.instance_variable_get(:@queues)).not_to include('queue4')
78
100
 
79
- sleep 2*ttl
80
- expect(queue.instance_variable_get(:@queues)).not_to include('queue4')
101
+ Sidekiq.redis do |it|
102
+ it.sadd 'queues', 'queue4'
103
+ end
81
104
 
82
- Sidekiq.redis do |it|
83
- it.srem 'queues', 'queue4'
105
+ sleep ttl * 2
106
+ expect(queue.instance_variable_get(:@queues)).not_to include('queue4')
107
+
108
+ Sidekiq.redis do |it|
109
+ it.srem 'queues', 'queue4'
110
+ end
84
111
  end
85
112
  end
86
113
  end
@@ -1,19 +1,35 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe Sidekiq::LimitFetch::Queues do
2
4
  let(:queues) { %w[queue1 queue2] }
3
- let(:limits) {{ 'queue1' => 3 }}
5
+ let(:limits) { { 'queue1' => 3 } }
4
6
  let(:strict) { true }
5
- let(:blocking) {}
6
- let(:process_limits) {{ 'queue2' => 3 }}
7
+ let(:blocking) { nil }
8
+ let(:process_limits) { { 'queue2' => 3 } }
7
9
 
8
10
  let(:options) do
9
- { queues: queues,
10
- limits: limits,
11
- strict: strict,
11
+ { queues: queues,
12
+ limits: limits,
13
+ strict: strict,
12
14
  blocking: blocking,
13
15
  process_limits: process_limits }
14
16
  end
15
17
 
16
- before { subject.start options }
18
+ let(:config) { Sidekiq::Config.new(options) }
19
+ let(:capsule) do
20
+ config.capsule('default') do |cap|
21
+ cap.concurrency = 1
22
+ cap.queues = config[:queues]
23
+ end
24
+ end
25
+
26
+ let(:capsule_or_options) do
27
+ Sidekiq::LimitFetch.post_7? ? capsule : options
28
+ end
29
+
30
+ before do
31
+ subject.start(capsule_or_options)
32
+ end
17
33
 
18
34
  def in_thread(&block)
19
35
  thr = Thread.new(&block)
@@ -51,36 +67,36 @@ RSpec.describe Sidekiq::LimitFetch::Queues do
51
67
  end
52
68
 
53
69
  it 'should release queues' do
54
- in_thread {
70
+ in_thread do
55
71
  subject.acquire
56
72
  subject.release_except nil
57
- }
73
+ end
58
74
  expect(Sidekiq::Queue['queue1'].probed).to eq 0
59
75
  expect(Sidekiq::Queue['queue2'].probed).to eq 0
60
76
  end
61
77
 
62
78
  it 'should release queues except selected' do
63
- in_thread {
79
+ in_thread do
64
80
  subject.acquire
65
81
  subject.release_except 'queue:queue1'
66
- }
82
+ end
67
83
  expect(Sidekiq::Queue['queue1'].probed).to eq 1
68
84
  expect(Sidekiq::Queue['queue2'].probed).to eq 0
69
85
  end
70
86
 
71
87
  it 'should release when no queues was acquired' do
72
- queues.each {|name| Sidekiq::Queue[name].pause }
73
- in_thread {
88
+ queues.each { |name| Sidekiq::Queue[name].pause }
89
+ in_thread do
74
90
  subject.acquire
75
91
  expect { subject.release_except nil }.not_to raise_exception
76
- }
92
+ end
77
93
  end
78
94
 
79
95
  context 'blocking' do
80
- let(:blocking) { %w(queue1) }
96
+ let(:blocking) { %w[queue1] }
81
97
 
82
98
  it 'should acquire blocking queues' do
83
- 3.times { in_thread { subject.acquire } }
99
+ 3.times { in_thread { subject.acquire } }
84
100
  expect(Sidekiq::Queue['queue1'].probed).to eq 3
85
101
  expect(Sidekiq::Queue['queue2'].probed).to eq 1
86
102
  end
@@ -101,11 +117,11 @@ RSpec.describe Sidekiq::LimitFetch::Queues do
101
117
  let(:strict) { false }
102
118
 
103
119
  it 'should retrieve weighted queues' do
104
- expect(subject.ordered_queues).to match_array(%w(queue1 queue2))
120
+ expect(subject.ordered_queues).to match_array(%w[queue1 queue2])
105
121
  end
106
122
  end
107
123
 
108
124
  it 'with strict flag should retrieve strictly ordered queues' do
109
- expect(subject.ordered_queues).to eq %w(queue1 queue2)
125
+ expect(subject.ordered_queues).to eq %w[queue1 queue2]
110
126
  end
111
127
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  RSpec.describe 'semaphore' do
2
4
  let(:name) { 'default' }
3
5
  subject { Sidekiq::LimitFetch::Global::Semaphore.new name }
@@ -1,12 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Thread.abort_on_exception = true
2
4
 
3
5
  RSpec.describe Sidekiq::LimitFetch do
4
- let(:options) {{ queues: queues, limits: limits }}
5
- let(:queues) { %w(queue1 queue1 queue2 queue2) }
6
- let(:limits) {{ 'queue1' => 1, 'queue2' => 2 }}
6
+ let(:options) { { queues: queues, limits: limits } }
7
+ let(:queues) { %w[queue1 queue1 queue2 queue2] }
8
+ let(:limits) { { 'queue1' => 1, 'queue2' => 2 } }
9
+ let(:config) { Sidekiq::Config.new(options) }
10
+ let(:capsule) do
11
+ config.capsule('default') do |cap|
12
+ cap.concurrency = 1
13
+ cap.queues = config[:queues]
14
+ end
15
+ end
16
+ let(:capsule_or_config) { Sidekiq::LimitFetch.post_7? ? capsule : options }
7
17
 
8
18
  before do
9
- subject::Queues.start options
19
+ subject::Queues.start(capsule_or_config)
10
20
 
11
21
  Sidekiq.redis do |it|
12
22
  it.del 'queue:queue1'
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'simplecov'
4
+ SimpleCov.start
5
+
1
6
  require 'sidekiq/limit_fetch'
2
7
 
3
8
  if Sidekiq::LimitFetch.post_7?
@@ -6,7 +11,7 @@ if Sidekiq::LimitFetch.post_7?
6
11
  end
7
12
  else
8
13
  Sidekiq.logger = nil
9
- Sidekiq.redis = { namespace: ENV['namespace'] }
14
+ Sidekiq.redis = { namespace: ENV.fetch('namespace', nil) }
10
15
  end
11
16
 
12
17
  RSpec.configure do |config|
@@ -16,7 +21,7 @@ RSpec.configure do |config|
16
21
  config.before do
17
22
  Sidekiq::Queue.reset_instances!
18
23
  Sidekiq.redis do |it|
19
- clean_redis = ->(queue) do
24
+ clean_redis = lambda do |queue|
20
25
  it.pipelined do |pipeline|
21
26
  pipeline.del "limit_fetch:limit:#{queue}"
22
27
  pipeline.del "limit_fetch:process_limit:#{queue}"
@@ -28,7 +33,7 @@ RSpec.configure do |config|
28
33
  end
29
34
 
30
35
  clean_redis.call(name) if defined?(name)
31
- queues.each(&clean_redis) if defined?(queues) and queues.is_a? Array
36
+ queues.each(&clean_redis) if defined?(queues) && queues.is_a?(Array)
32
37
  end
33
38
  end
34
39
  end