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