From d9cfb649fe70ff30655277217d63f9201024934f Mon Sep 17 00:00:00 2001 From: Matt Duszynski Date: Sat, 31 Jul 2021 12:25:29 -0600 Subject: [PATCH 1/2] Use TIMEOUT constant instead of hardcoded 2 second sleep --- lib/sidekiq/fetch.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/sidekiq/fetch.rb b/lib/sidekiq/fetch.rb index e23c595e6..2c3a0d2f6 100644 --- a/lib/sidekiq/fetch.rb +++ b/lib/sidekiq/fetch.rb @@ -40,7 +40,7 @@ def retrieve_work # 4825 Sidekiq Pro with all queues paused will return an # empty set of queues with a trailing TIMEOUT value. if qs.size <= 1 - sleep(2) + sleep(TIMEOUT) return nil end From 4f7ccf59c86dc469d275174517f060bdc29b953b Mon Sep 17 00:00:00 2001 From: Matt Duszynski Date: Sat, 31 Jul 2021 12:41:00 -0600 Subject: [PATCH 2/2] Add a test --- test/test_fetch.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/test_fetch.rb b/test/test_fetch.rb index 7a7ee7d7b..65d9106bf 100644 --- a/test/test_fetch.rb +++ b/test/test_fetch.rb @@ -57,4 +57,11 @@ assert_equal 1, q2.size end + it 'sleeps when no queues are active' do + fetch = Sidekiq::BasicFetch.new(:queues => []) + mock = Minitest::Mock.new + mock.expect(:call, nil, [Sidekiq::BasicFetch::TIMEOUT]) + fetch.stub(:sleep, mock) { assert_nil fetch.retrieve_work } + mock.verify + end end