Closed
Description
Hey there, I'm testing out the queue priorities in solid queue. My queue.yml
is as follows:
default: &default
dispatchers:
- polling_interval: 1
batch_size: 500
workers:
- queues: [urgent*, semi_urgent*, default*, low*]
threads: 1
processes: 1
polling_interval: 0.1
development:
<<: *default
test:
<<: *default
production:
<<: *default
I also have 3 test jobs for each queue priority level - A, B and C:
# Testing a low priority job A
module TestSqJobs
class LowPriorityJobA < ActiveJob::Base
self.queue_adapter = :solid_queue
queue_as :low_A
def priority
0
end
def perform
sleep(1)
end
end
end
Finally, I execute each job 5 times using the following ruby code:
job_classes = [
TestSqJobs::SemiUrgentPriorityJobA,
TestSqJobs::SemiUrgentPriorityJobB,
TestSqJobs::SemiUrgentPriorityJobC,
TestSqJobs::UrgentPriorityJobA,
TestSqJobs::UrgentPriorityJobB,
TestSqJobs::UrgentPriorityJobC,
TestSqJobs::DefaultPriorityJobA,
TestSqJobs::DefaultPriorityJobB,
TestSqJobs::DefaultPriorityJobC,
TestSqJobs::LowPriorityJobA,
TestSqJobs::LowPriorityJobB,
TestSqJobs::LowPriorityJobC
]
job_classes.each do |job_class|
5.times do |i|
begin
job_class.perform_later
puts "Enqueued #{job_class} instance #{i + 1}"
rescue ArgumentError => e
puts "Skipping #{job_class} due to missing arguments: #{e.message}"
end
end
end
puts "Successfully enqueued 5 instances of each TestSqJobs job where possible."
I've observed this on mission control, and it seems like not all the jobs with the urgent prefix gets fulfilled first. Here's a screenshot of my observations:

We can see that jobs are taking from the default
and semi_urgent
queue instead of clearing out the job queues with the urgent
prefix.
Metadata
Metadata
Assignees
Labels
No labels