123456789_123456789_123456789_123456789_123456789_

Class: ActiveSupport::Testing::Parallelization::Server

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Instance Chain:
self, DRb::DRbUndumped
Inherits: Object
Defined in: activesupport/lib/active_support/testing/parallelization/server.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.newServer

[ GitHub ]

  
# File 'activesupport/lib/active_support/testing/parallelization/server.rb', line 12

def initialize
  @queue = Queue.new
  @active_workers = Concurrent::Map.new
  @in_flight = Concurrent::Map.new
end

Instance Attribute Details

#active_workers?Boolean (readonly)

[ GitHub ]

  
# File 'activesupport/lib/active_support/testing/parallelization/server.rb', line 48

def active_workers?
  @active_workers.size > 0
end

Instance Method Details

#<<(o)

[ GitHub ]

  
# File 'activesupport/lib/active_support/testing/parallelization/server.rb', line 28

def <<(o)
  o[2] = DRbObject.new(o[2]) if o
  @queue << o
end

#pop

[ GitHub ]

  
# File 'activesupport/lib/active_support/testing/parallelization/server.rb', line 33

def pop
  if test = @queue.pop
    @in_flight[[test[0].to_s, test[1]]] = test
    test
  end
end

#record(reporter, result)

Raises:

  • (DRb::DRbConnError)
[ GitHub ]

  
# File 'activesupport/lib/active_support/testing/parallelization/server.rb', line 18

def record(reporter, result)
  raise DRb::DRbConnError if result.is_a?(DRb::DRbUnknown)

  @in_flight.delete([result.klass, result.name])

  reporter.synchronize do
    reporter.record(result)
  end
end

#shutdown

[ GitHub ]

  
# File 'activesupport/lib/active_support/testing/parallelization/server.rb', line 52

def shutdown
  # Wait for initial queue to drain
  while @queue.length != 0
    sleep 0.1
  end

  @queue.close

  # Wait until all workers have finished
  while active_workers?
    sleep 0.1
  end

  @in_flight.values.each do |(klass, name, reporter)|
    result = Minitest::Result.from(klass.new(name))
    error = RuntimeError.new("result not reported")
    error.set_backtrace([""])
    result.failures << Minitest::UnexpectedError.new(error)
    reporter.synchronize do
      reporter.record(result)
    end
  end
end

#start_worker(worker_id)

[ GitHub ]

  
# File 'activesupport/lib/active_support/testing/parallelization/server.rb', line 40

def start_worker(worker_id)
  @active_workers[worker_id] = true
end

#stop_worker(worker_id)

[ GitHub ]

  
# File 'activesupport/lib/active_support/testing/parallelization/server.rb', line 44

def stop_worker(worker_id)
  @active_workers.delete(worker_id)
end