activejob 6.0.4 → 6.1.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2cedf2b27508b7b83a837b9e5e146733d8b2256f0717f259de468364d85481e2
4
- data.tar.gz: f2a1a787c22a129fb9d8aaed944b7285ceeee9017a72493d192654956f313e0c
3
+ metadata.gz: dc9b631f7b43e77aa14e8fb65525b51ad82f92f5b0046d15d44c2e5f2429a2aa
4
+ data.tar.gz: a2e8afb6e5295337e82c0f0c3de726cbe11dcedba0f2f34c6c4323170a74dc13
5
5
  SHA512:
6
- metadata.gz: 2ccf031db306fad16049a0b594170db761949f43ee1700a4061f54cd8d0150169f6bff4f8835f50897640af5506b9a15982061f3c21da0f057f808bc0c3add25
7
- data.tar.gz: deca6325f9fa644adfdd9030c3f2c1343c28844944e89dce5bbf893f4ff552f473605441aa4c41df8a26793247a1f6a5ad88ea66d335dda160173c89a9a31dcb
6
+ metadata.gz: b30c316861f1ae07c363df9184ef9a306d796756429d11978166b3864263cc72ff521c6d27093e17f0e2e850b6921c3dd39702646d6f5b7a5a198221d1e68f4f
7
+ data.tar.gz: 99ed04c52a31748e94edd687fe93a48de660e44d29b5645597a278a97450405f57c28b92d69b98cf0f3ded97711952a58b700b9f90e2ad8dac5148b843920b17
data/CHANGELOG.md CHANGED
@@ -1,233 +1,130 @@
1
- ## Rails 6.0.4 (June 15, 2021) ##
1
+ ## Rails 6.1.0.rc1 (November 02, 2020) ##
2
2
 
3
- * No changes.
3
+ * Recover nano precision when serializing `Time`, `TimeWithZone` and `DateTime` objects.
4
4
 
5
+ *Alan Tan*
5
6
 
6
- ## Rails 6.0.3.7 (May 05, 2021) ##
7
+ * Deprecate `config.active_job.return_false_on_aborted_enqueue`.
7
8
 
8
- * No changes.
9
+ *Rafael Mendonça França*
9
10
 
11
+ * Return `false` when enqueuing a job is aborted.
10
12
 
11
- ## Rails 6.0.3.6 (March 26, 2021) ##
12
-
13
- * No changes.
14
-
15
-
16
- ## Rails 6.0.3.5 (February 10, 2021) ##
17
-
18
- * No changes.
19
-
20
-
21
- ## Rails 6.0.3.4 (October 07, 2020) ##
22
-
23
- * No changes.
24
-
25
-
26
- ## Rails 6.0.3.3 (September 09, 2020) ##
27
-
28
- * No changes.
29
-
30
-
31
- ## Rails 6.0.3.2 (June 17, 2020) ##
32
-
33
- * No changes.
34
-
35
-
36
- ## Rails 6.0.3.1 (May 18, 2020) ##
37
-
38
- * No changes.
39
-
40
-
41
- ## Rails 6.0.3 (May 06, 2020) ##
13
+ *Rafael Mendonça França*
42
14
 
43
15
  * While using `perform_enqueued_jobs` test helper enqueued jobs must be stored for the later check with
44
16
  `assert_enqueued_with`.
45
17
 
46
18
  *Dmitry Polushkin*
47
19
 
48
- * Add queue name support to Que adapter
49
-
50
- *Brad Nauta*, *Wojciech Wnętrzak*
51
-
52
-
53
- ## Rails 6.0.2.2 (March 19, 2020) ##
54
-
55
- * No changes.
56
-
57
-
58
- ## Rails 6.0.2.1 (December 18, 2019) ##
59
-
60
- * No changes.
61
-
62
-
63
- ## Rails 6.0.2 (December 13, 2019) ##
64
-
65
- * Allow Sidekiq access to the underlying job class.
66
-
67
- By having access to the Active Job class, Sidekiq can get access to any `sidekiq_options` which
68
- have been set on that Active Job type and serialize those options into Redis.
20
+ * `ActiveJob::TestCase#perform_enqueued_jobs` without a block removes performed jobs from the queue.
69
21
 
