delayed 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e76902c89ee215794e6c6b987b69a9c00371fd70658a3ef1accd7751587b17a5
4
- data.tar.gz: d4e2ddc68375700e839e60aadb487bbeacf55f603d392ec0a11099429685ae77
3
+ metadata.gz: ae36c9e652d4fb6ce28f8897b0e7b03b7777ce9907a74973924111b735bca3ae
4
+ data.tar.gz: 0d4c27d0bf1f7e256fa85914086a0711c6406b4be5e88f211eccbd921c001718
5
5
  SHA512:
6
- metadata.gz: 6240ae94bee15f2f434e6a73941ad3123add526ac29b56a13127aa7797fbf006dd8e1f73b6a53b533b9494d6d99b4f30550fd3d632eadc5b4cbb2c2a4dbd796c
7
- data.tar.gz: d0fef6960b1e32f400f53779886e0465c4c7fcf8d66b30de17c588c17a2661c66391dc3ba978a67890d21799980fff22195881eb30eaef7bdfabd4049c8a21ee
6
+ metadata.gz: cbae79e450983c1dd968b5f9959b4497758c32cc2c21a45ecea5b41dc1d7829fac2699d0a8cea635369d276eaec5b07ce8d7fa292674578ff62690823bc163fc
7
+ data.tar.gz: df37746eee87f40792499e02421f82a2fc4afa4317e168bdb440f3bed1ba737c761469092098f99e2aa3fb163f50981e6b19a83a4859e91871ac8f046363f630
@@ -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
20
+ if job.class.respond_to?(:enqueue_after_transaction_commit) && job.class.enqueue_after_transaction_commit == :always
21
21
  raise UnsafeEnqueueError, "The ':delayed' ActiveJob adapter is not compatible with enqueue_after_transaction_commit"
22
22
  end
23
23
 
@@ -89,22 +89,17 @@ module Delayed
89
89
  # Exit early if interrupted.
90
90
  def work_off(num = 100)
91
91
  success = Concurrent::AtomicFixnum.new(0)
92
- failure = Concurrent::AtomicFixnum.new(0)
92
+ total = 0
93
93
 
94
- num.times do
94
+ while total < num
95
95
  jobs = reserve_jobs
96
96
  break if jobs.empty?
97
97
 
98
+ total += jobs.length
98
99
  pool = Concurrent::FixedThreadPool.new(jobs.length)
99
100
  jobs.each do |job|
100
101
  pool.post do
101
- run_thread_callbacks(job) do
102
- if run_job(job)
103
- success.increment
104
- else
105
- failure.increment
106
- end
107
- end
102
+ success.increment if run_job(job)
108
103
  end
109
104
  end
110
105
 
@@ -114,7 +109,7 @@ module Delayed
114
109
  break if stop? # leave if we're exiting
115
110
  end
116
111
 
117
- [success, failure].map(&:value)
112
+ [success.value, total - success.value]
118
113
  end
119
114
 
120
115
  def run_thread_callbacks(job, &block)
@@ -122,30 +117,33 @@ module Delayed
122
117
  end
123
118
 
124
119
  def run(job)
125
- metadata = {
126
- status: 'RUNNING',
127
- name: job.name,
128
- run_at: job.run_at,
129
- created_at: job.created_at,
130
- priority: job.priority,
131
- queue: job.queue,
132
- attempts: job.attempts,
133
- enqueued_for: (Time.current - job.created_at).round,
134
- }
135
- job_say job, metadata.to_json
136
- run_time = Benchmark.realtime do
137
- Timeout.timeout(max_run_time(job).to_i, WorkerTimeout) do
138
- job.invoke_job
120
+ run_thread_callbacks(job) do
121
+ metadata = {
122
+ status: 'RUNNING',
123
+ name: job.name,
124
+ run_at: job.run_at,
125
+ created_at: job.created_at,
126
+ priority: job.priority,
127
+ queue: job.queue,
128
+ attempts: job.attempts,
129
+ enqueued_for: (Time.current - job.created_at).round,
130
+ }
131
+ job_say job, metadata.to_json
132
+ run_time = Benchmark.realtime do
133
+ Timeout.timeout(max_run_time(job).to_i, WorkerTimeout) do
134
+ job.invoke_job
135
+ end
136
+ job.destroy
139
137
  end
140
- job.destroy
138
+ job_say job, format('COMPLETED after %.4f seconds', run_time)
141
139
  end
142
- job_say job, format('COMPLETED after %.4f seconds', run_time)
143
140
  true # did work
144
141
  rescue DeserializationError => e
145
142
  job_say job, "FAILED permanently with #{e.class.name}: #{e.message}", 'error'
146
143
 
147
144
  job.error = e
148
145
  failed(job)
146
+ false # work failed
149
147
  rescue Exception => e # rubocop:disable Lint/RescueException
150
148
  self.class.lifecycle.run_callbacks(:error, self, job) { handle_failed_job(job, e) }
151
149
  false # work failed
@@ -288,16 +288,27 @@ RSpec.describe Delayed::ActiveJobAdapter do
288
288
  end
289
289
 
290
290
  if ActiveJob.gem_version.release >= Gem::Version.new('7.2')
291
- context 'when the given job sets enqueue_after_transaction_commit to true' do
291
+ context 'when the given job sets enqueue_after_transaction_commit to :always' do
292
292
  before do
293
293
  JobClass.include ActiveJob::EnqueueAfterTransactionCommit # normally run in an ActiveJob railtie
294
- JobClass.enqueue_after_transaction_commit = true
294
+ JobClass.enqueue_after_transaction_commit = :always
295
295
  end
296
296
 
297
297
  it 'raises an exception on enqueue' do
298
298
  expect { JobClass.perform_later }.to raise_error(Delayed::ActiveJobAdapter::UnsafeEnqueueError)
299
299
  end
300
300
  end
301
+
302
+ context 'when the given job sets enqueue_after_transaction_commit to :never' do
303
+ before do
304
+ JobClass.include ActiveJob::EnqueueAfterTransactionCommit # normally run in an ActiveJob railtie
305
+ JobClass.enqueue_after_transaction_commit = :never
306
+ end
307
+
308
+ it 'does not raises an exception on enqueue' do
309
+ expect { JobClass.perform_later }.not_to raise_error(Delayed::ActiveJobAdapter::UnsafeEnqueueError)
310
+ end
311
+ end
301
312
  end
302
313
 
303
314
  context 'when using the ActiveJob test adapter' do
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.5.4
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Griffith
@@ -19,7 +19,7 @@ authors:
19
19
  autorequire:
20
20
  bindir: bin
21
21
  cert_chain: []
22
- date: 2024-05-01 00:00:00.000000000 Z
22
+ date: 2024-08-13 00:00:00.000000000 Z
23
23
  dependencies:
24
24
  - !ruby/object:Gem::Dependency
25
25
  name: activerecord