BaseServer
# 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
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
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
Generated with the Darkfish Rdoc Generator 2.