Skip to content

Commit f5e63a1

Browse files
committed
Refactor a bit the concurrency maintenance and stub recurring tasks
In the dispatcher and the configuration.
1 parent 5e82dbf commit f5e63a1

File tree

6 files changed

+41
-16
lines changed

6 files changed

+41
-16
lines changed

lib/solid_queue/configuration.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ class Configuration
1212
DISPATCHER_DEFAULTS = {
1313
batch_size: 500,
1414
polling_interval: 1,
15-
concurrency_clerk: true,
16-
concurrency_maintenance_interval: 600
15+
concurrency_maintenance: true,
16+
concurrency_maintenance_interval: 600,
17+
recurring_tasks: []
1718
}
1819

1920
def initialize(mode: :work, load_from: nil)

lib/solid_queue/dispatcher.rb

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,19 @@ module SolidQueue
44
class Dispatcher < Processes::Base
55
include Processes::Runnable, Processes::Poller
66

7-
attr_accessor :batch_size, :concurrency_clerk
7+
attr_accessor :batch_size, :concurrency_maintenance, :recurring_tasks
88

9-
after_boot :launch_concurrency_maintenance, if: :concurrency_clerk?
10-
before_shutdown :stop_concurrency_maintenance, if: :concurrency_clerk?
9+
after_boot :start_concurrency_maintenance, :schedule_recurring_tasks
10+
before_shutdown :stop_concurrency_maintenance, :unschedule_recurring_tasks
1111

1212
def initialize(**options)
1313
options = options.dup.with_defaults(SolidQueue::Configuration::DISPATCHER_DEFAULTS)
1414

1515
@batch_size = options[:batch_size]
1616
@polling_interval = options[:polling_interval]
1717

18-
@concurrency_clerk = ConcurrencyClerk.new(options[:concurrency_maintenance_interval], options[:batch_size]) if options[:concurrency_clerk]
18+
@concurrency_maintenance = ConcurrencyMaintenance.new(options[:concurrency_maintenance_interval], options[:batch_size]) if options[:concurrency_maintenance]
19+
@recurring_tasks = RecurringTasks.new(options[:recurring_tasks])
1920
end
2021

2122
private
@@ -34,20 +35,24 @@ def dispatch_next_batch
3435
end
3536
end
3637

37-
def concurrency_clerk?
38-
concurrency_clerk.present?
38+
def start_concurrency_maintenance
39+
concurrency_maintenance&.start
3940
end
4041

41-
def launch_concurrency_maintenance
42-
concurrency_clerk.start
42+
def schedule_recurring_tasks
43+
recurring_tasks.schedule
4344
end
4445

4546
def stop_concurrency_maintenance
46-
concurrency_clerk.stop
47+
concurrency_maintenance&.stop
48+
end
49+
50+
def unschedule_recurring_tasks
51+
recurring_tasks.unschedule
4752
end
4853

4954
def metadata
50-
super.merge(batch_size: batch_size, concurrency_maintenance_interval: concurrency_clerk&.interval)
55+
super.merge(batch_size: batch_size, concurrency_maintenance_interval: concurrency_maintenance&.interval)
5156
end
5257
end
5358
end

lib/solid_queue/dispatcher/concurrency_clerk.rb renamed to lib/solid_queue/dispatcher/concurrency_maintenance.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# frozen_string_literal: true
22

33
module SolidQueue
4-
class Dispatcher::ConcurrencyClerk
4+
class Dispatcher::ConcurrencyMaintenance
55
include AppExecutor
66

77
attr_reader :interval, :batch_size
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# frozen_string_literal: true
2+
3+
module SolidQueue
4+
class Dispatcher::RecurringTasks
5+
include AppExecutor
6+
7+
attr_reader :interval, :batch_size
8+
9+
def initialize(configured_tasks)
10+
@configured_tasks = configured_tasks
11+
end
12+
13+
def schedule
14+
end
15+
16+
def unschedule
17+
end
18+
end
19+
end

test/unit/configuration_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class ConfigurationTest < ActiveSupport::TestCase
3131
assert_equal 1, configuration.dispatchers.count
3232
dispatcher = configuration.dispatchers.first
3333
assert_equal SolidQueue::Configuration::DISPATCHER_DEFAULTS[:polling_interval], dispatcher.polling_interval
34-
assert_equal SolidQueue::Configuration::DISPATCHER_DEFAULTS[:concurrency_maintenance_interval], dispatcher.concurrency_clerk.interval
34+
assert_equal SolidQueue::Configuration::DISPATCHER_DEFAULTS[:concurrency_maintenance_interval], dispatcher.concurrency_maintenance.interval
3535

3636
assert_equal 2, configuration.workers.count
3737
assert_equal [ "background" ], configuration.workers.flat_map(&:queues).uniq

test/unit/dispatcher_test.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ class DispatcherTest < ActiveSupport::TestCase
2424
end
2525

2626
test "concurrency maintenance is optional" do
27-
no_concurrency_clerk = SolidQueue::Dispatcher.new(polling_interval: 0.1, batch_size: 10, concurrency_clerk: false)
28-
no_concurrency_clerk.start
27+
no_concurrency_maintenance_dispatcher = SolidQueue::Dispatcher.new(polling_interval: 0.1, batch_size: 10, concurrency_maintenance: false)
28+
no_concurrency_maintenance_dispatcher.start
2929

3030
wait_for_registered_processes(1, timeout: 1.second)
3131

0 commit comments

Comments
 (0)