lib/sidekiq/throttled.rb in sidekiq-throttled-0.18.0 vs lib/sidekiq/throttled.rb in sidekiq-throttled-1.0.0.alpha
- old
+ new
@@ -2,18 +2,17 @@
# 3rd party
require "sidekiq"
# internal
-require "sidekiq/throttled/version"
-require "sidekiq/throttled/communicator"
-require "sidekiq/throttled/configuration"
-require "sidekiq/throttled/queues_pauser"
-require "sidekiq/throttled/registry"
-require "sidekiq/throttled/job"
-require "sidekiq/throttled/worker"
-require "sidekiq/throttled/utils"
+require_relative "./throttled/version"
+require_relative "./throttled/configuration"
+require_relative "./throttled/fetch"
+require_relative "./throttled/registry"
+require_relative "./throttled/job"
+require_relative "./throttled/middleware"
+require_relative "./throttled/worker"
# @see https://github.com/mperham/sidekiq/
module Sidekiq
# Concurrency and threshold throttling for Sidekiq.
#
@@ -41,34 +40,25 @@
# def perform
# # ...
# end
# end
module Throttled
- MUTEX = Mutex.new
- private_constant :MUTEX
-
class << self
- include Utils
-
# @return [Configuration]
def configuration
@configuration ||= Configuration.new
end
# Hooks throttler into sidekiq.
#
# @return [void]
def setup!
- Communicator.instance.setup!
- QueuesPauser.instance.setup!
-
Sidekiq.configure_server do |config|
- setup_strategy!(config)
-
- require "sidekiq/throttled/middleware"
- config.server_middleware do |chain|
- chain.add Sidekiq::Throttled::Middleware
+ if Gem::Version.new("7.0.0") <= Gem::Version.new(Sidekiq::VERSION)
+ config[:fetch_class] = Sidekiq::Throttled::Fetch
+ else
+ config[:fetch] = Sidekiq::Throttled::Fetch.new(config)
end
end
end
# Tells whenever job is throttled or not.
@@ -78,46 +68,22 @@
def throttled?(message)
message = JSON.parse message
job = message.fetch("wrapped") { message.fetch("class") { return false } }
jid = message.fetch("jid") { return false }
- preload_constant! job
-
Registry.get job do |strategy|
return strategy.throttled?(jid, *message["args"])
end
false
rescue
false
end
+ end
+ end
- private
-
- # @return [void]
- def setup_strategy!(sidekiq_config)
- require "sidekiq/throttled/fetch"
-
- # https://github.com/mperham/sidekiq/commit/67daa7a408b214d593100f782271ed108686c147
- 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.
- #
- # Somehow, sometimes, some classes are not eager loaded upon Rails init,
- # leading to throttling config not being registered prior job perform.
- # And that leaves us with concurrency limit + 1 situation upon Sidekiq
- # server restart (becomes normal after all Sidekiq processes handled
- # at leas onr job of that class).
- #
- # @return [void]
- def preload_constant!(job)
- MUTEX.synchronize do
- @preloaded ||= {}
- @preloaded[job] ||= constantize(job) || true
- end
- end
+ configure_server do |config|
+ config.server_middleware do |chain|
+ chain.add Sidekiq::Throttled::Middleware
end
end
end