Sha256: 432f059e87232df3a114b5da6a90d289784ba0d25f8442727818f69fcc42e4da

Contents?: true

Size: 1.56 KB

Versions: 8

Compression:

Stored size: 1.56 KB

Contents

module DeepTest
  class Worker
    attr_reader :number

    def initialize(number, blackboard, worker_listener)
      @number = number
      @blackboard = blackboard
      @listener = worker_listener
    end

    def run
      @listener.starting(self)
      while work_unit = next_work_unit
        @listener.starting_work(self, work_unit)

        result = begin
                   work_unit.run
                 rescue Exception => error
                   Error.new(work_unit, error)
                 end

        @listener.finished_work(self, work_unit, result)
        @blackboard.write_result result
        if ENV['DEEP_TEST_SHOW_WORKER_DOTS'] == 'yes'
          $stdout.print '.'
          $stdout.flush
        end
      end
    rescue Server::NoWorkUnitsRemainingError
      DeepTest.logger.debug("Worker #{number}: no more work to do")
    rescue Exception => e
      DeepTest.logger.debug "Worker #{number} EXCEPTION: #{e.message}\n#{e.backtrace.join("\n")}"
      raise
    end

    def next_work_unit
      DeepTest.logger.debug "Worker #{number} getting next work unit from: #{@blackboard.inspect}"
      @blackboard.take_work
    rescue Server::NoWorkUnitsAvailableError
      sleep 0.02
      retry
    end

    class Error
      attr_accessor :work_unit, :error

      def initialize(work_unit, error)
        @work_unit, @error = work_unit, error
      end

      def ==(other)
        work_unit == other.work_unit &&
            error == other.error
      end

      def to_s
        "#{@work_unit}: #{@error}\n" + (@error.backtrace || []).join("\n")
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
jason-o-matic-deep_test-1.2.2.10 lib/deep_test/worker.rb
jason-o-matic-deep_test-1.2.2.11 lib/deep_test/worker.rb
jason-o-matic-deep_test-1.2.2.12 lib/deep_test/worker.rb
jason-o-matic-deep_test-1.2.2.13 lib/deep_test/worker.rb
jason-o-matic-deep_test-1.2.2.14 lib/deep_test/worker.rb
jason-o-matic-deep_test-1.2.2.5 lib/deep_test/worker.rb
jason-o-matic-deep_test-1.2.2.6 lib/deep_test/worker.rb
jason-o-matic-deep_test-1.2.2.15 lib/deep_test/worker.rb