delayed 0.7.0 → 0.7.2
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 +4 -4
- data/lib/delayed/active_job_adapter.rb +6 -1
- data/lib/delayed/worker.rb +8 -11
- data/lib/delayed.rb +1 -1
- data/spec/delayed/active_job_adapter_spec.rb +30 -2
- data/spec/delayed/job_spec.rb +4 -4
- data/spec/helper.rb +7 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ea752ae23dd7aee646bcd0be946a7e414c328c4323dc4a2f34d0ee2106c36364
|
4
|
+
data.tar.gz: 6b2509d426b6e7dd25340fde6a3ff4ccfea88fbf15d53d91a1724629ff21c170
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 015dd62d37946fd70411776f89a6d96850b76a1f3d54a280d38ff82d816b0ab0532b673309ace4882575b443a9ce1244e8a053a82d25413d2217213d3c72284f
|
7
|
+
data.tar.gz: 5dcd12088fb0bbe76abe2559a35aa53a6b90155fe22dd992033b31f12f63b0d572ec8ba2b87d2ad418837dc25ebaeecd1a558108e8cf74f08081c11435ddcafb
|
@@ -17,7 +17,7 @@ module Delayed
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def _enqueue(job, opts = {})
|
20
|
-
if
|
20
|
+
if enqueue_after_transaction_commit_enabled?(job)
|
21
21
|
raise UnsafeEnqueueError, "The ':delayed' ActiveJob adapter is not compatible with enqueue_after_transaction_commit"
|
22
22
|
end
|
23
23
|
|
@@ -29,6 +29,11 @@ module Delayed
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
def enqueue_after_transaction_commit_enabled?(job)
|
33
|
+
job.class.respond_to?(:enqueue_after_transaction_commit) &&
|
34
|
+
[true, :always].include?(job.class.enqueue_after_transaction_commit)
|
35
|
+
end
|
36
|
+
|
32
37
|
module EnqueuingPatch
|
33
38
|
def self.included(klass)
|
34
39
|
klass.prepend PrependedMethods
|
data/lib/delayed/worker.rb
CHANGED
@@ -101,7 +101,12 @@ module Delayed
|
|
101
101
|
pool = Concurrent::FixedThreadPool.new(jobs.length)
|
102
102
|
jobs.each do |job|
|
103
103
|
pool.post do
|
104
|
-
|
104
|
+
self.class.lifecycle.run_callbacks(:thread, self, job) do
|
105
|
+
success.increment if perform(job)
|
106
|
+
end
|
107
|
+
rescue Exception => e # rubocop:disable Lint/RescueException
|
108
|
+
job_say job, "Job thread crashed with #{e.class.name}: #{e.message}", 'error'
|
109
|
+
job.error = e
|
105
110
|
end
|
106
111
|
end
|
107
112
|
|
@@ -117,12 +122,8 @@ module Delayed
|
|
117
122
|
[success.value, total - success.value]
|
118
123
|
end
|
119
124
|
|
120
|
-
def
|
121
|
-
self.class.lifecycle.run_callbacks(:
|
122
|
-
end
|
123
|
-
|
124
|
-
def run(job)
|
125
|
-
run_thread_callbacks(job) do
|
125
|
+
def perform(job)
|
126
|
+
self.class.lifecycle.run_callbacks(:perform, self, job) do
|
126
127
|
metadata = {
|
127
128
|
status: 'RUNNING',
|
128
129
|
name: job.name,
|
@@ -209,10 +210,6 @@ module Delayed
|
|
209
210
|
reschedule(job)
|
210
211
|
end
|
211
212
|
|
212
|
-
def run_job(job)
|
213
|
-
self.class.lifecycle.run_callbacks(:perform, self, job) { run(job) }
|
214
|
-
end
|
215
|
-
|
216
213
|
# The backend adapter may return either a list or a single job
|
217
214
|
# In some backends, this can be controlled with the `max_claims` config
|
218
215
|
# Either way, we map this to an array of job instances
|
data/lib/delayed.rb
CHANGED
@@ -295,7 +295,9 @@ RSpec.describe Delayed::ActiveJobAdapter do
|
|
295
295
|
end
|
296
296
|
|
297
297
|
it 'raises an exception on enqueue' do
|
298
|
-
|
298
|
+
ActiveJob.deprecator.silence do
|
299
|
+
expect { JobClass.perform_later }.to raise_error(Delayed::ActiveJobAdapter::UnsafeEnqueueError)
|
300
|
+
end
|
299
301
|
end
|
300
302
|
end
|
301
303
|
|
@@ -306,7 +308,33 @@ RSpec.describe Delayed::ActiveJobAdapter do
|
|
306
308
|
end
|
307
309
|
|
308
310
|
it 'does not raises an exception on enqueue' do
|
309
|
-
|
311
|
+
ActiveJob.deprecator.silence do
|
312
|
+
expect { JobClass.perform_later }.not_to raise_error
|
313
|
+
end
|
314
|
+
end
|
315
|
+
end
|
316
|
+
end
|
317
|
+
|
318
|
+
if ActiveJob.gem_version.release >= Gem::Version.new('8.0')
|
319
|
+
context 'when the given job sets enqueue_after_transaction_commit to true' do
|
320
|
+
before do
|
321
|
+
JobClass.include ActiveJob::EnqueueAfterTransactionCommit # normally run in an ActiveJob railtie
|
322
|
+
JobClass.enqueue_after_transaction_commit = true
|
323
|
+
end
|
324
|
+
|
325
|
+
it 'raises an exception on enqueue' do
|
326
|
+
expect { JobClass.perform_later }.to raise_error(Delayed::ActiveJobAdapter::UnsafeEnqueueError)
|
327
|
+
end
|
328
|
+
end
|
329
|
+
|
330
|
+
context 'when the given job sets enqueue_after_transaction_commit to false' do
|
331
|
+
before do
|
332
|
+
JobClass.include ActiveJob::EnqueueAfterTransactionCommit # normally run in an ActiveJob railtie
|
333
|
+
JobClass.enqueue_after_transaction_commit = false
|
334
|
+
end
|
335
|
+
|
336
|
+
it 'does not raises an exception on enqueue' do
|
337
|
+
expect { JobClass.perform_later }.not_to raise_error
|
310
338
|
end
|
311
339
|
end
|
312
340
|
end
|
data/spec/delayed/job_spec.rb
CHANGED
@@ -533,7 +533,7 @@ describe Delayed::Job do
|
|
533
533
|
it 'fails after Worker.max_run_time' do
|
534
534
|
Delayed::Worker.max_run_time = 1.second
|
535
535
|
job = described_class.create payload_object: LongRunningJob.new
|
536
|
-
worker.
|
536
|
+
worker.perform(job)
|
537
537
|
expect(job.error).not_to be_nil
|
538
538
|
expect(job.reload.last_error).to match(/expired/)
|
539
539
|
expect(job.reload.last_error).to match(/Delayed::Worker\.max_run_time is only 1 second/)
|
@@ -558,7 +558,7 @@ describe Delayed::Job do
|
|
558
558
|
|
559
559
|
it 'records last_error when destroy_failed_jobs = false, max_attempts = 1' do
|
560
560
|
Delayed::Worker.max_attempts = 1
|
561
|
-
worker.
|
561
|
+
worker.perform(@job)
|
562
562
|
@job.reload
|
563
563
|
expect(@job.error).not_to be_nil
|
564
564
|
expect(@job.last_error).to match(/did not work/)
|
@@ -580,7 +580,7 @@ describe Delayed::Job do
|
|
580
580
|
|
581
581
|
it 're-schedules jobs with handler provided time if present' do
|
582
582
|
job = described_class.enqueue(CustomRescheduleJob.new(99.minutes))
|
583
|
-
worker.
|
583
|
+
worker.perform(job)
|
584
584
|
job.reload
|
585
585
|
|
586
586
|
expect((described_class.db_time_now + 99.minutes - job.run_at).abs).to be < 1
|
@@ -590,7 +590,7 @@ describe Delayed::Job do
|
|
590
590
|
error_with_nil_message = StandardError.new
|
591
591
|
expect(error_with_nil_message).to receive(:message).twice.and_return(nil)
|
592
592
|
expect(@job).to receive(:invoke_job).and_raise error_with_nil_message
|
593
|
-
expect { worker.
|
593
|
+
expect { worker.perform(@job) }.not_to raise_error
|
594
594
|
end
|
595
595
|
end
|
596
596
|
|
data/spec/helper.rb
CHANGED
@@ -10,6 +10,13 @@ require 'sample_jobs'
|
|
10
10
|
|
11
11
|
require 'rake'
|
12
12
|
|
13
|
+
if ActiveSupport.gem_version >= Gem::Version.new('7.1')
|
14
|
+
frameworks = [ActiveModel, ActiveRecord, ActionMailer, ActiveJob, ActiveSupport]
|
15
|
+
frameworks.each { |framework| framework.deprecator.behavior = :raise }
|
16
|
+
else
|
17
|
+
ActiveSupport::Deprecation.behavior = :raise
|
18
|
+
end
|
19
|
+
|
13
20
|
if ENV['DEBUG_LOGS']
|
14
21
|
Delayed.logger = Logger.new($stdout)
|
15
22
|
else
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Griffith
|
@@ -18,7 +18,7 @@ authors:
|
|
18
18
|
- Tobias Lütke
|
19
19
|
bindir: bin
|
20
20
|
cert_chain: []
|
21
|
-
date: 2025-
|
21
|
+
date: 2025-04-02 00:00:00.000000000 Z
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
24
24
|
name: activerecord
|
@@ -137,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
requirements: []
|
140
|
-
rubygems_version: 3.6.
|
140
|
+
rubygems_version: 3.6.6
|
141
141
|
specification_version: 4
|
142
142
|
summary: a multi-threaded, SQL-driven ActiveJob backend used at Betterment to process
|
143
143
|
millions of background jobs per day
|