70
- https://github.com/mperham/sidekiq/blob/master/Changes.md#60
71
-
72
- *Mike Perham*
73
-
74
-
75
- ## Rails 6.0.1 (November 5, 2019) ##
76
-
77
- * No changes.
78
-
79
-
80
- ## Rails 6.0.0 (August 16, 2019) ##
81
-
82
- * `assert_enqueued_with` and `assert_performed_with` can now test jobs with relative delay.
83
-
84
- *Vlado Cingel*
22
+ That way the helper can be called multiple times and not perform a job invocation multiple times.
85
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
+ ```
86
32
 
87
- ## Rails 6.0.0.rc2 (July 22, 2019) ##
88
-
89
- * No changes.
90
-
91
-
92
- ## Rails 6.0.0.rc1 (April 24, 2019) ##
93
-
94
- * Use individual execution counters when calculating retry delay.
95
-
96
- *Patrik Bóna*
97
-
98
- * Make job argument assertions with `Time`, `ActiveSupport::TimeWithZone`, and `DateTime` work by dropping microseconds. Microsecond precision is lost during serialization.
99
-
100
- *Gannon McGibbon*
101
-
102
-
103
- ## Rails 6.0.0.beta3 (March 11, 2019) ##
104
-
105
- * No changes.
106
-
107
-
108
- ## Rails 6.0.0.beta2 (February 25, 2019) ##
109
-
110
- * No changes.
33
+ *Étienne Barrié*
111
34
 
35
+ * `ActiveJob::TestCase#perform_enqueued_jobs` will no longer perform retries:
112
36
 
113
- ## Rails 6.0.0.beta1 (January 18, 2019) ##
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.
114
40
 
115
- * Return false instead of the job instance when `enqueue` is aborted.
41
+ This change only affects `perform_enqueued_jobs` when no block is given.
116
42
 
117
- This will be the behavior in Rails 6.1 but it can be controlled now with
118
- `config.active_job.return_false_on_aborted_enqueue`.
43
+ *Edouard Chin*
119
44
 
120
- *Kir Shatrov*
45
+ * Add queue name support to Que adapter.
121
46
 
122
- * Keep executions for each specific declaration
47
+ *Brad Nauta*, *Wojciech Wnętrzak*
123
48
 
124
- Each `retry_on` declaration has now its own specific executions counter. Before it was
125
- shared between all executions of a job.
49
+ * Don't run `after_enqueue` and `after_perform` callbacks if the callback chain is halted.
126
50
 
