class Thrift::ThreadPoolServer
Public Class Methods
new(processor, server_transport, transport_factory=nil, protocol_factory=nil, num=20)
click to toggle source
Calls superclass method
Thrift::BaseServer.new
# File build/evernote-mode-24BFFK/evernote-mode-0.41/ruby/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 build/evernote-mode-24BFFK/evernote-mode-0.41/ruby/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 build/evernote-mode-24BFFK/evernote-mode-0.41/ruby/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