mirror of
https://github.com/mperham/sidekiq.git
synced 2022-11-09 13:52:34 -05:00
Refactor to use Sidekiq.dump_json and Sidekiq.load_json
These methods perform MultiJson feature detection and can be removed after this library's MultiJson dependency is upgraded to ~> 2.0.
This commit is contained in:
parent
68c725e47b
commit
5eb8d397f0
11 changed files with 32 additions and 72 deletions
|
@ -82,4 +82,22 @@ module Sidekiq
|
|||
@server_chain
|
||||
end
|
||||
|
||||
def self.load_json(string, options={})
|
||||
# Can't reliably detect whether MultiJson responds to load, since it's
|
||||
# a reserved word. Use adapter as a proxy for new features.
|
||||
if MultiJson.respond_to?(:adapter)
|
||||
MultiJson.load(string, options)
|
||||
else
|
||||
MultiJson.decode(string, options)
|
||||
end
|
||||
end
|
||||
|
||||
def self.dump_json(object, options={})
|
||||
if MultiJson.respond_to?(:dump)
|
||||
MultiJson.dump(object, options)
|
||||
else
|
||||
MultiJson.encode(object, options)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -45,11 +45,7 @@ module Sidekiq
|
|||
|
||||
pushed = false
|
||||
Sidekiq.client_middleware.invoke(worker_class, item, queue) do
|
||||
payload = if MultiJson.respond_to?(:dump)
|
||||
MultiJson.dump(item)
|
||||
else
|
||||
MultiJson.encode(item)
|
||||
end
|
||||
payload = Sidekiq.dump_json(item)
|
||||
Sidekiq.redis do |conn|
|
||||
_, pushed = conn.multi do
|
||||
conn.sadd('queues', queue)
|
||||
|
|
|
@ -110,11 +110,7 @@ module Sidekiq
|
|||
processor = @ready.pop
|
||||
@in_progress[processor.object_id] = [msg, queue]
|
||||
@busy << processor
|
||||
if MultiJson.respond_to?(:adapter)
|
||||
processor.process!(MultiJson.load(msg), queue)
|
||||
else
|
||||
processor.process!(MultiJson.decode(msg), queue)
|
||||
end
|
||||
processor.process!(Sidekiq.load_json(msg), queue)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -10,11 +10,7 @@ module Sidekiq
|
|||
def call(worker_class, item, queue)
|
||||
enabled = worker_class.get_sidekiq_options['unique']
|
||||
if enabled
|
||||
payload_hash = if MultiJson.respond_to?(:dump)
|
||||
Digest::MD5.hexdigest(MultiJson.dump(item))
|
||||
else
|
||||
Digest::MD5.hexdigest(MultiJson.encode(item))
|
||||
end
|
||||
payload_hash = Digest::MD5.hexdigest(Sidekiq.dump_json(item))
|
||||
unique = false
|
||||
|
||||
Sidekiq.redis do |conn|
|
||||
|
|
|
@ -16,11 +16,7 @@ module Sidekiq
|
|||
:worker => args[1]['class'],
|
||||
:queue => args[2]
|
||||
}
|
||||
if MultiJson.respond_to?(:dump)
|
||||
Sidekiq.redis {|conn| conn.rpush(:failed, MultiJson.dump(data)) }
|
||||
else
|
||||
Sidekiq.redis {|conn| conn.rpush(:failed, MultiJson.encode(data)) }
|
||||
end
|
||||
Sidekiq.redis {|conn| conn.rpush(:failed, Sidekiq.dump_json(data)) }
|
||||
raise
|
||||
end
|
||||
end
|
||||
|
|
|
@ -46,11 +46,7 @@ module Sidekiq
|
|||
delay = DELAY.call(count)
|
||||
logger.debug { "Failure! Retry #{count} in #{delay} seconds" }
|
||||
retry_at = Time.now.to_f + delay
|
||||
payload = if MultiJson.respond_to?(:dump)
|
||||
MultiJson.dump(msg)
|
||||
else
|
||||
MultiJson.encode(msg)
|
||||
end
|
||||
payload = Sidekiq.dump_json(msg)
|
||||
Sidekiq.redis do |conn|
|
||||
conn.zadd('retry', retry_at.to_s, payload)
|
||||
end
|
||||
|
|
|
@ -7,11 +7,7 @@ module Sidekiq
|
|||
def call(*args)
|
||||
yield
|
||||
ensure
|
||||
json = if MultiJson.respond_to?(:dump)
|
||||
MultiJson.dump(args[1])
|
||||
else
|
||||
MultiJson.encode(args[1])
|
||||
end
|
||||
json = Sidekiq.dump_json(args[1])
|
||||
hash = Digest::MD5.hexdigest(json)
|
||||
Sidekiq.redis {|conn| conn.del(hash) }
|
||||
end
|
||||
|
|
|
@ -55,11 +55,7 @@ module Sidekiq
|
|||
conn.multi do
|
||||
conn.set("worker:#{self}:started", Time.now.to_s)
|
||||
hash = {:queue => queue, :payload => msg, :run_at => Time.now.strftime("%Y/%m/%d %H:%M:%S %Z")}
|
||||
if MultiJson.respond_to?(:dump)
|
||||
conn.set("worker:#{self}", MultiJson.dump(hash))
|
||||
else
|
||||
conn.set("worker:#{self}", MultiJson.encode(hash))
|
||||
end
|
||||
conn.set("worker:#{self}", Sidekiq.dump_json(hash))
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -46,11 +46,7 @@ module Sidekiq
|
|||
|
||||
messages.each do |message|
|
||||
logger.debug { "Retrying #{message}" }
|
||||
msg = if MultiJson.respond_to?(:adapter)
|
||||
MultiJson.load(message)
|
||||
else
|
||||
MultiJson.decode(message)
|
||||
end
|
||||
msg = Sidekiq.load_json(message)
|
||||
conn.rpush("queue:#{msg['queue']}", message)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -52,13 +52,7 @@ module Sidekiq
|
|||
Sidekiq.redis do |conn|
|
||||
conn.smembers('workers').map do |w|
|
||||
msg = conn.get("worker:#{w}")
|
||||
if msg
|
||||
msg = if MultiJson.respond_to?(:adapter)
|
||||
MultiJson.load(msg)
|
||||
else
|
||||
MultiJson.decode(msg)
|
||||
end
|
||||
end
|
||||
msg = Sidekiq.load_json(msg) if msg
|
||||
[w, msg]
|
||||
end.sort { |x| x[1] ? -1 : 1 }
|
||||
end
|
||||
|
@ -80,11 +74,7 @@ module Sidekiq
|
|||
def retries
|
||||
Sidekiq.redis do |conn|
|
||||
results = conn.zrange('retry', 0, 25, :withscores => true)
|
||||
if MultiJson.respond_to?(:adapter)
|
||||
results.each_slice(2).map { |msg, score| [MultiJson.load(msg), Float(score)] }
|
||||
else
|
||||
results.each_slice(2).map { |msg, score| [MultiJson.decode(msg), Float(score)] }
|
||||
end
|
||||
results.each_slice(2).map { |msg, score| [Sidekiq.load_json(msg), Float(score)] }
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -99,11 +89,7 @@ module Sidekiq
|
|||
def retries_with_score(score)
|
||||
Sidekiq.redis do |conn|
|
||||
results = conn.zrangebyscore('retry', score, score)
|
||||
if MultiJson.respond_to?(:adapter)
|
||||
results.map { |msg| MultiJson.load(msg) }
|
||||
else
|
||||
results.map { |msg| MultiJson.decode(msg) }
|
||||
end
|
||||
results.map { |msg| Sidekiq.load_json(msg) }
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -138,11 +124,7 @@ module Sidekiq
|
|||
get "/queues/:name" do
|
||||
halt 404 unless params[:name]
|
||||
@name = params[:name]
|
||||
if MultiJson.respond_to?(:adapter)
|
||||
@messages = Sidekiq.redis {|conn| conn.lrange("queue:#{@name}", 0, 10) }.map { |str| MultiJson.load(str) }
|
||||
else
|
||||
@messages = Sidekiq.redis {|conn| conn.lrange("queue:#{@name}", 0, 10) }.map { |str| MultiJson.decode(str) }
|
||||
end
|
||||
@messages = Sidekiq.redis {|conn| conn.lrange("queue:#{@name}", 0, 10) }.map { |str| Sidekiq.load_json(str) }
|
||||
slim :queue
|
||||
end
|
||||
|
||||
|
@ -160,11 +142,7 @@ module Sidekiq
|
|||
results = conn.zrangebyscore('retry', score, score)
|
||||
conn.zremrangebyscore('retry', score, score)
|
||||
results.map do |message|
|
||||
msg = if MultiJson.respond_to?(:adapter)
|
||||
MultiJson.load(message)
|
||||
else
|
||||
MultiJson.decode(message)
|
||||
end
|
||||
msg = Sidekiq.load_json(message)
|
||||
conn.rpush("queue:#{msg['queue']}", message)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -82,11 +82,7 @@ class TestRetry < MiniTest::Unit::TestCase
|
|||
end
|
||||
|
||||
it 'should poll like a bad mother...SHUT YO MOUTH' do
|
||||
fake_msg = if MultiJson.respond_to?(:dump)
|
||||
MultiJson.dump({ 'class' => 'Bob', 'args' => [1,2], 'queue' => 'someq' })
|
||||
else
|
||||
MultiJson.encode({ 'class' => 'Bob', 'args' => [1,2], 'queue' => 'someq' })
|
||||
end
|
||||
fake_msg = Sidekiq.dump_json({ 'class' => 'Bob', 'args' => [1,2], 'queue' => 'someq' })
|
||||
@redis.expect :multi, [[fake_msg], 1], []
|
||||
@redis.expect :rpush, 1, ['queue:someq', fake_msg]
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue