Skip to content

Commit

Permalink
Drop support for Sidekiq <6.4 (ixti#8)
Browse files Browse the repository at this point in the history
  • Loading branch information
holstvoogd authored Jul 19, 2022
1 parent ffde42a commit f82d980
Show file tree
Hide file tree
Showing 14 changed files with 26 additions and 222 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
fail-fast: false
matrix:
ruby: [ "2.7", "3.0", "3.1" ]
sidekiq: [ "6.0", "6.1", "6.2", "6.3", "6.4", "6.5" ]
sidekiq: [ "6.4", "6.5" ]

runs-on: ubuntu-latest

Expand Down
6 changes: 2 additions & 4 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,5 @@ matrix:
gemfile: Gemfile

gemfile:
- gemfiles/sidekiq_5.0.gemfile
- gemfiles/sidekiq_5.1.gemfile
- gemfiles/sidekiq_5.2.gemfile
- gemfiles/sidekiq_6.0.gemfile
- gemfiles/sidekiq_6.4.gemfile
- gemfiles/sidekiq_6.5.gemfile
16 changes: 0 additions & 16 deletions Appraisals
Original file line number Diff line number Diff line change
@@ -1,21 +1,5 @@
# frozen_string_literal: true

appraise "sidekiq-6.0" do
gem "sidekiq", "~> 6.0.0"
end

appraise "sidekiq-6.1" do
gem "sidekiq", "~> 6.1.0"
end

appraise "sidekiq-6.2" do
gem "sidekiq", "~> 6.2.0"
end

appraise "sidekiq-6.3" do
gem "sidekiq", "~> 6.3.0"
end

appraise "sidekiq-6.4" do
gem "sidekiq", "~> 6.4.0"
end
Expand Down
4 changes: 0 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -266,10 +266,6 @@ dropped.

This library aims to support work with following [Sidekiq][sidekiq] versions:

* Sidekiq 6.0.x
* Sidekiq 6.1.x
* Sidekiq 6.2.x
* Sidekiq 6.3.x
* Sidekiq 6.4.x
* Sidekiq 6.5.x

Expand Down
33 changes: 0 additions & 33 deletions gemfiles/sidekiq_6.0.gemfile

This file was deleted.

33 changes: 0 additions & 33 deletions gemfiles/sidekiq_6.1.gemfile

This file was deleted.

33 changes: 0 additions & 33 deletions gemfiles/sidekiq_6.2.gemfile

This file was deleted.

33 changes: 0 additions & 33 deletions gemfiles/sidekiq_6.3.gemfile

This file was deleted.

14 changes: 3 additions & 11 deletions lib/sidekiq/throttled.rb
Original file line number Diff line number Diff line change
Expand Up @@ -97,18 +97,10 @@ def throttled?(message)
def setup_strategy!(sidekiq_config)
require "sidekiq/throttled/fetch"

sidekiq_version = Gem::Version.new(Sidekiq::VERSION)

# https://github.com/mperham/sidekiq/commit/67daa7a408b214d593100f782271ed108686c147
sidekiq_config = sidekiq_config.options if sidekiq_version < Gem::Version.new("6.5.0")

# https://github.com/mperham/sidekiq/commit/fce05c9d4b4c0411c982078a4cf3a63f20f739bc
sidekiq_config[:fetch] =
if Gem::Version.new(Sidekiq::VERSION) < Gem::Version.new("6.1.0")
Sidekiq::Throttled::Fetch
else
Sidekiq::Throttled::Fetch.new(sidekiq_config)
end
sidekiq_config = sidekiq_config.options if Gem::Version.new(Sidekiq::VERSION) < Gem::Version.new("6.5.0")

sidekiq_config[:fetch] = Sidekiq::Throttled::Fetch.new(sidekiq_config)
end

# Tries to preload constant by it's name once.
Expand Down
41 changes: 14 additions & 27 deletions lib/sidekiq/throttled/fetch.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,33 +12,6 @@ module Throttled
#
# @private
class Fetch
module BulkRequeue
# Requeues all given units as a single operation.
#
# @see http://www.rubydoc.info/github/redis/redis-rb/master/Redis#pipelined-instance_method
# @param [Array<Fetch::UnitOfWork>] units
# @return [void]
def bulk_requeue(units, _options)
return if units.empty?

Sidekiq.logger.debug { "Re-queueing terminated jobs" }
Sidekiq.redis do |conn|
conn.pipelined do |pipeline|
units.each { |unit| unit.requeue(pipeline) }
end
end
Sidekiq.logger.info("Pushed #{units.size} jobs back to Redis")
rescue => e
Sidekiq.logger.warn("Failed to requeue #{units.size} jobs: #{e}")
end
end

# https://github.com/mperham/sidekiq/commit/fce05c9d4b4c0411c982078a4cf3a63f20f739bc
if Gem::Version.new(Sidekiq::VERSION) < Gem::Version.new("6.1.0")
extend BulkRequeue
else
include BulkRequeue
end
# Timeout to sleep between fetch retries in case of no job received,
# as well as timeout to wait for redis to give us something to work.
TIMEOUT = 2
Expand Down Expand Up @@ -77,6 +50,20 @@ def retrieve_work
nil
end

def bulk_requeue(units, _options)
return if units.empty?

Sidekiq.logger.debug { "Re-queueing terminated jobs" }
Sidekiq.redis do |conn|
conn.pipelined do |pipeline|
units.each { |unit| unit.requeue(pipeline) }
end
end
Sidekiq.logger.info("Pushed #{units.size} jobs back to Redis")
rescue => e
Sidekiq.logger.warn("Failed to requeue #{units.size} jobs: #{e}")
end

private

# Tries to pop pair of `queue` and job `message` out of sidekiq queues.
Expand Down
2 changes: 1 addition & 1 deletion sidekiq-throttled.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Gem::Specification.new do |spec|

spec.add_runtime_dependency "concurrent-ruby"
spec.add_runtime_dependency "redis-prescription"
spec.add_runtime_dependency "sidekiq"
spec.add_runtime_dependency "sidekiq", ">= 6.4"

spec.add_development_dependency "bundler", ">= 2.0"
end
18 changes: 2 additions & 16 deletions spec/sidekiq/throttled/fetch_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
end
end

shared_examples "provides bulk requeue API" do |scope|
describe "#bulk_requeue" do
before do
Sidekiq::Client.push_bulk({
"class" => WorkingClassHero,
Expand All @@ -63,25 +63,11 @@
works = Array.new(3) { fetcher.retrieve_work }
expect(queue.size).to eq(0)

scope.bulk_requeue(works, options)
fetcher.bulk_requeue(works, options)
expect(queue.size).to eq(3)
end
end

if Gem::Version.new(Sidekiq::VERSION) < Gem::Version.new("6.1.0")
context "when sidekiq version < 6.1.0" do
describe ".bulk_requeue" do
include_examples "provides bulk requeue API", described_class
end
end
else
context "when sidekiq version >= 6.1.0" do
describe "#bulk_requeue" do
include_examples "provides bulk requeue API", described_class.new({ :queues => %w[heroes] })
end
end
end

describe "#retrieve_work" do
it "sleeps instead of BRPOP when queues list is empty" do
expect(fetcher).to receive(:filter_queues).and_return([])
Expand Down
6 changes: 1 addition & 5 deletions spec/sidekiq/throttled_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,7 @@
end

it "presets Sidekiq fetch strategy to Sidekiq::Throttled::Fetch" do
if Gem::Version.new(Sidekiq::VERSION) < Gem::Version.new("6.1.0")
expect(Sidekiq.options[:fetch]).to be(Sidekiq::Throttled::Fetch)
else
expect(Sidekiq.options[:fetch]).to be_a Sidekiq::Throttled::Fetch
end
expect(Sidekiq.options[:fetch]).to be_a Sidekiq::Throttled::Fetch
end

it "injects Sidekiq::Throttled::Middleware server middleware" do
Expand Down
7 changes: 2 additions & 5 deletions spec/sidekiq_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,8 @@ def jid
Sidekiq.configure_server(&configure_redis)
Sidekiq.configure_client(&configure_redis)

# See https://github.com/mperham/sidekiq/blob/v6.2.0/Changes.md
if Gem::Version.new(Sidekiq::VERSION) >= Gem::Version.new("6.2.0")
require "sidekiq/web"
Sidekiq::Web.use Rack::Session::Cookie, :secret => SecureRandom.hex(32), :same_site => true, :max_age => 86_400
end
require "sidekiq/web"
Sidekiq::Web.use Rack::Session::Cookie, :secret => SecureRandom.hex(32), :same_site => true, :max_age => 86_400

RSpec.configure do |config|
config.include JidGenerator
Expand Down

0 comments on commit f82d980

Please sign in to comment.