Skip to content

Commit 77f8014

Browse files
committed
Raise error if group is already cancelled
1 parent c3f53e3 commit 77f8014

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

lib/delayed/job_groups/job_group.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ def unblock
6363

6464
def cancel
6565
with_lock do
66+
return if destroyed?
67+
6668
Delayed::Job.enqueue(on_cancellation_job, on_cancellation_job_options || {}) if on_cancellation_job
6769
destroy
6870
end

spec/delayed/job_groups/job_group_spec.rb

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,28 @@
299299
end
300300

301301
describe "#cancel" do
302+
subject(:job_group) do
303+
create(
304+
:job_group,
305+
on_completion_job: on_completion_job,
306+
on_completion_job_options: on_completion_job_options,
307+
on_cancellation_job: on_cancellation_job,
308+
on_cancellation_job_options: on_cancellation_job_options,
309+
blocked: blocked
310+
)
311+
end
312+
302313
let!(:queued_job) { Delayed::Job.create!(job_group_id: job_group.id) }
303314
let!(:running_job) { Delayed::Job.create!(job_group_id: job_group.id, locked_at: Time.now, locked_by: 'test') }
315+
let(:before_hook) {}
316+
let(:on_cancellation_job) { 'dummy job' }
317+
let(:on_cancellation_job_options) do
318+
{ foo: 'bar' }
319+
end
320+
let(:cancel) { true }
304321

305322
before do
306-
job_group.cancel
323+
job_group.cancel if cancel
307324
end
308325

309326
it "destroys the job group" do
@@ -317,6 +334,21 @@
317334
it "does not destroy running jobs" do
318335
expect(running_job).not_to have_been_destroyed
319336
end
337+
338+
context "when already cancelled" do
339+
let(:cancel) { false }
340+
341+
it "skips cancel block if already cancelled" do
342+
other = Delayed::JobGroups::JobGroup.find(job_group.id)
343+
job_group.cancel
344+
345+
other.cancel
346+
other.cancel
347+
348+
expect(Delayed::Job)
349+
.to have_received(:enqueue).with(on_cancellation_job, on_cancellation_job_options).once
350+
end
351+
end
320352
end
321353

322354
describe "#failure_cancels_group?" do

0 commit comments

Comments
 (0)