class DeepTest::ProcessOrchestrator

Public Class Methods

new(options, workers, runner) click to toggle source
# File lib/deep_test/process_orchestrator.rb, line 7
def initialize(options, workers, runner)
  @options = options
  @runner = runner
  @workers = workers
end
run(options, workers, runner) click to toggle source
# File lib/deep_test/process_orchestrator.rb, line 3
def self.run(options, workers, runner)
  new(options, workers, runner).run
end

Public Instance Methods

run(exit_when_done = true) click to toggle source
# File lib/deep_test/process_orchestrator.rb, line 13
def run(exit_when_done = true)
  passed = false

  begin
    server = Server.start(@options)
    @options.new_listener_list.before_starting_workers
    @workers.start_all
    begin
      DeepTest.logger.debug "Loader Starting (#{$$})"
      passed = @runner.process_work_units
    ensure
      shutdown(server)
    end
  ensure
    DeepTest.logger.debug "ProcessOrchestrator: Stopping Server"
    Server.stop
  end

  Kernel.exit(passed ? 0 : 1) if exit_when_done
end
shutdown(server) click to toggle source
# File lib/deep_test/process_orchestrator.rb, line 34
def shutdown(server)
  DeepTest.logger.debug "ProcessOrchestrator: Shutting Down"
  server.done_with_work

  first_exception = $!
  begin
    DeepTest.logger.debug "ProcessOrchestrator: Stopping Workers"
    @workers.stop_all
  rescue DRb::DRbConnError
    # Workers must have already stopped
  rescue Exception => e
    raise first_exception || e
  end
end