From 2afeb8b2c290c305e17b78958a349a75a7a2d3ab Mon Sep 17 00:00:00 2001 From: Bobby McDonald Date: Tue, 16 Aug 2022 13:14:31 -0400 Subject: [PATCH] Updates that support Sidekiq 6.5+ Some changes to Sidekiq internals require changes to how we pass options to certain Sidekiq classes we inherit from. These changes maintain backwards compatibility, but add some complexity to the code. --- lib/sidekiq/limit_fetch.rb | 11 ++++++++++- lib/sidekiq/limit_fetch/unit_of_work.rb | 10 +++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/sidekiq/limit_fetch.rb b/lib/sidekiq/limit_fetch.rb index 88acba7..e5fa36c 100644 --- a/lib/sidekiq/limit_fetch.rb +++ b/lib/sidekiq/limit_fetch.rb @@ -28,13 +28,18 @@ module Sidekiq::LimitFetch UnitOfWork.new(queue, job) if job end + def config + # Post 6.5, Sidekiq.options is deprecated and replaced with passing Sidekiq directly + post_6_5? ? Sidekiq : Sidekiq.options + end + # Backwards compatibility for sidekiq v6.1.0 # @see https://github.com/mperham/sidekiq/pull/4602 def bulk_requeue(*args) if Sidekiq::BasicFetch.respond_to?(:bulk_requeue) # < 6.1.0 Sidekiq::BasicFetch.bulk_requeue(*args) else # 6.1.0+ - Sidekiq::BasicFetch.new(Sidekiq.options).bulk_requeue(*args) + Sidekiq::BasicFetch.new(config).bulk_requeue(*args) end end @@ -56,6 +61,10 @@ module Sidekiq::LimitFetch private + def post_6_5? + @post_6_5 ||= Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('6.5.0') + end + def redis_brpop(queues) if queues.empty? sleep TIMEOUT # there are no queues to handle, so lets sleep diff --git a/lib/sidekiq/limit_fetch/unit_of_work.rb b/lib/sidekiq/limit_fetch/unit_of_work.rb index 05f2bc9..c306eed 100644 --- a/lib/sidekiq/limit_fetch/unit_of_work.rb +++ b/lib/sidekiq/limit_fetch/unit_of_work.rb @@ -1,7 +1,11 @@ module Sidekiq class LimitFetch::UnitOfWork < BasicFetch::UnitOfWork def initialize(queue, job) - super + if post_6_5? + super(queue, job, Sidekiq) + else + super + end redis_retryable { Queue[queue_name].increase_busy } end @@ -17,6 +21,10 @@ module Sidekiq private + def post_6_5? + Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new('6.5.0') + end + def redis_retryable(&block) Sidekiq::LimitFetch.redis_retryable(&block) end