1
0
Fork 0
mirror of https://github.com/mperham/sidekiq.git synced 2022-11-09 13:52:34 -05:00

Add support for changes in ActiveJob 6.0's serialized payloads, fixes #4263

This commit is contained in:
Mike Perham 2019-09-12 10:20:37 -07:00
parent 72cbeed523
commit 817c8eedc9
3 changed files with 31 additions and 15 deletions

View file

@ -5,6 +5,7 @@
HEAD
---------
- Support display of ActiveJob 6.0 payloads in the Web UI [#4263]
- Add `SortedSet#scan` for pattern based scanning. For large sets this API will be **MUCH** faster
than standard iteration using each.
```ruby
@ -12,7 +13,6 @@ HEAD
job.retry
end
```
- Dramatically speed up SortedSet#find\_job(jid) by using Redis's ZSCAN
support, approx 10x faster. [#4259]
```

View file

@ -331,7 +331,7 @@ module Sidekiq
end
when "ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper"
job_class = @item["wrapped"] || args[0]
if job_class == "ActionMailer::DeliveryJob"
if job_class == "ActionMailer::DeliveryJob" || job_class == "ActionMailer::MailDeliveryJob"
# MailerClass#mailer_method
args[0]["arguments"][0..1].join("#")
else
@ -354,6 +354,9 @@ module Sidekiq
if (self["wrapped"] || args[0]) == "ActionMailer::DeliveryJob"
# remove MailerClass, mailer_method and 'deliver_now'
job_args.drop(3)
elsif (self["wrapped"] || args[0]) == "ActionMailer::MailDeliveryJob"
# remove MailerClass, mailer_method and 'deliver_now'
job_args.drop(3).first["args"]
else
job_args
end

View file

@ -254,20 +254,33 @@ describe 'API' do
assert_equal [1,2,3], x.display_args
end
it 'unwraps ActiveJob jobs' do
ApiJob.perform_later(1, 2, 3)
q = Sidekiq::Queue.new
x = q.first
assert_equal ApiJob.name, x.display_class
assert_equal [1,2,3], x.display_args
end
describe "Rails unwrapping" do
SERIALIZED_JOBS = {
"5.x" => [
'{"class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","wrapped":"ApiJob","queue":"default","args":[{"job_class":"ApiJob","job_id":"f1bde53f-3852-4ae4-a879-c12eacebbbb0","provider_job_id":null,"queue_name":"default","priority":null,"arguments":[1,2,3],"executions":0,"locale":"en"}],"retry":true,"jid":"099eee72911085a511d0e312","created_at":1568305542.339916,"enqueued_at":1568305542.339947}',
'{"class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","wrapped":"ActionMailer::DeliveryJob","queue":"mailers","args":[{"job_class":"ActionMailer::DeliveryJob","job_id":"19cc0115-3d1c-4bbe-a51e-bfa1385895d1","provider_job_id":null,"queue_name":"mailers","priority":null,"arguments":["ApiMailer","test_email","deliver_now",1,2,3],"executions":0,"locale":"en"}],"retry":true,"jid":"37436e5504936400e8cf98db","created_at":1568305542.370133,"enqueued_at":1568305542.370241}',
],
"6.x" => [
'{"class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","wrapped":"ApiJob","queue":"default","args":[{"job_class":"ApiJob","job_id":"ff2b48d4-bdce-4825-af6b-ef8c11ab651e","provider_job_id":null,"queue_name":"default","priority":null,"arguments":[1,2,3],"executions":0,"exception_executions":{},"locale":"en","timezone":"UTC","enqueued_at":"2019-09-12T16:28:37Z"}],"retry":true,"jid":"ce121bf77b37ae81fe61b6dc","created_at":1568305717.9469702,"enqueued_at":1568305717.947005}',
'{"class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","wrapped":"ActionMailer::MailDeliveryJob","queue":"mailers","args":[{"job_class":"ActionMailer::MailDeliveryJob","job_id":"2f967da1-a389-479c-9a4e-5cc059e6d65c","provider_job_id":null,"queue_name":"mailers","priority":null,"arguments":["ApiMailer","test_email","deliver_now",{"args":[1,2,3],"_aj_symbol_keys":["args"]}],"executions":0,"exception_executions":{},"locale":"en","timezone":"UTC","enqueued_at":"2019-09-12T16:28:37Z"}],"retry":true,"jid":"469979df52bb9ef9f48b49e1","created_at":1568305717.9457421,"enqueued_at":1568305717.9457731}',
],
}.each_pair do |ver,jobs|
it "unwraps ActiveJob #{ver} jobs" do
#ApiJob.perform_later(1,2,3)
#puts Sidekiq::Queue.new.first.value
x = Sidekiq::Job.new(jobs[0], "default")
assert_equal ApiJob.name, x.display_class
assert_equal [1,2,3], x.display_args
end
it 'unwraps ActionMailer jobs' do
ApiMailer.test_email(1, 2, 3).deliver_later
q = Sidekiq::Queue.new('mailers')
x = q.first
assert_equal "#{ApiMailer.name}#test_email", x.display_class
assert_equal [1,2,3], x.display_args
it "unwraps ActionMailer #{ver} jobs" do
#ApiMailer.test_email(1,2,3).deliver_later
#puts Sidekiq::Queue.new("mailers").first.value
x = Sidekiq::Job.new(jobs[1], "mailers")
assert_equal "#{ApiMailer.name}#test_email", x.display_class
assert_equal [1,2,3], x.display_args
end
end
end
it 'has no enqueued_at time for jobs enqueued in the future' do