Parent

Thrift::ThreadPoolServer

Public Class Methods

new(processor, server_transport, transport_factory=nil, protocol_factory=nil, num=20) click to toggle source
# File lib/thrift/server/thread_pool_server.rb, line 24
def initialize(processor, server_transport, transport_factory=nil, protocol_factory=nil, num=20)
  super(processor, server_transport, transport_factory, protocol_factory)
  @thread_q = SizedQueue.new(num)
  @exception_q = Queue.new
  @running = false
end

Public Instance Methods

rescuable_serve() click to toggle source

exceptions that happen in worker threads will be relayed here and must be caught. 'retry' can be used to continue. (threads will continue to run while the exception is being handled.)

# File lib/thrift/server/thread_pool_server.rb, line 34
def rescuable_serve
  Thread.new { serve } unless @running
  @running = true
  raise @exception_q.pop
end
serve() click to toggle source

exceptions that happen in worker threads simply cause that thread to die and another to be spawned in its place.

# File lib/thrift/server/thread_pool_server.rb, line 42
def serve
  @server_transport.listen

  begin
    loop do
      @thread_q.push(:token)
      Thread.new do
        begin
          loop do
            client = @server_transport.accept
            trans = @transport_factory.get_transport(client)
            prot = @protocol_factory.get_protocol(trans)
            begin
              loop do
                @processor.process(prot, prot)
              end
            rescue Thrift::TransportException, Thrift::ProtocolException => e
            ensure
              trans.close
            end
          end
        rescue => e
          @exception_q.push(e)
        ensure
          @thread_q.pop # thread died!
        end
      end
    end
  ensure
    @server_transport.close
  end
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.