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

98 lines
2.9 KiB
Markdown
Raw Normal View History

2015-01-11 01:47:42 -05:00
# Upgrading to Sidekiq Pro 2.0
2015-01-15 17:25:00 -05:00
Sidekiq Pro 2.0 allows nested batches for more complex job workflows.
It also removes deprecated APIs, changes the batch data format and
2015-01-11 01:54:42 -05:00
how features are activated. Read carefully to ensure your upgrade goes
smoothly.
2015-01-11 01:47:42 -05:00
2015-01-15 17:25:00 -05:00
## Nested Batches
2015-01-21 16:12:33 -05:00
Batches can now be nested within the `jobs` method.
This feature enables Sidekiq Pro to handle workflow processing of any size
and complexity!
2015-01-15 17:25:00 -05:00
```ruby
a = Sidekiq::Batch.new
a.on(:success, SomeCallback)
a.jobs do
SomeWork.perform_async
2015-01-20 17:50:05 -05:00
2015-01-15 17:25:00 -05:00
b = Sidekiq::Batch.new
b.on(:success, MyCallback)
b.jobs do
OtherWork.perform_async
end
end
```
2015-01-20 17:50:05 -05:00
Parent batch callbacks are not processed until any child batch callbacks have
2015-01-21 15:51:27 -05:00
run successfully. In the example above, `MyCallback` will always fire
before `SomeCallback` because `b` is considered a child of `a`.
2015-01-15 17:25:00 -05:00
2015-01-21 16:12:33 -05:00
Of course you can dynamically add child batches while a batch job is executing.
```ruby
def perform(*args)
do_something(args)
if more_work?
# Sidekiq::Worker#batch returns the Batch this job is part of.
batch.jobs do
b = Sidekiq::Batch.new
b.on(:success, MyCallback)
b.jobs do
OtherWork.perform_async
end
end
end
end
```
2015-01-15 17:25:00 -05:00
## Batch Data
2015-01-11 01:47:42 -05:00
2015-01-11 01:48:12 -05:00
The batch data model was overhauled. Batch data should take
significantly less space in Redis now. A simple benchmark shows 25%
2015-01-11 01:54:42 -05:00
savings but real world savings should be even greater.
2015-01-11 01:48:12 -05:00
2015-01-11 01:47:42 -05:00
* Batch 2.x BIDs are 14 character URL-safe Base64-encoded strings, e.g.
2015-01-11 01:48:12 -05:00
"vTF1-9QvLPnREQ". Batch 1.x BIDs were 16 character hex-encoded
strings, e.g. "4a3fc67d30370edf".
* In 1.x, batch data was not removed until it naturally expired in Redis.
In 2.x, all data for a batch is removed from Redis once the batch has
run any success callbacks.
2015-01-11 01:47:42 -05:00
* Because of the former point, batch expiry is no longer a concern.
Batch expiry is hardcoded to 30 days and is no longer user-tunable.
2015-01-11 01:48:12 -05:00
* Failed batch jobs no longer automatically store any associated
2015-01-15 17:25:00 -05:00
backtrace in Redis.
2015-01-20 17:50:05 -05:00
**There's no data migration required. Sidekiq Pro 2.0 transparently handles
2015-01-15 17:25:00 -05:00
both old and new format.**
2015-01-11 01:47:42 -05:00
2015-01-21 15:51:27 -05:00
**Note that you CANNOT go back to Pro 1.x once you've created batches
with 2.x. The new batches will not process correctly with 1.x.**
2015-01-11 01:47:42 -05:00
## Reliability
2015-01-21 15:51:27 -05:00
You no longer need to require anything to use Reliability features.
* Activate reliable fetch:
2015-01-11 01:47:42 -05:00
```ruby
Sidekiq.configure_server do |config|
config.reliable_fetch!
end
2015-01-11 01:54:42 -05:00
```
2015-01-21 15:51:27 -05:00
* Activate reliable push:
2015-01-11 01:47:42 -05:00
```ruby
Sidekiq::Client.reliable_push!
```
2015-01-15 17:25:00 -05:00
## Other Changes
* You must require `sidekiq/notifications` if you want to use the
existing notification schemes. I don't recommend using them as the
2015-01-20 17:50:05 -05:00
newer-style `Sidekiq::Batch#on` method is simpler and more flexible.
2015-01-21 15:51:27 -05:00
* Several classes have been renamed. Generally these classes are ones
you should not need to require/use in your own code, e.g. the Batch
middleware.
* The Web UI now shows the Sidekiq Pro version in the footer.