Class: RightSpeed::Worker::Fair

Inherits:
Base
  • Object
show all
Defined in:
lib/right_speed/worker/fair.rb

Instance Attribute Summary

Attributes inherited from Base

#ractor

Instance Method Summary collapse

Methods inherited from Base

#initialize, #stop

Constructor Details

This class inherits a constructor from RightSpeed::Worker::Base

Instance Method Details

#process(conn) ⇒ Object



25
26
27
# File 'lib/right_speed/worker/fair.rb', line 25

def process(conn)
  raise "BUG: Worker::Fair#process should never be called"
end

#run(listener_ractor) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/right_speed/worker/fair.rb', line 7

def run(listener_ractor)
  @ractor = Ractor.new(@id, @handler, listener_ractor) do |id, handler, listener|
    logger = RightSpeed.logger
    while conn = listener.take
      begin
        handler.session(conn).process
        # TODO: keep-alive?
        Ractor.yield(conn, move: true) # to yield closing connections to ConnectionCloser
      rescue => e
        logger.error { "Unexpected error: #{e.message}\n" + e.backtrace.map{"\t#{_1}\n"}.join }
        # TODO: print backtrace in better way
      end
    end
    logger.info { "Worker#{id}: Finishing the Ractor" }
    Ractor.yield(:closing) # to tell the outgoing path will be closed when stopping
  end
end

#waitObject



29
30
31
32
# File 'lib/right_speed/worker/fair.rb', line 29

def wait
  # nothing to wait - @ractor.take consumes closed connections unexpectedly
  # @ractor.wait ?
end