127
- *Alberto Almagro*
51
+ class MyJob < ApplicationJob
52
+ before_enqueue { throw(:abort) }
53
+ after_enqueue { # won't enter here anymore }
54
+ end
128
55
 
129
- * Allow all assertion helpers that have a `only` and `except` keyword to accept
130
- Procs.
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`.
131
60
 
132
61
  *Edouard Chin*
133
62
 
134
- * Restore `HashWithIndifferentAccess` support to `ActiveJob::Arguments.deserialize`.
63
+ * Fix enqueuing and performing incorrect logging message.
135
64
 
136
- *Gannon McGibbon*
65
+ Jobs will no longer always log "Enqueued MyJob" or "Performed MyJob" when they actually didn't get enqueued/performed.
137
66
 
138
- * Include deserialized arguments in job instances returned from
139
- `assert_enqueued_with` and `assert_performed_with`
67
+ ```ruby
68
+ class MyJob < ApplicationJob
69
+ before_enqueue { throw(:abort) }
70
+ end
140
71
 
141
- *Alan Wu*
72
+ MyJob.perform_later # Will no longer log "Enqueued MyJob" since job wasn't even enqueued through adapter.
73
+ ```
142
74
 
143
- * Allow `assert_enqueued_with`/`assert_performed_with` methods to accept
144
- a proc for the `args` argument. This is useful to check if only a subset of arguments
145
- 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 enqueing. (i.e. Redis is down when you try to enqueue your job)
146
77
 
147
78
  *Edouard Chin*
148
79
 
149
- * `ActionDispatch::IntegrationTest` includes `ActiveJob::TestHelper` module by default.
150
-
151
- *Ricardo Díaz*
152
-
153
- * Added `enqueue_retry.active_job`, `retry_stopped.active_job`, and `discard.active_job` hooks.
80
+ * Add an option to disable logging of the job arguments when enqueuing and executing the job.
154
81
 
155
- *steves*
82
+ class SensitiveJob < ApplicationJob
83
+ self.log_arguments = false
156
84
 
157
- * Allow `assert_performed_with` to be called without a block.
85
+ def perform(my_sensitive_argument)
86
+ end
87
+ end
158
88
 
159
- *bogdanvlviv*
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.
160
91
 
161
- * Execution of `assert_performed_jobs`, and `assert_no_performed_jobs`
162
- without a block should respect passed `:except`, `:only`, and `:queue` options.
92
+ *Rafael Mendonça França*
163
93
 
164
- *bogdanvlviv*
94
+ * Changes in `queue_name_prefix` of a job no longer affects all other jobs.
165
95
 
166
- * Allow `:queue` option to job assertions and helpers.
96
+ Fixes #37084.
167
97
 
168
- *bogdanvlviv*
98
+ *Lucas Mansur*
169
99
 
170
- * Allow `perform_enqueued_jobs` to be called without a block.
171
-
172
- Performs all of the jobs that have been enqueued up to this point in the test.
100
+ * Allow `Class` and `Module` instances to be serialized.
173
101
 
174
102
  *Kevin Deisz*
175
103
 
176
- * Move `enqueue`/`enqueue_at` notifications to an around callback.
177
-
178
- Improves timing accuracy over the old after callback by including
179
- time spent writing to the adapter's IO implementation.
180
-
181
- *Zach Kemp*
182
-
183
- * Allow call `assert_enqueued_with` with no block.
184
-
185
- Example:
186
- ```
187
- def test_assert_enqueued_with
188
- MyJob.perform_later(1,2,3)
189
- assert_enqueued_with(job: MyJob, args: [1,2,3], queue: 'low')
190
-
191
- MyJob.set(wait_until: Date.tomorrow.noon).perform_later
192
- assert_enqueued_with(job: MyJob, at: Date.tomorrow.noon)
193
- end
194
- ```
195
-
196
- *bogdanvlviv*
104
+ * Log potential matches in `assert_enqueued_with` and `assert_performed_with`.
197
105
 
198
- * Allow passing multiple exceptions to `retry_on`, and `discard_on`.
106
+ *Gareth du Plooy*
199
107
 
200
- *George Claghorn*
108
+ * Add `at` argument to the `perform_enqueued_jobs` test helper.
201
109
 
202
- * Pass the error instance as the second parameter of block executed by `discard_on`.
110
+ *John Crepezzi*, *Eileen Uchitelle*
203
111
 
204
- Fixes #32853.
205
-
206
- *Yuji Yaginuma*
207
-
208
- * Remove support for Qu gem.
209
-
210
- Reasons are that the Qu gem wasn't compatible since Rails 5.1,
211
- gem development was stopped in 2014 and maintainers have
212
- confirmed its demise. See issue #32273
213
-
214
- *Alberto Almagro*
215
-
216
- * Add support for timezones to Active Job.
217
-
218
- Record what was the current timezone in effect when the job was
219
- enqueued and then restore when the job is executed in same way
220
- that the current locale is recorded and restored.
112
+ * `assert_enqueued_with` and `assert_performed_with` can now test jobs with relative delay.
221
113
 
222
- *Andrew White*
114
+ *Vlado Cingel*
223
115
 
224
- * Rails 6 requires Ruby 2.5.0 or newer.
116
+ * Add jitter to `ActiveJob::Exceptions.retry_on`.
225
117
 
226
- *Jeremy Daer*, *Kasper Timm Hansen*
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`.
227
122
 
228
- * Add support to define custom argument serializers.
123
+ ```ruby
124
+ retry_on(MyError, wait: :exponentially_longer, jitter: 0.30)
125
+ ```
229
126
 
230
- *Evgenii Pecherkin*, *Rafael Mendonça França*
127
+ *Anthony Ross*
231
128
 
232
129
 
233
- Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/activejob/CHANGELOG.md) for previous changes.
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
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014-2019 David Heinemeier Hansson
1
+ Copyright (c) 2014-2020 David Heinemeier Hansson
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
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
 
@@ -109,7 +106,8 @@ The latest version of Active Job can be installed with RubyGems:
109
106
 
110
107
  Source code can be downloaded as part of the Rails project on GitHub:
111
108
 
112
- * https://github.com/rails/rails/tree/main/activejob
109
+ * https://github.com/rails/rails/tree/master/activejob
110
+
113
111
 
114
112
  ## License
115
113
 
data/lib/active_job.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  #--
4
- # Copyright (c) 2014-2019 David Heinemeier Hansson
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
@@ -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
 
@@ -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
- define_callbacks :perform
31
- define_callbacks :enqueue
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
- class_attribute :return_false_on_aborted_enqueue, instance_accessor: false, instance_predicate: false
34
- self.return_false_on_aborted_enqueue = false
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