activejob 6.0.3.2 → 6.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +74 -147
- data/MIT-LICENSE +1 -1
- data/README.md +1 -3
- data/lib/active_job.rb +1 -1
- data/lib/active_job/base.rb +3 -0
- data/lib/active_job/callbacks.rb +44 -4
- data/lib/active_job/core.rb +3 -2
- data/lib/active_job/enqueuing.rb +3 -13
- data/lib/active_job/exceptions.rb +29 -20
- data/lib/active_job/execution.rb +9 -1
- data/lib/active_job/gem_version.rb +3 -3
- data/lib/active_job/instrumentation.rb +37 -0
- data/lib/active_job/log_subscriber.rb +140 -0
- data/lib/active_job/logging.rb +3 -132
- data/lib/active_job/queue_adapter.rb +3 -0
- data/lib/active_job/queue_adapters.rb +5 -1
- data/lib/active_job/queue_adapters/sucker_punch_adapter.rb +1 -1
- data/lib/active_job/queue_adapters/test_adapter.rb +6 -2
- data/lib/active_job/queue_name.rb +2 -2
- data/lib/active_job/railtie.rb +4 -0
- data/lib/active_job/serializers.rb +4 -1
- data/lib/active_job/serializers/date_time_serializer.rb +1 -5
- data/lib/active_job/serializers/module_serializer.rb +20 -0
- data/lib/active_job/serializers/object_serializer.rb +1 -1
- data/lib/active_job/serializers/time_object_serializer.rb +13 -0
- data/lib/active_job/serializers/time_serializer.rb +1 -5
- data/lib/active_job/serializers/time_with_zone_serializer.rb +1 -5
- data/lib/active_job/test_helper.rb +79 -80
- metadata +15 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e8ecd60ff8f673ab2711ef5b6b634ce5828160113e8ac5eec732d71bc691660
|
4
|
+
data.tar.gz: 0207aac145fea7328f0afbe4680413712bbf1f1bd7a400d0b19f178ecf21024f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bf88c0a034e81a6d1a75fa95b37b790647eac95a4f3bfdef7b93bb0880d80e7e040a2eb9afe735544ed11ffdd7337eb7f5bcdf8fe2f3c38045ed5319b8bf5e02
|
7
|
+
data.tar.gz: 4fbc6a306f542ba1dbb749e1defb085bd52c691b6287c6ef3e10a8bfd527f8e85914c162b5728f47e08271f6367f182195cf30fb6a7c8ba4c2b5af211b4e2b7d
|
data/CHANGELOG.md
CHANGED
@@ -1,203 +1,130 @@
|
|
1
|
-
## Rails 6.0
|
1
|
+
## Rails 6.1.0 (December 09, 2020) ##
|
2
2
|
|
3
|
-
*
|
3
|
+
* Recover nano precision when serializing `Time`, `TimeWithZone` and `DateTime` objects.
|
4
4
|
|
5
|
+
*Alan Tan*
|
5
6
|
|
6
|
-
|
7
|
+
* Deprecate `config.active_job.return_false_on_aborted_enqueue`.
|
7
8
|
|
8
|
-
*
|
9
|
+
*Rafael Mendonça França*
|
9
10
|
|
11
|
+
* Return `false` when enqueuing a job is aborted.
|
10
12
|
|
11
|
-
|
13
|
+
*Rafael Mendonça França*
|
12
14
|
|
13
15
|
* While using `perform_enqueued_jobs` test helper enqueued jobs must be stored for the later check with
|
14
16
|
`assert_enqueued_with`.
|
15
17
|
|
16
18
|
*Dmitry Polushkin*
|
17
19
|
|
18
|
-
*
|
20
|
+
* `ActiveJob::TestCase#perform_enqueued_jobs` without a block removes performed jobs from the queue.
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
## Rails 6.0.2.2 (March 19, 2020) ##
|
24
|
-
|
25
|
-
* No changes.
|
26
|
-
|
27
|
-
|
28
|
-
## Rails 6.0.2.1 (December 18, 2019) ##
|
29
|
-
|
30
|
-
* No changes.
|
31
|
-
|
32
|
-
|
33
|
-
## Rails 6.0.2 (December 13, 2019) ##
|
34
|
-
|
35
|
-
* Allow Sidekiq access to the underlying job class.
|
36
|
-
|
37
|
-
By having access to the Active Job class, Sidekiq can get access to any `sidekiq_options` which
|
38
|
-
have been set on that Active Job type and serialize those options into Redis.
|
39
|
-
|
40
|
-
https://github.com/mperham/sidekiq/blob/master/Changes.md#60
|
41
|
-
|
42
|
-
*Mike Perham*
|
43
|
-
|
44
|
-
|
45
|
-
## Rails 6.0.1 (November 5, 2019) ##
|
46
|
-
|
47
|
-
* No changes.
|
48
|
-
|
49
|
-
|
50
|
-
## Rails 6.0.0 (August 16, 2019) ##
|
51
|
-
|
52
|
-
* `assert_enqueued_with` and `assert_performed_with` can now test jobs with relative delay.
|
53
|
-
|
54
|
-
*Vlado Cingel*
|
55
|
-
|
56
|
-
|
57
|
-
## Rails 6.0.0.rc2 (July 22, 2019) ##
|
58
|
-
|
59
|
-
* No changes.
|
60
|
-
|
61
|
-
|
62
|
-
## Rails 6.0.0.rc1 (April 24, 2019) ##
|
63
|
-
|
64
|
-
* Use individual execution counters when calculating retry delay.
|
65
|
-
|
66
|
-
*Patrik Bóna*
|
67
|
-
|
68
|
-
* Make job argument assertions with `Time`, `ActiveSupport::TimeWithZone`, and `DateTime` work by dropping microseconds. Microsecond precision is lost during serialization.
|
69
|
-
|
70
|
-
*Gannon McGibbon*
|
22
|
+
That way the helper can be called multiple times and not perform a job invocation multiple times.
|
71
23
|
|
24
|
+
```ruby
|
25
|
+
def test_jobs
|
26
|
+
HelloJob.perform_later("rafael")
|
27
|
+
perform_enqueued_jobs # only runs with "rafael"
|
28
|
+
HelloJob.perform_later("david")
|
29
|
+
perform_enqueued_jobs # only runs with "david"
|
30
|
+
end
|
31
|
+
```
|
72
32
|
|
73
|
-
|
74
|
-
|
75
|
-
* No changes.
|
76
|
-
|
77
|
-
|
78
|
-
## Rails 6.0.0.beta2 (February 25, 2019) ##
|
79
|
-
|
80
|
-
* No changes.
|
33
|
+
*Étienne Barrié*
|
81
34
|
|
35
|
+
* `ActiveJob::TestCase#perform_enqueued_jobs` will no longer perform retries:
|
82
36
|
|
83
|
-
|
37
|
+
When calling `perform_enqueued_jobs` without a block, the adapter will
|
38
|
+
now perform jobs that are **already** in the queue. Jobs that will end up in
|
39
|
+
the queue afterwards won't be performed.
|
84
40
|
|
85
|
-
|
41
|
+
This change only affects `perform_enqueued_jobs` when no block is given.
|
86
42
|
|
87
|
-
|
88
|
-
`config.active_job.return_false_on_aborted_enqueue`.
|
43
|
+
*Edouard Chin*
|
89
44
|
|
90
|
-
|
45
|
+
* Add queue name support to Que adapter.
|
91
46
|
|
92
|
-
*
|
47
|
+
*Brad Nauta*, *Wojciech Wnętrzak*
|
93
48
|
|
94
|
-
|
95
|
-
shared between all executions of a job.
|
49
|
+
* Don't run `after_enqueue` and `after_perform` callbacks if the callback chain is halted.
|
96
50
|
|
97
|
-
|
51
|
+
class MyJob < ApplicationJob
|
52
|
+
before_enqueue { throw(:abort) }
|
53
|
+
after_enqueue { # won't enter here anymore }
|
54
|
+
end
|
98
55
|
|
99
|
-
|
100
|
-
|
56
|
+
`after_enqueue` and `after_perform` callbacks will no longer run if the callback chain is halted.
|
57
|
+
This behaviour is a breaking change and won't take effect until Rails 6.2.
|
58
|
+
To enable this behaviour in your app right now, you can add in your app's configuration file
|
59
|
+
`config.active_job.skip_after_callbacks_if_terminated = true`.
|
101
60
|
|
102
61
|
*Edouard Chin*
|
103
62
|
|
104
|
-
*
|
63
|
+
* Fix enqueuing and performing incorrect logging message.
|
105
64
|
|
106
|
-
|
65
|
+
Jobs will no longer always log "Enqueued MyJob" or "Performed MyJob" when they actually didn't get enqueued/performed.
|
107
66
|
|
108
|
-
|
109
|
-
|
67
|
+
```ruby
|
68
|
+
class MyJob < ApplicationJob
|
69
|
+
before_enqueue { throw(:abort) }
|
70
|
+
end
|
110
71
|
|
111
|
-
|
72
|
+
MyJob.perform_later # Will no longer log "Enqueued MyJob" since job wasn't even enqueued through adapter.
|
73
|
+
```
|
112
74
|
|
113
|
-
|
114
|
-
|
115
|
-
matches your expectations.
|
75
|
+
A new message will be logged in case a job couldn't be enqueued, either because the callback chain was halted or
|
76
|
+
because an exception happened during enqueuing. (i.e. Redis is down when you try to enqueue your job)
|
116
77
|
|
117
78
|
*Edouard Chin*
|
118
79
|
|
119
|
-
*
|
120
|
-
|
121
|
-
*Ricardo Díaz*
|
122
|
-
|
123
|
-
* Added `enqueue_retry.active_job`, `retry_stopped.active_job`, and `discard.active_job` hooks.
|
124
|
-
|
125
|
-
*steves*
|
80
|
+
* Add an option to disable logging of the job arguments when enqueuing and executing the job.
|
126
81
|
|
127
|
-
|
82
|
+
class SensitiveJob < ApplicationJob
|
83
|
+
self.log_arguments = false
|
128
84
|
|
129
|
-
|
85
|
+
def perform(my_sensitive_argument)
|
86
|
+
end
|
87
|
+
end
|
130
88
|
|
131
|
-
|
132
|
-
|
89
|
+
When dealing with sensitive arguments as password and tokens it is now possible to configure the job
|
90
|
+
to not put the sensitive argument in the logs.
|
133
91
|
|
134
|
-
*
|
92
|
+
*Rafael Mendonça França*
|
135
93
|
|
136
|
-
*
|
94
|
+
* Changes in `queue_name_prefix` of a job no longer affects all other jobs.
|
137
95
|
|
138
|
-
|
96
|
+
Fixes #37084.
|
139
97
|
|
140
|
-
*
|
98
|
+
*Lucas Mansur*
|
141
99
|
|
142
|
-
|
100
|
+
* Allow `Class` and `Module` instances to be serialized.
|
143
101
|
|
144
102
|
*Kevin Deisz*
|
145
103
|
|
146
|
-
*
|
147
|
-
|
148
|
-
Improves timing accuracy over the old after callback by including
|
149
|
-
time spent writing to the adapter's IO implementation.
|
150
|
-
|
151
|
-
*Zach Kemp*
|
152
|
-
|
153
|
-
* Allow call `assert_enqueued_with` with no block.
|
104
|
+
* Log potential matches in `assert_enqueued_with` and `assert_performed_with`.
|
154
105
|
|
155
|
-
|
156
|
-
```
|
157
|
-
def test_assert_enqueued_with
|
158
|
-
MyJob.perform_later(1,2,3)
|
159
|
-
assert_enqueued_with(job: MyJob, args: [1,2,3], queue: 'low')
|
160
|
-
|
161
|
-
MyJob.set(wait_until: Date.tomorrow.noon).perform_later
|
162
|
-
assert_enqueued_with(job: MyJob, at: Date.tomorrow.noon)
|
163
|
-
end
|
164
|
-
```
|
165
|
-
|
166
|
-
*bogdanvlviv*
|
167
|
-
|
168
|
-
* Allow passing multiple exceptions to `retry_on`, and `discard_on`.
|
169
|
-
|
170
|
-
*George Claghorn*
|
171
|
-
|
172
|
-
* Pass the error instance as the second parameter of block executed by `discard_on`.
|
106
|
+
*Gareth du Plooy*
|
173
107
|
|
174
|
-
|
108
|
+
* Add `at` argument to the `perform_enqueued_jobs` test helper.
|
175
109
|
|
176
|
-
*
|
110
|
+
*John Crepezzi*, *Eileen Uchitelle*
|
177
111
|
|
178
|
-
*
|
179
|
-
|
180
|
-
Reasons are that the Qu gem wasn't compatible since Rails 5.1,
|
181
|
-
gem development was stopped in 2014 and maintainers have
|
182
|
-
confirmed its demise. See issue #32273
|
183
|
-
|
184
|
-
*Alberto Almagro*
|
185
|
-
|
186
|
-
* Add support for timezones to Active Job.
|
187
|
-
|
188
|
-
Record what was the current timezone in effect when the job was
|
189
|
-
enqueued and then restore when the job is executed in same way
|
190
|
-
that the current locale is recorded and restored.
|
112
|
+
* `assert_enqueued_with` and `assert_performed_with` can now test jobs with relative delay.
|
191
113
|
|
192
|
-
*
|
114
|
+
*Vlado Cingel*
|
193
115
|
|
194
|
-
*
|
116
|
+
* Add jitter to `ActiveJob::Exceptions.retry_on`.
|
195
117
|
|
196
|
-
|
118
|
+
`ActiveJob::Exceptions.retry_on` now uses a random amount of jitter in order to
|
119
|
+
prevent the [thundering herd effect](https://en.wikipedia.org/wiki/Thundering_herd_problem). Defaults to
|
120
|
+
15% (represented as 0.15) but overridable via the `:jitter` option when using `retry_on`.
|
121
|
+
Jitter is applied when an `Integer`, `ActiveSupport::Duration` or `:exponentially_longer`, is passed to the `wait` argument in `retry_on`.
|
197
122
|
|
198
|
-
|
123
|
+
```ruby
|
124
|
+
retry_on(MyError, wait: :exponentially_longer, jitter: 0.30)
|
125
|
+
```
|
199
126
|
|
200
|
-
*
|
127
|
+
*Anthony Ross*
|
201
128
|
|
202
129
|
|
203
|
-
Please check [
|
130
|
+
Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/activejob/CHANGELOG.md) for previous changes.
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -95,9 +95,6 @@ their gem, or as a stand-alone gem. For discussion about this see the
|
|
95
95
|
following PRs: [23311](https://github.com/rails/rails/issues/23311#issuecomment-176275718),
|
96
96
|
[21406](https://github.com/rails/rails/pull/21406#issuecomment-138813484), and [#32285](https://github.com/rails/rails/pull/32285).
|
97
97
|
|
98
|
-
## Auxiliary gems
|
99
|
-
|
100
|
-
* [activejob-stats](https://github.com/seuros/activejob-stats)
|
101
98
|
|
102
99
|
## Download and installation
|
103
100
|
|
@@ -111,6 +108,7 @@ Source code can be downloaded as part of the Rails project on GitHub:
|
|
111
108
|
|
112
109
|
* https://github.com/rails/rails/tree/master/activejob
|
113
110
|
|
111
|
+
|
114
112
|
## License
|
115
113
|
|
116
114
|
Active Job is released under the MIT license:
|
data/lib/active_job.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
#--
|
4
|
-
# Copyright (c) 2014-
|
4
|
+
# Copyright (c) 2014-2020 David Heinemeier Hansson
|
5
5
|
#
|
6
6
|
# Permission is hereby granted, free of charge, to any person obtaining
|
7
7
|
# a copy of this software and associated documentation files (the
|
data/lib/active_job/base.rb
CHANGED
@@ -8,7 +8,9 @@ require "active_job/enqueuing"
|
|
8
8
|
require "active_job/execution"
|
9
9
|
require "active_job/callbacks"
|
10
10
|
require "active_job/exceptions"
|
11
|
+
require "active_job/log_subscriber"
|
11
12
|
require "active_job/logging"
|
13
|
+
require "active_job/instrumentation"
|
12
14
|
require "active_job/timezones"
|
13
15
|
require "active_job/translation"
|
14
16
|
|
@@ -68,6 +70,7 @@ module ActiveJob #:nodoc:
|
|
68
70
|
include Callbacks
|
69
71
|
include Exceptions
|
70
72
|
include Logging
|
73
|
+
include Instrumentation
|
71
74
|
include Timezones
|
72
75
|
include Translation
|
73
76
|
|
data/lib/active_job/callbacks.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "active_support/callbacks"
|
4
|
+
require "active_support/core_ext/object/with_options"
|
5
|
+
require "active_support/core_ext/module/attribute_accessors"
|
4
6
|
|
5
7
|
module ActiveJob
|
6
8
|
# = Active Job Callbacks
|
@@ -27,16 +29,25 @@ module ActiveJob
|
|
27
29
|
end
|
28
30
|
|
29
31
|
included do
|
30
|
-
|
31
|
-
|
32
|
+
class_attribute :return_false_on_aborted_enqueue, instance_accessor: false, instance_predicate: false, default: false
|
33
|
+
singleton_class.deprecate :return_false_on_aborted_enqueue, :return_false_on_aborted_enqueue=
|
34
|
+
cattr_accessor :skip_after_callbacks_if_terminated, instance_accessor: false, default: false
|
32
35
|
|
33
|
-
|
34
|
-
|
36
|
+
with_options(skip_after_callbacks_if_terminated: skip_after_callbacks_if_terminated) do
|
37
|
+
define_callbacks :perform
|
38
|
+
define_callbacks :enqueue
|
39
|
+
end
|
35
40
|
end
|
36
41
|
|
37
42
|
# These methods will be included into any Active Job object, adding
|
38
43
|
# callbacks for +perform+ and +enqueue+ methods.
|
39
44
|
module ClassMethods
|
45
|
+
def inherited(klass)
|
46
|
+
klass.get_callbacks(:enqueue).config[:skip_after_callbacks_if_terminated] = skip_after_callbacks_if_terminated
|
47
|
+
klass.get_callbacks(:perform).config[:skip_after_callbacks_if_terminated] = skip_after_callbacks_if_terminated
|
48
|
+
super
|
49
|
+
end
|
50
|
+
|
40
51
|
# Defines a callback that will get called right before the
|
41
52
|
# job's perform method is executed.
|
42
53
|
#
|
@@ -91,6 +102,19 @@ module ActiveJob
|
|
91
102
|
# end
|
92
103
|
# end
|
93
104
|
#
|
105
|
+
# You can access the return value of the job only if the execution wasn't halted.
|
106
|
+
#
|
107
|
+
# class VideoProcessJob < ActiveJob::Base
|
108
|
+
# around_perform do |job, block|
|
109
|
+
# value = block.call
|
110
|
+
# puts value # => "Hello World!"
|
111
|
+
# end
|
112
|
+
#
|
113
|
+
# def perform
|
114
|
+
# "Hello World!"
|
115
|
+
# end
|
116
|
+
# end
|
117
|
+
#
|
94
118
|
def around_perform(*filters, &blk)
|
95
119
|
set_callback(:perform, :around, *filters, &blk)
|
96
120
|
end
|
@@ -154,5 +178,21 @@ module ActiveJob
|
|
154
178
|
set_callback(:enqueue, :around, *filters, &blk)
|
155
179
|
end
|
156
180
|
end
|
181
|
+
|
182
|
+
private
|
183
|
+
def halted_callback_hook(_filter, name) # :nodoc:
|
184
|
+
return super unless %i(enqueue perform).include?(name.to_sym)
|
185
|
+
callbacks = public_send("_#{name}_callbacks")
|
186
|
+
|
187
|
+
if !self.class.skip_after_callbacks_if_terminated && callbacks.any? { |c| c.kind == :after }
|
188
|
+
ActiveSupport::Deprecation.warn(<<~EOM)
|
189
|
+
In Rails 6.2, `after_enqueue`/`after_perform` callbacks no longer run if `before_enqueue`/`before_perform` respectively halts with `throw :abort`.
|
190
|
+
To enable this behavior, uncomment the `config.active_job.skip_after_callbacks_if_terminated` config
|
191
|
+
in the new 6.1 framework defaults initializer.
|
192
|
+
EOM
|
193
|
+
end
|
194
|
+
|
195
|
+
super
|
196
|
+
end
|
157
197
|
end
|
158
198
|
end
|
data/lib/active_job/core.rb
CHANGED
@@ -85,6 +85,7 @@ module ActiveJob
|
|
85
85
|
@priority = self.class.priority
|
86
86
|
@executions = 0
|
87
87
|
@exception_executions = {}
|
88
|
+
@timezone = Time.zone&.name
|
88
89
|
end
|
89
90
|
ruby2_keywords(:initialize) if respond_to?(:ruby2_keywords, true)
|
90
91
|
|
@@ -101,7 +102,7 @@ module ActiveJob
|
|
101
102
|
"executions" => executions,
|
102
103
|
"exception_executions" => exception_executions,
|
103
104
|
"locale" => I18n.locale.to_s,
|
104
|
-
"timezone" =>
|
105
|
+
"timezone" => timezone,
|
105
106
|
"enqueued_at" => Time.now.utc.iso8601
|
106
107
|
}
|
107
108
|
end
|
@@ -141,7 +142,7 @@ module ActiveJob
|
|
141
142
|
self.executions = job_data["executions"]
|
142
143
|
self.exception_executions = job_data["exception_executions"]
|
143
144
|
self.locale = job_data["locale"] || I18n.locale.to_s
|
144
|
-
self.timezone = job_data["timezone"] || Time.zone
|
145
|
+
self.timezone = job_data["timezone"] || Time.zone&.name
|
145
146
|
self.enqueued_at = job_data["enqueued_at"]
|
146
147
|
end
|
147
148
|
|
data/lib/active_job/enqueuing.rb
CHANGED
@@ -54,9 +54,9 @@ module ActiveJob
|
|
54
54
|
|
55
55
|
run_callbacks :enqueue do
|
56
56
|
if scheduled_at
|
57
|
-
|
57
|
+
queue_adapter.enqueue_at self, scheduled_at
|
58
58
|
else
|
59
|
-
|
59
|
+
queue_adapter.enqueue self
|
60
60
|
end
|
61
61
|
|
62
62
|
successfully_enqueued = true
|
@@ -65,17 +65,7 @@ module ActiveJob
|
|
65
65
|
if successfully_enqueued
|
66
66
|
self
|
67
67
|
else
|
68
|
-
|
69
|
-
false
|
70
|
-
else
|
71
|
-
ActiveSupport::Deprecation.warn(
|
72
|
-
"Rails 6.1 will return false when the enqueuing is aborted. Make sure your code doesn't depend on it" \
|
73
|
-
" returning the instance of the job and set `config.active_job.return_false_on_aborted_enqueue = true`" \
|
74
|
-
" to remove the deprecations."
|
75
|
-
)
|
76
|
-
|
77
|
-
self
|
78
|
-
end
|
68
|
+
false
|
79
69
|
end
|
80
70
|
end
|
81
71
|
end
|