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