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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56e1fb1ba1756335d42efb26a1469fecab4eb40817fb1783c5bd010db6aa799f
4
- data.tar.gz: 003ee0881213a406571b19d293b145a48eee377f6aef1282f701d76429816e9e
3
+ metadata.gz: ea752ae23dd7aee646bcd0be946a7e414c328c4323dc4a2f34d0ee2106c36364
4
+ data.tar.gz: 6b2509d426b6e7dd25340fde6a3ff4ccfea88fbf15d53d91a1724629ff21c170
5
5
  SHA512:
6
- metadata.gz: a2cccc74e3a2ecbb2459008fe9d399ebf2572dba782cd660bdd69bf4aafbab421a545952206fe1767edd03b9b38655f1e4a4209d9dd30060631499d3d949fba0
7
- data.tar.gz: f92d61ae2788cc3fa6e5a1d84150571516caf7d8e520057efc90f80de24bf1d402a5e01243c18eae903d46e48849ab044809e466fc687a02ab4f07c179118ec1
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 job.class.respond_to?(:enqueue_after_transaction_commit) && job.class.enqueue_after_transaction_commit == :always
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
@@ -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
- success.increment if run_job(job)
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 run_thread_callbacks(job, &block)
121
- self.class.lifecycle.run_callbacks(:thread, self, job, &block)
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
@@ -42,8 +42,8 @@ module Delayed
42
42
  mattr_accessor(:default_log_level) { 'info'.freeze }
43
43
  mattr_accessor(:plugins) do
44
44
  [
45
- Delayed::Plugins::Instrumentation,
46
45
  Delayed::Plugins::Connection,
46
+ Delayed::Plugins::Instrumentation,
47
47
  ]
48
48
  end
49
49
 
@@ -295,7 +295,9 @@ RSpec.describe Delayed::ActiveJobAdapter do
295
295
  end
296
296
 
297
297
  it 'raises an exception on enqueue' do
298
- expect { JobClass.perform_later }.to raise_error(Delayed::ActiveJobAdapter::UnsafeEnqueueError)
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
- expect { JobClass.perform_later }.not_to raise_error(Delayed::ActiveJobAdapter::UnsafeEnqueueError)
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
@@ -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.run(job)
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.run(@job)
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.run(job)
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.run(@job) }.not_to raise_error
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.0
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-01-15 00:00:00.000000000 Z
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.2
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