From fb33ee70e07fc19378f1be7343b1c49223543f3e Mon Sep 17 00:00:00 2001 From: Rosa Gutierrez Date: Wed, 25 Oct 2023 22:43:10 +0200 Subject: [PATCH] Factor in paused queues when polling for ready jobs to claim --- app/models/solid_queue/ready_execution.rb | 3 ++- test/models/solid_queue/ready_execution_test.rb | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/models/solid_queue/ready_execution.rb b/app/models/solid_queue/ready_execution.rb index 8ce77303..2260989b 100644 --- a/app/models/solid_queue/ready_execution.rb +++ b/app/models/solid_queue/ready_execution.rb @@ -1,6 +1,7 @@ module SolidQueue class ReadyExecution < Execution scope :ordered, -> { order(priority: :asc) } + scope :not_paused, -> { where.not(queue_name: Pause.all_queue_names) } before_create :assume_attributes_from_job @@ -24,7 +25,7 @@ def queued_as(queues) private def query_candidates(queues, limit) - queued_as(queues).ordered.limit(limit).lock("FOR UPDATE SKIP LOCKED").pluck(:job_id) + queued_as(queues).not_paused.ordered.limit(limit).lock("FOR UPDATE SKIP LOCKED").pluck(:job_id) end def lock(job_ids) diff --git a/test/models/solid_queue/ready_execution_test.rb b/test/models/solid_queue/ready_execution_test.rb index aaf390c8..4d2abd50 100644 --- a/test/models/solid_queue/ready_execution_test.rb +++ b/test/models/solid_queue/ready_execution_test.rb @@ -67,6 +67,17 @@ class SolidQueue::ReadyExecutionTest < ActiveSupport::TestCase end end + test "claim jobs using a wildcard and having paused queues" do + other_jobs = SolidQueue::Job.all - @jobs + other_jobs.each(&:prepare_for_execution) + + SolidQueue::Queue.find_by_name("fixtures").pause + + assert_claimed_jobs(other_jobs.count) do + SolidQueue::ReadyExecution.claim("*", SolidQueue::Job.count + 1) + end + end + test "claim jobs using queue prefixes" do assert_claimed_jobs(2) do SolidQueue::ReadyExecution.claim("fix*", 2)