2022-09-20 07:49:16 -04:00
|
|
|
* Add support for Sidekiq's transaction-aware client
|
|
|
|
|
|
|
|
*Jonathan del Strother*
|
|
|
|
|
2022-09-10 11:11:44 -04:00
|
|
|
* Remove QueAdapter from Active Job.
|
|
|
|
|
|
|
|
After maintaining Active Job QueAdapter by Rails and Que side
|
|
|
|
to support Ruby 3 keyword arguments and options provided as top level keywords,
|
|
|
|
it is quite difficult to maintain it this way.
|
|
|
|
|
|
|
|
Active Job Que adapter can be included in the future version of que gem itself.
|
|
|
|
|
|
|
|
*Yasuo Honda*
|
|
|
|
|
Add ActiveJob::Serializers::BigDecimalSerializer
Previously, BigDecimal was listed as not needing a serializer. However,
when used with an adapter storing the job arguments as JSON, it would get
serialized as a simple String, resulting in deserialization also producing
a String (instead of a BigDecimal).
By using a serializer, we ensure the round trip is safe.
During upgrade deployments of applications with multiple replicas making use of
BigDecimal job arguments with a queue adapter serializing to JSON, there exists
a possible race condition, whereby a "new" replica enqueues a job with an
argument serialized using `BigDecimalSerializer`, and an "old" replica fails to
deserialize it (as it does not have `BigDecimalSerializer`).
Therefore, to ensure safe upgrades, serialization will not use
`BigDecimalSerializer` until `config.active_job.use_big_decimal_serializer` is
enabled, which can be done safely after successful deployment of Rails 7.1.
This option will be removed in Rails 7.2, when it will become the default.
2022-07-17 13:17:30 -04:00
|
|
|
* Fix BigDecimal (de)serialization for adapters using JSON.
|
|
|
|
|
|
|
|
Previously, BigDecimal was listed as not needing a serializer. However,
|
|
|
|
when used with an adapter storing the job arguments as JSON, it would get
|
|
|
|
serialized as a simple String, resulting in deserialization also producing
|
|
|
|
a String (instead of a BigDecimal).
|
|
|
|
|
|
|
|
By using a serializer, we ensure the round trip is safe.
|
|
|
|
|
|
|
|
To ensure applications using BigDecimal job arguments are not subject to
|
|
|
|
race conditions during deployment (where a replica running a version of
|
|
|
|
Rails without BigDecimalSerializer fails to deserialize an argument
|
|
|
|
serialized with it), `ActiveJob.use_big_decimal_serializer` is disabled by
|
|
|
|
default, and can be set to true in a following deployment..
|
|
|
|
|
|
|
|
*Sam Bostock*
|
|
|
|
|
2022-07-12 18:15:43 -04:00
|
|
|
* Preserve full-precision `enqueued_at` timestamps for serialized jobs,
|
|
|
|
allowing more accurate reporting of how long a job spent waiting in the
|
|
|
|
queue before it was performed.
|
|
|
|
|
|
|
|
Retains IS08601 format compatibility.
|
|
|
|
|
|
|
|
*Jeremy Daer*
|
|
|
|
|
2022-07-05 20:42:37 -04:00
|
|
|
* Add `--parent` option to job generator to specify parent class of job.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
`bin/rails g job process_payment --parent=payment_job` generates:
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
class ProcessPaymentJob < PaymentJob
|
|
|
|
# ...
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
*Gannon McGibbon*
|
|
|
|
|
2022-06-10 18:45:22 -04:00
|
|
|
* Add more detailed description to job generator.
|
|
|
|
|
|
|
|
*Gannon McGibbon*
|
|
|
|
|
2020-08-16 11:01:12 -04:00
|
|
|
* `perform.active_job` notification payloads now include `:db_runtime`, which
|
|
|
|
is the total time (in ms) taken by database queries while performing a job.
|
|
|
|
This value can be used to better understand how a job's time is spent.
|
|
|
|
|
|
|
|
*Jonathan Hefner*
|
|
|
|
|
2022-08-29 02:32:31 -04:00
|
|
|
* Update `ActiveJob::QueueAdapters::QueAdapter` to remove deprecation warning.
|
2022-03-21 08:39:02 -04:00
|
|
|
|
|
|
|
Remove a deprecation warning introduced in que 1.2 to prepare for changes in
|
|
|
|
que 2.0 necessary for Ruby 3 compatibility.
|
|
|
|
|
|
|
|
*Damir Zekic* and *Adis Hasovic*
|
|
|
|
|
2022-02-12 03:54:41 -05:00
|
|
|
* Add missing `bigdecimal` require in `ActiveJob::Arguments`
|
|
|
|
|
|
|
|
Could cause `uninitialized constant ActiveJob::Arguments::BigDecimal (NameError)`
|
|
|
|
when loading Active Job in isolation.
|
|
|
|
|
|
|
|
*Jean Boussier*
|
|
|
|
|
2021-08-22 04:47:01 -04:00
|
|
|
* Allow testing `discard_on/retry_on ActiveJob::DeserializationError`
|
2021-11-19 17:04:55 -05:00
|
|
|
|
2021-08-22 04:47:01 -04:00
|
|
|
Previously in `perform_enqueued_jobs`, `deserialize_arguments_if_needed`
|
|
|
|
was called before calling `perform_now`. When a record no longer exists
|
|
|
|
and is serialized using GlobalID this led to raising
|
|
|
|
an `ActiveJob::DeserializationError` before reaching `perform_now` call.
|
2022-05-25 19:48:46 -04:00
|
|
|
This behavior makes difficult testing the job `discard_on/retry_on` logic.
|
2021-08-22 04:47:01 -04:00
|
|
|
|
|
|
|
Now `deserialize_arguments_if_needed` call is postponed to when `perform_now`
|
|
|
|
is called.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
class UpdateUserJob < ActiveJob::Base
|
|
|
|
discard_on ActiveJob::DeserializationError
|
|
|
|
|
|
|
|
def perform(user)
|
|
|
|
# ...
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
# In the test
|
|
|
|
User.destroy_all
|
|
|
|
assert_nothing_raised do
|
|
|
|
perform_enqueued_jobs only: UpdateUserJob
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
*Jacopo Beschi*
|
2021-11-19 17:04:55 -05:00
|
|
|
|
2021-12-07 10:52:30 -05:00
|
|
|
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/activejob/CHANGELOG.md) for previous changes.
|