Skip to content

Commit

Permalink
Add an option to sleep between deleted batches when clearing jobs
Browse files Browse the repository at this point in the history
Useful for row-based replication setups where fast, big deletions can
cause problems.
  • Loading branch information
rosa committed Dec 19, 2024
1 parent 6f10ab3 commit 4e0255e
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 2 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ There are several settings that control how Solid Queue works that you can set a
- `silence_polling`: whether to silence Active Record logs emitted when polling for both workers and dispatchers—defaults to `true`.
- `supervisor_pidfile`: path to a pidfile that the supervisor will create when booting to prevent running more than one supervisor in the same host, or in case you want to use it for a health check. It's `nil` by default.
- `preserve_finished_jobs`: whether to keep finished jobs in the `solid_queue_jobs` table—defaults to `true`.
- `clear_finished_jobs_after`: period to keep finished jobs around, in case `preserve_finished_jobs` is true—defaults to 1 day. **Note:** Right now, there's no automatic cleanup of finished jobs. You'd need to do this by periodically invoking `SolidQueue::Job.clear_finished_in_batches`, but this will happen automatically in the near future.
- `clear_finished_jobs_after`: period to keep finished jobs around, in case `preserve_finished_jobs` is true—defaults to 1 day. **Note:** Right now, there's no automatic cleanup of finished jobs. You'd need to do this by periodically invoking `SolidQueue::Job.clear_finished_in_batches`, which can be configured as [a recurring task](#recurring-tasks).
- `default_concurrency_control_period`: the value to be used as the default for the `duration` parameter in [concurrency controls](#concurrency-controls). It defaults to 3 minutes.


Expand Down
3 changes: 2 additions & 1 deletion app/models/solid_queue/job/clearable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@ module Clearable
end

class_methods do
def clear_finished_in_batches(batch_size: 500, finished_before: SolidQueue.clear_finished_jobs_after.ago, class_name: nil)
def clear_finished_in_batches(batch_size: 500, finished_before: SolidQueue.clear_finished_jobs_after.ago, class_name: nil, sleep_between_batches: 0)
loop do
records_deleted = clearable(finished_before: finished_before, class_name: class_name).limit(batch_size).delete_all
sleep(sleep_between_batches) if sleep_between_batches > 0
break if records_deleted == 0
end
end
Expand Down

0 comments on commit 4e0255e

Please sign in to comment.