diff --git a/lib/solid_queue/configuration.rb b/lib/solid_queue/configuration.rb index 713db5c01..61a715d89 100644 --- a/lib/solid_queue/configuration.rb +++ b/lib/solid_queue/configuration.rb @@ -40,6 +40,11 @@ def scheduler end end + def max_number_of_threads + # At most pool_size thread in each worker + 1 thread for the worker + 1 thread for the heartbeat task + queues.values.map { |queue| queue[:pool_size] }.max + 2 + end + private attr_reader :raw_config, :mode diff --git a/lib/solid_queue/engine.rb b/lib/solid_queue/engine.rb index b207409b5..eebef7567 100644 --- a/lib/solid_queue/engine.rb +++ b/lib/solid_queue/engine.rb @@ -19,7 +19,7 @@ class Engine < ::Rails::Engine initializer "solid_queue.app_executor", before: :run_prepare_callbacks do |app| config.solid_queue.app_executor ||= app.executor - config.solid_queue.on_thread_error ||= -> (exception) { Rails.error.report(exception) } + config.solid_queue.on_thread_error ||= -> (exception) { Rails.error.report(exception, handled: false) } SolidQueue.app_executor = config.solid_queue.app_executor SolidQueue.on_thread_error = config.solid_queue.on_thread_error diff --git a/test/unit/configuration_test.rb b/test/unit/configuration_test.rb index fe3c9f208..ecfe307f2 100644 --- a/test/unit/configuration_test.rb +++ b/test/unit/configuration_test.rb @@ -15,4 +15,9 @@ class ConfigurationTest < ActiveSupport::TestCase assert_equal SolidQueue::Configuration::SCHEDULER_DEFAULTS[:polling_interval], configuration.scheduler.polling_interval assert configuration.workers.detect { |w| w.queue == "background" }.pool_size > 0 end + + test "max number of threads" do + configuration = SolidQueue::Configuration.new(mode: :all) + assert 7, configuration.max_number_of_threads + end end