Skip to content

Commit d7955da

Browse files
committed
Simplify passing options or file to configuration
1 parent 46745d1 commit d7955da

File tree

8 files changed

+36
-27
lines changed

8 files changed

+36
-27
lines changed

lib/solid_queue/cli.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def self.exit_on_failure?
1414
default_command :start
1515

1616
def start
17-
SolidQueue::Supervisor.start(load_configuration_from: options["config_file"])
17+
SolidQueue::Supervisor.start(config_file: options["config_file"])
1818
end
1919
end
2020
end

lib/solid_queue/configuration.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ def instantiate
2828
dispatchers: [ DISPATCHER_DEFAULTS ]
2929
}
3030

31-
def initialize(load_from: nil)
32-
@raw_config = config_from(load_from)
31+
def initialize(config_file: nil, **options)
32+
@raw_config = config_from(config_file || options.presence)
3333
end
3434

3535
def configured_processes

lib/solid_queue/supervisor.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ class Supervisor < Processes::Base
66
include Maintenance, Signals, Pidfiled
77

88
class << self
9-
def start(load_configuration_from: nil)
9+
def start(**options)
1010
SolidQueue.supervisor = true
11-
configuration = Configuration.new(load_from: load_configuration_from)
11+
configuration = Configuration.new(**options)
1212

1313
if configuration.configured_processes.any?
1414
new(configuration).tap(&:start)

test/integration/concurrency_controls_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class ConcurrencyControlsTest < ActiveSupport::TestCase
1111
default_worker = { queues: "default", polling_interval: 0.1, processes: 3, threads: 2 }
1212
dispatcher = { polling_interval: 0.1, batch_size: 200, concurrency_maintenance_interval: 1 }
1313

14-
@pid = run_supervisor_as_fork(load_configuration_from: { workers: [ default_worker ], dispatchers: [ dispatcher ] })
14+
@pid = run_supervisor_as_fork(workers: [ default_worker ], dispatchers: [ dispatcher ])
1515

1616
wait_for_registered_processes(5, timeout: 0.5.second) # 3 workers working the default queue + dispatcher + supervisor
1717
end

test/integration/lifecycle_hooks_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class LifecycleHooksTest < ActiveSupport::TestCase
1212
SolidQueue.on_worker_start { JobResult.create!(status: :hook_called, value: :worker_start) }
1313
SolidQueue.on_worker_stop { JobResult.create!(status: :hook_called, value: :worker_stop) }
1414

15-
pid = run_supervisor_as_fork(load_configuration_from: { workers: [ { queues: "*" } ] })
15+
pid = run_supervisor_as_fork(workers: [ { queues: "*" } ])
1616
wait_for_registered_processes(4)
1717

1818
terminate_process(pid)

test/integration/processes_lifecycle_test.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class ProcessesLifecycleTest < ActiveSupport::TestCase
77

88
setup do
99
config_as_hash = { workers: [ { queues: :background }, { queues: :default, threads: 5 } ], dispatchers: [] }
10-
@pid = run_supervisor_as_fork(load_configuration_from: config_as_hash)
10+
@pid = run_supervisor_as_fork(config_as_hash)
1111

1212
wait_for_registered_processes(3, timeout: 3.second)
1313
assert_registered_workers_for(:background, :default, supervisor_pid: @pid)

test/unit/configuration_test.rb

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,23 @@ class ConfigurationTest < ActiveSupport::TestCase
77
end
88

99
assert_equal 2, configuration.configured_processes.count
10-
assert_processes configuration, :worker, 1, queues: [ "*" ]
10+
assert_processes configuration, :worker, 1, queues: "*"
1111
assert_processes configuration, :dispatcher, 1, batch_size: SolidQueue::Configuration::DISPATCHER_DEFAULTS[:batch_size]
1212
end
1313

1414
test "default configuration when config given doesn't include any configuration" do
15-
configuration = SolidQueue::Configuration.new(load_from: { random_wrong_key: :random_value })
15+
configuration = SolidQueue::Configuration.new(random_wrong_key: :random_value)
1616

1717
assert_equal 2, configuration.configured_processes.count
18-
assert_processes configuration, :worker, 1, queues: [ "*" ]
18+
assert_processes configuration, :worker, 1, queues: "*"
1919
assert_processes configuration, :dispatcher, 1, batch_size: SolidQueue::Configuration::DISPATCHER_DEFAULTS[:batch_size]
2020
end
2121

2222
test "default configuration when config given is empty" do
23-
configuration = SolidQueue::Configuration.new(load_from: {})
23+
configuration = SolidQueue::Configuration.new(config_file: Rails.root.join("config/empty_configuration.yml"))
2424

2525
assert_equal 2, configuration.configured_processes.count
26-
assert_processes configuration, :worker, 1, queues: [ "*" ]
26+
assert_processes configuration, :worker, 1, queues: "*"
2727
assert_processes configuration, :dispatcher, 1, batch_size: SolidQueue::Configuration::DISPATCHER_DEFAULTS[:batch_size]
2828
end
2929

