Skip to content

Commit 61ccaad

Browse files
klenisrosa
authored andcommitted
Add option to limit clearing of jobs to specific class name(s)
1 parent 9f7b3e8 commit 61ccaad

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

app/models/solid_queue/job/clearable.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ module Clearable
66
extend ActiveSupport::Concern
77

88
included do
9-
scope :clearable, ->(finished_before: SolidQueue.clear_finished_jobs_after.ago) { where.not(finished_at: nil).where(finished_at: ...finished_before) }
9+
scope :clearable, ->(finished_before: SolidQueue.clear_finished_jobs_after.ago, class_name: nil) { where.not(finished_at: nil).where(finished_at: ...finished_before).where(class_name.present? ? { class_name: class_name } : {}) }
1010
end
1111

1212
class_methods do
13-
def clear_finished_in_batches(batch_size: 500, finished_before: SolidQueue.clear_finished_jobs_after.ago)
13+
def clear_finished_in_batches(batch_size: 500, finished_before: SolidQueue.clear_finished_jobs_after.ago, class_name: nil)
1414
loop do
15-
records_deleted = clearable(finished_before: finished_before).limit(batch_size).delete_all
15+
records_deleted = clearable(finished_before: finished_before, class_name: class_name).limit(batch_size).delete_all
1616
break if records_deleted == 0
1717
end
1818
end

test/integration/jobs_lifecycle_test.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,21 @@ class JobsLifecycleTest < ActiveSupport::TestCase
133133
SolidQueue::Job.clear_finished_in_batches
134134
end
135135
end
136+
137+
test "respect class name when clearing finished jobs" do
138+
10.times { AddToBufferJob.perform_later(2) }
139+
10.times { RaisingJob.perform_later(RuntimeError, "A") }
140+
jobs = SolidQueue::Job.all
141+
142+
jobs.each(&:finished!)
143+
144+
travel_to 3.days.from_now
145+
146+
SolidQueue::Job.clear_finished_in_batches(class_name: "AddToBufferJob")
147+
148+
assert_equal 0, SolidQueue::Job.where(class_name: "AddToBufferJob").count
149+
assert_equal 10, SolidQueue::Job.where(class_name: "RaisingJob").count
150+
end
136151

137152
private
138153
def deleting_finished_jobs

0 commit comments

Comments
 (0)