Class: ActiveSupport::Testing::Parallelization::Worker
Relationships & Source Files | |
Inherits: | Object |
Defined in: | activesupport/lib/active_support/testing/parallelization/worker.rb |
Class Method Summary
- .new(number, url) ⇒ Worker constructor
Instance Method Summary
Constructor Details
.new(number, url) ⇒ Worker
# File 'activesupport/lib/active_support/testing/parallelization/worker.rb', line 7
def initialize(number, url) @id = SecureRandom.uuid @number = number @url = url @setup_exception = nil end
Instance Method Details
#add_setup_exception(result) (private)
[ GitHub ]#after_fork
[ GitHub ]# File 'activesupport/lib/active_support/testing/parallelization/worker.rb', line 80
def after_fork Parallelization.after_fork_hooks.each do |cb| cb.call(@number) end end
#perform_job(job)
[ GitHub ]# File 'activesupport/lib/active_support/testing/parallelization/worker.rb', line 42
def perform_job(job) klass = job[0] method = job[1] reporter = job[2] set_process_title("#{klass}##{method}") result = klass.with_info_handler reporter do Minitest.run_one_method(klass, method) end safe_record(reporter, result) end
#run_cleanup
[ GitHub ]# File 'activesupport/lib/active_support/testing/parallelization/worker.rb', line 86
def run_cleanup Parallelization.run_cleanup_hooks.each do |cb| cb.call(@number) end end
#safe_record(reporter, result)
[ GitHub ]# File 'activesupport/lib/active_support/testing/parallelization/worker.rb', line 56
def safe_record(reporter, result) add_setup_exception(result) if @setup_exception begin @queue.record(reporter, result) rescue DRb::DRbConnError result.failures.map! do |failure| if failure.respond_to?(:error) # minitest >5.14.0 error = DRb::DRbRemoteError.new(failure.error) else error = DRb::DRbRemoteError.new(failure.exception) end Minitest::UnexpectedError.new(error) end @queue.record(reporter, result) rescue Interrupt @queue.interrupt raise end set_process_title("(idle)") end
#set_process_title(status) (private)
[ GitHub ]# File 'activesupport/lib/active_support/testing/parallelization/worker.rb', line 97
def set_process_title(status) Process.setproctitle("Rails test worker #{@number} - #{status}") end
#start
[ GitHub ]# File 'activesupport/lib/active_support/testing/parallelization/worker.rb', line 14
def start fork do set_process_title("(starting)") DRb.stop_service @queue = DRbObject.new_with_uri(@url) @queue.start_worker(@id) begin after_fork rescue => @setup_exception; end work_from_queue ensure set_process_title("(stopping)") run_cleanup @queue.stop_worker(@id) end end
#work_from_queue
[ GitHub ]# File 'activesupport/lib/active_support/testing/parallelization/worker.rb', line 36
def work_from_queue while job = @queue.pop perform_job(job) end end