From 7de6f4cc2f68ee3d0976588dadcad418e3dd3c85 Mon Sep 17 00:00:00 2001 From: Mike Perham Date: Fri, 16 Feb 2018 13:01:25 -0800 Subject: [PATCH] Remove explicit freeze, which should not be necessary anymore with frozen_string_literal: true. Fixes #3759 --- Changes.md | 6 ++++ lib/sidekiq.rb | 5 ++- lib/sidekiq/api.rb | 35 +++++++++++---------- lib/sidekiq/cli.rb | 3 +- lib/sidekiq/client.rb | 54 ++++++++++++++++----------------- lib/sidekiq/fetch.rb | 2 +- lib/sidekiq/launcher.rb | 9 +++--- lib/sidekiq/logging.rb | 6 ++-- lib/sidekiq/manager.rb | 1 - lib/sidekiq/processor.rb | 6 ++-- lib/sidekiq/redis_connection.rb | 2 +- lib/sidekiq/scheduled.rb | 2 +- lib/sidekiq/util.rb | 2 +- lib/sidekiq/worker.rb | 14 ++++----- 14 files changed, 74 insertions(+), 73 deletions(-) diff --git a/Changes.md b/Changes.md index badc4083..4d66ea12 100644 --- a/Changes.md +++ b/Changes.md @@ -2,6 +2,12 @@ [Sidekiq Changes](https://github.com/mperham/sidekiq/blob/master/Changes.md) | [Sidekiq Pro Changes](https://github.com/mperham/sidekiq/blob/master/Pro-Changes.md) | [Sidekiq Enterprise Changes](https://github.com/mperham/sidekiq/blob/master/Ent-Changes.md) +HEAD +----------- + +- Remove `freeze` calls on String constants. This is superfluous with Ruby + 2.3+ and `frozen_string_literal: true`. [#3759] + 5.1.1 ----------- diff --git a/lib/sidekiq.rb b/lib/sidekiq.rb index 79de5acc..105dc1eb 100644 --- a/lib/sidekiq.rb +++ b/lib/sidekiq.rb @@ -1,4 +1,3 @@ -# encoding: utf-8 # frozen_string_literal: true require 'sidekiq/version' fail "Sidekiq #{Sidekiq::VERSION} does not support Ruby versions below 2.2.2." if RUBY_PLATFORM != 'java' && RUBY_VERSION < '2.2.2' @@ -12,7 +11,7 @@ require 'sidekiq/delay' require 'json' module Sidekiq - NAME = 'Sidekiq'.freeze + NAME = 'Sidekiq' LICENSE = 'See LICENSE and the LGPL-3.0 for licensing details.' DEFAULTS = { @@ -48,7 +47,7 @@ module Sidekiq "connected_clients" => "9999", "used_memory_human" => "9P", "used_memory_peak_human" => "9P" - }.freeze + } def self.❨╯°□°❩╯︵┻━┻ puts "Calm down, yo." diff --git a/lib/sidekiq/api.rb b/lib/sidekiq/api.rb index c7355e57..13d8827c 100644 --- a/lib/sidekiq/api.rb +++ b/lib/sidekiq/api.rb @@ -1,4 +1,3 @@ -# encoding: utf-8 # frozen_string_literal: true require 'sidekiq' @@ -51,21 +50,21 @@ module Sidekiq def fetch_stats! pipe1_res = Sidekiq.redis do |conn| conn.pipelined do - conn.get('stat:processed'.freeze) - conn.get('stat:failed'.freeze) - conn.zcard('schedule'.freeze) - conn.zcard('retry'.freeze) - conn.zcard('dead'.freeze) - conn.scard('processes'.freeze) - conn.lrange('queue:default'.freeze, -1, -1) - conn.smembers('processes'.freeze) - conn.smembers('queues'.freeze) + conn.get('stat:processed') + conn.get('stat:failed') + conn.zcard('schedule') + conn.zcard('retry') + conn.zcard('dead') + conn.scard('processes') + conn.lrange('queue:default', -1, -1) + conn.smembers('processes') + conn.smembers('queues') end end pipe2_res = Sidekiq.redis do |conn| conn.pipelined do - pipe1_res[7].each {|key| conn.hget(key, 'busy'.freeze) } + pipe1_res[7].each {|key| conn.hget(key, 'busy') } pipe1_res[8].each {|queue| conn.llen("queue:#{queue}") } end end @@ -77,7 +76,7 @@ module Sidekiq default_queue_latency = if (entry = pipe1_res[6].first) job = Sidekiq.load_json(entry) rescue {} now = Time.now.to_f - thence = job['enqueued_at'.freeze] || now + thence = job['enqueued_at'] || now now - thence else 0 @@ -119,7 +118,7 @@ module Sidekiq class Queues def lengths Sidekiq.redis do |conn| - queues = conn.smembers('queues'.freeze) + queues = conn.smembers('queues') lengths = conn.pipelined do queues.each do |queue| @@ -163,7 +162,7 @@ module Sidekiq while i < @days_previous date = @start_date - i - datestr = date.strftime("%Y-%m-%d".freeze) + datestr = date.strftime("%Y-%m-%d") keys << "stat:#{stat}:#{datestr}" dates << datestr i += 1 @@ -204,7 +203,7 @@ module Sidekiq # Return all known queues within Redis. # def self.all - Sidekiq.redis { |c| c.smembers('queues'.freeze) }.sort.map { |q| Sidekiq::Queue.new(q) } + Sidekiq.redis { |c| c.smembers('queues') }.sort.map { |q| Sidekiq::Queue.new(q) } end attr_reader :name @@ -273,7 +272,7 @@ module Sidekiq Sidekiq.redis do |conn| conn.multi do conn.del(@rname) - conn.srem("queues".freeze, name) + conn.srem("queues", name) end end end @@ -349,9 +348,9 @@ module Sidekiq job_args end else - if self['encrypt'.freeze] + if self['encrypt'] # no point in showing 150+ bytes of random garbage - args[-1] = '[encrypted data]'.freeze + args[-1] = '[encrypted data]' end args end diff --git a/lib/sidekiq/cli.rb b/lib/sidekiq/cli.rb index a569836e..cbf516a4 100644 --- a/lib/sidekiq/cli.rb +++ b/lib/sidekiq/cli.rb @@ -1,4 +1,3 @@ -# encoding: utf-8 # frozen_string_literal: true $stdout.sync = true @@ -17,7 +16,7 @@ module Sidekiq include Singleton unless $TESTING PROCTITLES = [ - proc { 'sidekiq'.freeze }, + proc { 'sidekiq' }, proc { Sidekiq::VERSION }, proc { |me, data| data['tag'] }, proc { |me, data| "[#{Processor::WORKER_STATE.size} of #{data['concurrency']} busy]" }, diff --git a/lib/sidekiq/client.rb b/lib/sidekiq/client.rb index 8341aa7f..4e1e41f3 100644 --- a/lib/sidekiq/client.rb +++ b/lib/sidekiq/client.rb @@ -68,11 +68,11 @@ module Sidekiq # def push(item) normed = normalize_item(item) - payload = process_single(item['class'.freeze], normed) + payload = process_single(item['class'], normed) if payload raw_push([payload]) - payload['jid'.freeze] + payload['jid'] end end @@ -89,19 +89,19 @@ module Sidekiq # Returns an array of the of pushed jobs' jids. The number of jobs pushed can be less # than the number given if the middleware stopped processing for one or more jobs. def push_bulk(items) - arg = items['args'.freeze].first + arg = items['args'].first return [] unless arg # no jobs to push raise ArgumentError, "Bulk arguments must be an Array of Arrays: [[1], [2]]" if !arg.is_a?(Array) normed = normalize_item(items) - payloads = items['args'.freeze].map do |args| - copy = normed.merge('args'.freeze => args, 'jid'.freeze => SecureRandom.hex(12), 'enqueued_at'.freeze => Time.now.to_f) - result = process_single(items['class'.freeze], copy) + payloads = items['args'].map do |args| + copy = normed.merge('args' => args, 'jid' => SecureRandom.hex(12), 'enqueued_at' => Time.now.to_f) + result = process_single(items['class'], copy) result ? result : nil end.compact raw_push(payloads) if !payloads.empty? - payloads.collect { |payload| payload['jid'.freeze] } + payloads.collect { |payload| payload['jid'] } end # Allows sharding of jobs across any number of Redis instances. All jobs @@ -144,14 +144,14 @@ module Sidekiq # Messages are enqueued to the 'default' queue. # def enqueue(klass, *args) - klass.client_push('class'.freeze => klass, 'args'.freeze => args) + klass.client_push('class' => klass, 'args' => args) end # Example usage: # Sidekiq::Client.enqueue_to(:queue_name, MyWorker, 'foo', 1, :bat => 'bar') # def enqueue_to(queue, klass, *args) - klass.client_push('queue'.freeze => queue, 'class'.freeze => klass, 'args'.freeze => args) + klass.client_push('queue' => queue, 'class' => klass, 'args' => args) end # Example usage: @@ -162,8 +162,8 @@ module Sidekiq now = Time.now.to_f ts = (int < 1_000_000_000 ? now + int : int) - item = { 'class'.freeze => klass, 'args'.freeze => args, 'at'.freeze => ts, 'queue'.freeze => queue } - item.delete('at'.freeze) if ts <= now + item = { 'class' => klass, 'args' => args, 'at' => ts, 'queue' => queue } + item.delete('at') if ts <= now klass.client_push(item) end @@ -188,25 +188,25 @@ module Sidekiq end def atomic_push(conn, payloads) - if payloads.first['at'.freeze] - conn.zadd('schedule'.freeze, payloads.map do |hash| - at = hash.delete('at'.freeze).to_s + if payloads.first['at'] + conn.zadd('schedule', payloads.map do |hash| + at = hash.delete('at').to_s [at, Sidekiq.dump_json(hash)] end) else - q = payloads.first['queue'.freeze] + q = payloads.first['queue'] now = Time.now.to_f to_push = payloads.map do |entry| - entry['enqueued_at'.freeze] = now + entry['enqueued_at'] = now Sidekiq.dump_json(entry) end - conn.sadd('queues'.freeze, q) + conn.sadd('queues', q) conn.lpush("queue:#{q}", to_push) end end def process_single(worker_class, item) - queue = item['queue'.freeze] + queue = item['queue'] middleware.invoke(worker_class, item, queue, @redis_pool) do item @@ -214,25 +214,25 @@ module Sidekiq end def normalize_item(item) - raise(ArgumentError, "Job must be a Hash with 'class' and 'args' keys: { 'class' => SomeWorker, 'args' => ['bob', 1, :foo => 'bar'] }") unless item.is_a?(Hash) && item.has_key?('class'.freeze) && item.has_key?('args'.freeze) + raise(ArgumentError, "Job must be a Hash with 'class' and 'args' keys: { 'class' => SomeWorker, 'args' => ['bob', 1, :foo => 'bar'] }") unless item.is_a?(Hash) && item.has_key?('class') && item.has_key?('args') raise(ArgumentError, "Job args must be an Array") unless item['args'].is_a?(Array) - raise(ArgumentError, "Job class must be either a Class or String representation of the class name") unless item['class'.freeze].is_a?(Class) || item['class'.freeze].is_a?(String) - raise(ArgumentError, "Job 'at' must be a Numeric timestamp") if item.has_key?('at'.freeze) && !item['at'].is_a?(Numeric) + raise(ArgumentError, "Job class must be either a Class or String representation of the class name") unless item['class'].is_a?(Class) || item['class'].is_a?(String) + raise(ArgumentError, "Job 'at' must be a Numeric timestamp") if item.has_key?('at') && !item['at'].is_a?(Numeric) #raise(ArgumentError, "Arguments must be native JSON types, see https://github.com/mperham/sidekiq/wiki/Best-Practices") unless JSON.load(JSON.dump(item['args'])) == item['args'] - normalized_hash(item['class'.freeze]) + normalized_hash(item['class']) .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['created_at'.freeze] ||= Time.now.to_f + item['class'] = item['class'].to_s + item['queue'] = item['queue'].to_s + item['jid'] ||= SecureRandom.hex(12) + item['created_at'] ||= 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) + raise(ArgumentError, "Message must include a Sidekiq::Worker class, not class name: #{item_class.ancestors.inspect}") if !item_class.respond_to?('get_sidekiq_options') item_class.get_sidekiq_options else Sidekiq.default_worker_options diff --git a/lib/sidekiq/fetch.rb b/lib/sidekiq/fetch.rb index 0f0fa6f2..d1a64cd5 100644 --- a/lib/sidekiq/fetch.rb +++ b/lib/sidekiq/fetch.rb @@ -13,7 +13,7 @@ module Sidekiq end def queue_name - queue.sub(/.*queue:/, ''.freeze) + queue.sub(/.*queue:/, '') end def requeue diff --git a/lib/sidekiq/launcher.rb b/lib/sidekiq/launcher.rb index d8d5a708..bdb67891 100644 --- a/lib/sidekiq/launcher.rb +++ b/lib/sidekiq/launcher.rb @@ -1,4 +1,3 @@ -# encoding: utf-8 # frozen_string_literal: true require 'sidekiq/manager' require 'sidekiq/fetch' @@ -76,13 +75,13 @@ module Sidekiq Processor::FAILURE.update {|curr| fails = curr; 0 } Processor::PROCESSED.update {|curr| procd = curr; 0 } - workers_key = "#{key}:workers".freeze - nowdate = Time.now.utc.strftime("%Y-%m-%d".freeze) + workers_key = "#{key}:workers" + nowdate = Time.now.utc.strftime("%Y-%m-%d") Sidekiq.redis do |conn| conn.multi do - conn.incrby("stat:processed".freeze, procd) + conn.incrby("stat:processed", procd) conn.incrby("stat:processed:#{nowdate}", procd) - conn.incrby("stat:failed".freeze, fails) + conn.incrby("stat:failed", fails) conn.incrby("stat:failed:#{nowdate}", fails) conn.del(workers_key) Processor::WORKER_STATE.each_pair do |tid, hash| diff --git a/lib/sidekiq/logging.rb b/lib/sidekiq/logging.rb index 1a634786..81c1e08b 100644 --- a/lib/sidekiq/logging.rb +++ b/lib/sidekiq/logging.rb @@ -33,9 +33,9 @@ module Sidekiq def self.job_hash_context(job_hash) # If we're using a wrapper class, like ActiveJob, use the "wrapped" # attribute to expose the underlying thing. - klass = job_hash['wrapped'.freeze] || job_hash["class".freeze] - bid = job_hash['bid'.freeze] - "#{klass} JID-#{job_hash['jid'.freeze]}#{" BID-#{bid}" if bid}" + klass = job_hash['wrapped'] || job_hash["class"] + bid = job_hash['bid'] + "#{klass} JID-#{job_hash['jid']}#{" BID-#{bid}" if bid}" end def self.with_job_hash_context(job_hash, &block) diff --git a/lib/sidekiq/manager.rb b/lib/sidekiq/manager.rb index 800f4eb9..31449819 100644 --- a/lib/sidekiq/manager.rb +++ b/lib/sidekiq/manager.rb @@ -1,4 +1,3 @@ -# encoding: utf-8 # frozen_string_literal: true require 'sidekiq/util' require 'sidekiq/processor' diff --git a/lib/sidekiq/processor.rb b/lib/sidekiq/processor.rb index 0cfc73ed..cdf4bcdd 100644 --- a/lib/sidekiq/processor.rb +++ b/lib/sidekiq/processor.rb @@ -132,9 +132,9 @@ module Sidekiq # the Reloader. It handles code loading, db connection management, etc. # Effectively this block denotes a "unit of work" to Rails. @reloader.call do - klass = constantize(job_hash['class'.freeze]) + klass = constantize(job_hash['class']) worker = klass.new - worker.jid = job_hash['jid'.freeze] + worker.jid = job_hash['jid'] @retrier.local(worker, pristine, queue) do yield worker end @@ -166,7 +166,7 @@ module Sidekiq ack = true dispatch(job_hash, queue) do |worker| Sidekiq.server_middleware.invoke(worker, job_hash, queue) do - execute_job(worker, cloned(job_hash['args'.freeze])) + execute_job(worker, cloned(job_hash['args'])) end end rescue Sidekiq::Shutdown diff --git a/lib/sidekiq/redis_connection.rb b/lib/sidekiq/redis_connection.rb index 400f8b81..ba489c82 100644 --- a/lib/sidekiq/redis_connection.rb +++ b/lib/sidekiq/redis_connection.rb @@ -70,7 +70,7 @@ module Sidekiq opts.delete(:network_timeout) end - opts[:driver] ||= 'ruby'.freeze + opts[:driver] ||= 'ruby' # Issue #3303, redis-rb will silently retry an operation. # This can lead to duplicate jobs if Sidekiq::Client's LPUSH diff --git a/lib/sidekiq/scheduled.rb b/lib/sidekiq/scheduled.rb index ccc03d9f..8f5b2aef 100644 --- a/lib/sidekiq/scheduled.rb +++ b/lib/sidekiq/scheduled.rb @@ -17,7 +17,7 @@ module Sidekiq # We need to go through the list one at a time to reduce the risk of something # going wrong between the time jobs are popped from the scheduled queue and when # they are pushed onto a work queue and losing the jobs. - while job = conn.zrangebyscore(sorted_set, '-inf'.freeze, now, :limit => [0, 1]).first do + while job = conn.zrangebyscore(sorted_set, '-inf', now, :limit => [0, 1]).first do # Pop item off the queue and add it to the work queue. If the job can't be popped from # the queue, it's because another process already popped it so we can move on to the diff --git a/lib/sidekiq/util.rb b/lib/sidekiq/util.rb index 9800e131..6cfdd345 100644 --- a/lib/sidekiq/util.rb +++ b/lib/sidekiq/util.rb @@ -21,7 +21,7 @@ module Sidekiq def safe_thread(name, &block) Thread.new do - Thread.current['sidekiq_label'.freeze] = name + Thread.current['sidekiq_label'] = name watchdog(name, &block) end end diff --git a/lib/sidekiq/worker.rb b/lib/sidekiq/worker.rb index f1af1329..152d55c5 100644 --- a/lib/sidekiq/worker.rb +++ b/lib/sidekiq/worker.rb @@ -47,7 +47,7 @@ module Sidekiq end def perform_async(*args) - @klass.client_push(@opts.merge('args'.freeze => args, 'class'.freeze => @klass)) + @klass.client_push(@opts.merge('args' => args, 'class' => @klass)) end # +interval+ must be a timestamp, numeric or something that acts @@ -57,9 +57,9 @@ module Sidekiq now = Time.now.to_f ts = (int < 1_000_000_000 ? now + int : int) - payload = @opts.merge('class'.freeze => @klass, 'args'.freeze => args, 'at'.freeze => ts) + payload = @opts.merge('class' => @klass, 'args' => args, 'at' => ts) # Optimization to enqueue something now that is scheduled to go out now or in the past - payload.delete('at'.freeze) if ts <= now + payload.delete('at') if ts <= now @klass.client_push(payload) end alias_method :perform_at, :perform_in @@ -84,7 +84,7 @@ module Sidekiq end def perform_async(*args) - client_push('class'.freeze => self, 'args'.freeze => args) + client_push('class' => self, 'args' => args) end # +interval+ must be a timestamp, numeric or something that acts @@ -94,10 +94,10 @@ module Sidekiq now = Time.now.to_f ts = (int < 1_000_000_000 ? now + int : int) - item = { 'class'.freeze => self, 'args'.freeze => args, 'at'.freeze => ts } + item = { 'class' => self, 'args' => args, 'at' => ts } # Optimization to enqueue something now that is scheduled to go out now or in the past - item.delete('at'.freeze) if ts <= now + item.delete('at') if ts <= now client_push(item) end @@ -134,7 +134,7 @@ module Sidekiq end def client_push(item) # :nodoc: - pool = Thread.current[:sidekiq_via_pool] || get_sidekiq_options['pool'.freeze] || Sidekiq.redis_pool + pool = Thread.current[:sidekiq_via_pool] || get_sidekiq_options['pool'] || Sidekiq.redis_pool # stringify item.keys.each do |key| item[key.to_s] = item.delete(key)