lib/sidekiq/throttled/strategy/script.rb in sidekiq-throttled-0.5.0 vs lib/sidekiq/throttled/strategy/script.rb in sidekiq-throttled-0.6.0

- old
+ new

@@ -29,29 +29,20 @@ # LUA script SHA1 digest. # @return [String] attr_reader :digest # @param [#to_s] source Lua script - # @paral [Logger] logger + # @param [Logger] logger def initialize(source, logger: Sidekiq.logger) @source = source.to_s.strip.freeze @digest = Digest::SHA1.hexdigest(@source).freeze @logger = logger end - # Executes script and returns result of execution - def eval(*args) - Sidekiq.redis { |conn| conn.evalsha(@digest, *args) } - rescue => e - raise unless e.message.include? NOSCRIPT - load_and_eval(*args) - end - - private - - # Loads script into redis cache and executes it. - def load_and_eval(*args) + # Loads script to redis + # @return [void] + def bootstrap! Sidekiq.redis do |conn| digest = conn.script(LOAD, @source) # XXX: this may happen **ONLY** if script digesting will be # changed in redis, which is not likely gonna happen. @@ -62,12 +53,30 @@ "#{digest.inspect} (expected: #{@digest.inspect})" end @digest = digest.freeze end + end + end - conn.evalsha(@digest, *args) + # Executes script and returns result of execution + # @return Result of script execution + def eval(*args) + Sidekiq.redis do |conn| + begin + conn.evalsha(@digest, *args) + rescue => e + raise unless e.message.include? NOSCRIPT + bootstrap! + conn.evalsha(@digest, *args) + end end + end + + # Reads given file and returns new {Script} with its contents. + # @return [Script] + def self.read(file) + new File.read file end end end end end