[ https://issues.apache.org/jira/browse/THRIFT-899?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12910323#action_12910323 ]
Ryan King commented on THRIFT-899: ---------------------------------- I can't get jira to upload a the patch as an attachment, so here it is pasted: diff --git a/lib/rb/lib/thrift/transport/socket.rb b/lib/rb/lib/thrift/transport/socket.rb index 06c937e..dd76036 100644 --- a/lib/rb/lib/thrift/transport/socket.rb +++ b/lib/rb/lib/thrift/transport/socket.rb @@ -97,12 +97,12 @@ module Thrift data = @handle.readpartial(sz) else # it's possible to interrupt select for something other than the timeout - # so we need to ensure we've waited long enough + # so we need to ensure we've waited long enough, but not too long start = Time.now - rd = nil # scoping - loop do - rd, = IO.select([...@handle], nil, nil, @timeout) - break if (rd and not rd.empty?) or Time.now - start >= @timeout + deadline = start + @timeout + rd = loop do + rd, = IO.select([...@handle], nil, nil, deadline - Time.now) + break rd if (rd and not rd.empty?) or Time.now >= deadline end if rd.nil? or rd.empty? raise TransportException.new(TransportException::TIMED_OUT, "Socket: Timed out reading #{sz} bytes from #...@desc}") > Ruby read timeouts can sometimes be 2x what they should be > ----------------------------------------------------------- > > Key: THRIFT-899 > URL: https://issues.apache.org/jira/browse/THRIFT-899 > Project: Thrift > Issue Type: Bug > Components: Ruby - Library > Affects Versions: 0.1, 0.2, 0.3, 0.4 > Reporter: Ryan King > > Thrift::Socket#read will sometimes fail to enforce a timeout properly and > wait approximately 2x @timeout before timing out the request. > Our testing via thrift_client (http://github.com/fauna/thrift_client) would > only fail about 1/20 of the time. My hypothesis is that it only fails when > you have a floating-point rounding error (we set the timeout to 0.8 seconds, > but the math gave us 0.7999, so we wait another 0.8 seconds). > The patch doesn't have any tests, because this problem is non-deterministic. > (also, I couldn't figure out how to run the tests) -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.