lib/sidekiq_unique_jobs/scripts.rb in sidekiq-unique-jobs-4.0.18 vs lib/sidekiq_unique_jobs/scripts.rb in sidekiq-unique-jobs-5.0.0

- old
+ new

@@ -1,37 +1,38 @@ require 'pathname' require 'digest/sha1' +require 'concurrent/map' module SidekiqUniqueJobs ScriptError = Class.new(StandardError) module Scripts LUA_PATHNAME ||= Pathname.new(__FILE__).dirname.join('../../redis').freeze SOURCE_FILES ||= Dir[LUA_PATHNAME.join('**/*.lua')].compact.freeze DEFINED_METHODS ||= [].freeze + SCRIPT_SHAS ||= Concurrent::Map.new module_function extend SingleForwardable def_delegator :SidekiqUniqueJobs, :connection - def script_shas - @script_shas ||= {} - end - def logger Sidekiq.logger end - def call(file_name, redis_pool, options = {}) + def call(file_name, redis_pool, options = {}) # rubocop:disable MethodLength connection(redis_pool) do |redis| - script_shas[file_name] ||= redis.script(:load, script_source(file_name)) - redis.evalsha(script_shas[file_name], options) + if SCRIPT_SHAS[file_name].nil? + SCRIPT_SHAS[file_name] = redis.script(:load, script_source(file_name)) + end + redis.evalsha(SCRIPT_SHAS[file_name], options) end rescue Redis::CommandError => ex if ex.message == 'NOSCRIPT No matching script. Please use EVAL.' - script_shas[file_name] = nil + SCRIPT_SHAS.delete(file_name) call(file_name, redis_pool, options) + raise else raise ScriptError, "#{file_name}.lua\n\n#{ex.message}\n\n#{script_source(file_name)}" \ "#{ex.backtrace.join("\n")}" end