From 02bbe62aa8ef897d7cc69823017f327b74f0b939 Mon Sep 17 00:00:00 2001 From: Anton Davydov Date: Sun, 5 Apr 2015 03:17:13 +0300 Subject: [PATCH] Reduce allocated for gem --- lib/sidekiq.rb | 7 ++++++- lib/sidekiq/api.rb | 2 +- lib/sidekiq/client.rb | 26 +++++++++++++++----------- lib/sidekiq/redis_connection.rb | 5 +---- lib/sidekiq/worker.rb | 2 +- 5 files changed, 24 insertions(+), 18 deletions(-) diff --git a/lib/sidekiq.rb b/lib/sidekiq.rb index 13de504cc..c35b8f866 100644 --- a/lib/sidekiq.rb +++ b/lib/sidekiq.rb @@ -30,6 +30,11 @@ module Sidekiq dead_timeout_in_seconds: 180 * 24 * 60 * 60 # 6 months } + DEFAULT_WORKER_OPTIONS = { + 'retry' => true, + 'queue' => 'default' + } + def self.❨╯°□°❩╯︵┻━┻ puts "Calm down, bro" end @@ -103,7 +108,7 @@ def self.default_worker_options=(hash) end def self.default_worker_options - defined?(@default_worker_options) ? @default_worker_options : { 'retry' => true, 'queue' => 'default' } + defined?(@default_worker_options) ? @default_worker_options : DEFAULT_WORKER_OPTIONS end def self.load_json(string) diff --git a/lib/sidekiq/api.rb b/lib/sidekiq/api.rb index f3c38b191..0056b66f7 100644 --- a/lib/sidekiq/api.rb +++ b/lib/sidekiq/api.rb @@ -384,7 +384,7 @@ def retry raise "Retry not available on jobs which have not failed" unless item["failed_at"] remove_job do |message| msg = Sidekiq.load_json(message) - msg['retry_count'] = msg['retry_count'] - 1 + msg['retry_count'] -= 1 Sidekiq::Client.push(msg) end end diff --git a/lib/sidekiq/client.rb b/lib/sidekiq/client.rb index f59c70609..f81adf907 100644 --- a/lib/sidekiq/client.rb +++ b/lib/sidekiq/client.rb @@ -211,19 +211,23 @@ def normalize_item(item) raise(ArgumentError, "Message args must be an Array") unless item['args'].is_a?(Array) raise(ArgumentError, "Message class must be either a Class or String representation of the class name") unless item['class'].is_a?(Class) || item['class'].is_a?(String) - if item['class'].is_a?(Class) - raise(ArgumentError, "Message must include a Sidekiq::Worker class, not class name: #{item['class'].ancestors.inspect}") if !item['class'].respond_to?('get_sidekiq_options') - normalized_item = item['class'].get_sidekiq_options.merge(item) - normalized_item['class'] = normalized_item['class'].to_s + normalized_hash(item['class'.freeze]) + .each{ |key, value| item[key] = value if item[key].nil? } + + item['class'.freeze] = item['class'.freeze].to_s + item['queue'.freeze] = item['queue'.freeze].to_s + item['jid'.freeze] ||= SecureRandom.hex(12) + item['enqueued_at'.freeze] ||= Time.now.to_f + item + end + + def normalized_hash(item_class) + if item_class.is_a?(Class) + raise(ArgumentError, "Message must include a Sidekiq::Worker class, not class name: #{item_class.ancestors.inspect}") if !item_class.respond_to?('get_sidekiq_options'.freeze) + item_class.get_sidekiq_options else - normalized_item = Sidekiq.default_worker_options.merge(item) + Sidekiq.default_worker_options end - - normalized_item['queue'] = normalized_item['queue'].to_s - normalized_item['jid'] ||= SecureRandom.hex(12) - normalized_item['enqueued_at'] ||= Time.now.to_f - normalized_item end - end end diff --git a/lib/sidekiq/redis_connection.rb b/lib/sidekiq/redis_connection.rb index 3c8f07852..bc9b0c41e 100644 --- a/lib/sidekiq/redis_connection.rb +++ b/lib/sidekiq/redis_connection.rb @@ -7,10 +7,7 @@ class RedisConnection class << self def create(options={}) - url = options[:url] || determine_redis_provider - if url - options[:url] = url - end + options[:url] ||= determine_redis_provider # need a connection for Fetcher and Retry size = options[:size] || (Sidekiq.server? ? (Sidekiq.options[:concurrency] + 2) : 5) diff --git a/lib/sidekiq/worker.rb b/lib/sidekiq/worker.rb index 1c54efb5a..c91fff414 100644 --- a/lib/sidekiq/worker.rb +++ b/lib/sidekiq/worker.rb @@ -64,7 +64,7 @@ def perform_in(interval, *args) # can be true, false or an integer number of lines to save, default *false* # :pool - use the given Redis connection pool to push this type of job to a given shard. def sidekiq_options(opts={}) - self.sidekiq_options_hash = get_sidekiq_options.merge((opts || {}).stringify_keys) + self.sidekiq_options_hash = get_sidekiq_options.merge(opts.stringify_keys) end def sidekiq_retry_in(&block)