diff --git a/app/models/solid_queue/execution/dispatching.rb b/app/models/solid_queue/execution/dispatching.rb index c7b9b479..b034bb44 100644 --- a/app/models/solid_queue/execution/dispatching.rb +++ b/app/models/solid_queue/execution/dispatching.rb @@ -9,6 +9,7 @@ module Dispatching def dispatch_jobs(job_ids) jobs = Job.where(id: job_ids) + # Dispatcher Lifecycle - 7 - Dispatches jobs and then deletes from executions Job.dispatch_all(jobs).map(&:id).then do |dispatched_job_ids| where(id: where(job_id: dispatched_job_ids).pluck(:id)).delete_all end diff --git a/app/models/solid_queue/job/executable.rb b/app/models/solid_queue/job/executable.rb index b0a4cb93..3d2d68bc 100644 --- a/app/models/solid_queue/job/executable.rb +++ b/app/models/solid_queue/job/executable.rb @@ -23,6 +23,7 @@ def prepare_all_for_execution(jobs) end def dispatch_all(jobs) + # Dispatcher Lifecycle - 8 - Dispatches jobs with and without concurrency limits with_concurrency_limits, without_concurrency_limits = jobs.partition(&:concurrency_limited?) dispatch_all_at_once(without_concurrency_limits) diff --git a/app/models/solid_queue/scheduled_execution.rb b/app/models/solid_queue/scheduled_execution.rb index f2159422..2f3fd83e 100644 --- a/app/models/solid_queue/scheduled_execution.rb +++ b/app/models/solid_queue/scheduled_execution.rb @@ -13,6 +13,7 @@ class ScheduledExecution < Execution class << self def dispatch_next_batch(batch_size) transaction do + # Dispatcher Lifecycle - 6 - Finds the next available jobs and dispatches them job_ids = next_batch(batch_size).non_blocking_lock.pluck(:job_id) if job_ids.empty? then 0 else diff --git a/lib/solid_queue/dispatcher.rb b/lib/solid_queue/dispatcher.rb index 1583e1dd..546496f3 100644 --- a/lib/solid_queue/dispatcher.rb +++ b/lib/solid_queue/dispatcher.rb @@ -29,6 +29,7 @@ def metadata attr_reader :concurrency_maintenance def poll + # Dispatcher Lifecycle - 4 - Dispatching next batch batch = dispatch_next_batch batch.zero? ? polling_interval : 0.seconds @@ -36,6 +37,7 @@ def poll def dispatch_next_batch with_polling_volume do + # Dispatcher Lifecycle - 5 - Dispatching next batch ScheduledExecution.dispatch_next_batch(batch_size) end end diff --git a/lib/solid_queue/processes/poller.rb b/lib/solid_queue/processes/poller.rb index 75df6104..13dc2f1a 100644 --- a/lib/solid_queue/processes/poller.rb +++ b/lib/solid_queue/processes/poller.rb @@ -18,6 +18,7 @@ def metadata private def run + # Dispatcher Lifecycle - 2 - Polling loop started start_loop end @@ -26,6 +27,7 @@ def start_loop break if shutting_down? delay = wrap_in_app_executor do + # Dispatcher Lifecycle - 3 - Polling loop poll end diff --git a/lib/solid_queue/processes/runnable.rb b/lib/solid_queue/processes/runnable.rb index 33b441f6..6c0b8b12 100644 --- a/lib/solid_queue/processes/runnable.rb +++ b/lib/solid_queue/processes/runnable.rb @@ -7,6 +7,7 @@ module Runnable attr_writer :mode def start + # Dispatcher Lifecycle - 1 - Dispatcher started boot if running_async?