@@ -34,17 +34,22 @@ class ConfigurationTest < ActiveSupport::TestCase
3434
assert_processes configuration, :dispatcher, 1
3535
end
3636

37+
test "read configuration from provided file" do
38+
configuration = SolidQueue::Configuration.new(config_file: Rails.root.join("config/alternative_configuration.yml"))
39+
40+
assert 3, configuration.configured_processes.count
41+
assert_processes configuration, :worker, 3, processes: 1, polling_interval: 0.1, queues: %w[ queue_1 queue_2 queue_3 ], threads: [ 1, 2, 3 ]
42+
end
43+
3744
test "provide configuration as a hash and fill defaults" do
3845
background_worker = { queues: "background", polling_interval: 10 }
3946
dispatcher = { batch_size: 100 }
40-
config_as_hash = { workers: [ background_worker, background_worker ], dispatchers: [ dispatcher ] }
41-
configuration = SolidQueue::Configuration.new(load_from: config_as_hash)
47+
configuration = SolidQueue::Configuration.new(workers: [ background_worker, background_worker ], dispatchers: [ dispatcher ])
4248

4349
assert_processes configuration, :dispatcher, 1, polling_interval: SolidQueue::Configuration::DISPATCHER_DEFAULTS[:polling_interval], batch_size: 100
44-
assert_processes configuration, :worker, 2, queues: [ "background" ], polling_interval: 10
50+
assert_processes configuration, :worker, 2, queues: "background", polling_interval: 10
4551

46-
config_as_hash = { workers: [ background_worker, background_worker ] }
47-
configuration = SolidQueue::Configuration.new(load_from: config_as_hash)
52+
configuration = SolidQueue::Configuration.new(workers: [ background_worker, background_worker ])
4853

4954
assert_processes configuration, :dispatcher, 0
5055
assert_processes configuration, :worker, 2
@@ -57,20 +62,24 @@ class ConfigurationTest < ActiveSupport::TestCase
5762

5863
test "mulitple workers with the same configuration" do
5964
background_worker = { queues: "background", polling_interval: 10, processes: 3 }
60-
config_as_hash = { workers: [ background_worker ] }
61-
configuration = SolidQueue::Configuration.new(load_from: config_as_hash)
65+
configuration = SolidQueue::Configuration.new(workers: [ background_worker ])
6266

6367
assert_equal 3, configuration.configured_processes.count
64-
assert_processes configuration, :worker, 3, queues: [ "background" ], polling_interval: 10
68+
assert_processes configuration, :worker, 3, queues: "background", polling_interval: 10
6569
end
6670

6771
private
6872
def assert_processes(configuration, kind, count, **attributes)
69-
processes = configuration.configured_processes.select { |p| p.kind == kind }.map(&:instantiate)
73+
processes = configuration.configured_processes.select { |p| p.kind == kind }
7074
assert_equal count, processes.size
7175

72-
attributes.each do |attr, value|
73-
assert_equal value, processes.map { |p| p.public_send(attr) }.first
76+
attributes.each do |attr, expected_value|
77+
value = processes.map { |p| p.attributes.fetch(attr) }
78+
unless expected_value.is_a?(Array)
79+
value = value.first
80+
end
81+
82+
assert_equal expected_value, value
7483
end
7584
end
7685
end

test/unit/supervisor_test.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class SupervisorTest < ActiveSupport::TestCase
2929

3030
test "start with provided configuration" do
3131
config_as_hash = { workers: [], dispatchers: [ { batch_size: 100 } ] }
32-
pid = run_supervisor_as_fork(load_configuration_from: config_as_hash)
32+
pid = run_supervisor_as_fork(config_as_hash)
3333
wait_for_registered_processes(2, timeout: 2) # supervisor + dispatcher
3434

3535
assert_registered_supervisor(pid)
@@ -44,7 +44,7 @@ class SupervisorTest < ActiveSupport::TestCase
4444
test "start with empty configuration" do
4545
config_as_hash = { workers: [], dispatchers: [] }
4646

47-
pid = run_supervisor_as_fork(load_configuration_from: config_as_hash)
47+
pid = run_supervisor_as_fork(config_as_hash)
4848
sleep(0.5)
4949
assert_no_registered_processes
5050

@@ -116,7 +116,7 @@ class SupervisorTest < ActiveSupport::TestCase
116116
workers: [ { queues: "background", polling_interval: 10, processes: 2 } ],
117117
dispatchers: []
118118
}
119-
pid = run_supervisor_as_fork(load_configuration_from: config_as_hash)
119+
pid = run_supervisor_as_fork(config_as_hash)
120120
wait_for_registered_processes(3)
121121
assert_registered_supervisor(pid)
122122

0 commit comments

Comments
 (0)