sidekiq-limit_fetch 4.4.0 → 4.4.1

Sign up to get free protection for your applications and to get access to all the features.
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