[ https://issues.apache.org/jira/browse/THRIFT-638?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Nicholas Telford updated THRIFT-638: ------------------------------------ Attachment: thrift-tsocket-638-0003.patch Some digging revealed that stream_socket_recv() and stream_socket_sendto() do not respect timeouts, as Chris mentioned earlier. From http://php.net/stream_set_timeout: bq. This function doesn't work with advanced operations like stream_socket_recvfrom(), use stream_select() with timeout parameter instead. The attached patch is a fairly major refactoring of TSocket to use stream_select() for timeout detection. From what I can tell it works fine, although there may be issues with TFramedTransport. I have yet to figure out an effective way to test changes. It should also be a little more robust for writing large chunks of data as write() will now block until all the data has been sent. Would seriously appreciate any testing people contribute. > BufferedTransport + C extensions block until recv timeout is reached on last > fread call > --------------------------------------------------------------------------------------- > > Key: THRIFT-638 > URL: https://issues.apache.org/jira/browse/THRIFT-638 > Project: Thrift > Issue Type: Bug > Components: PHP - Library > Affects Versions: 0.2 > Reporter: Chris Goffinet > Fix For: 0.7 > > Attachments: 0001-Replace-freads-with-stream_socket_recvfrom.patch, > 0002-tocket-read-meta-data-check.diff, thrift-tsocket-638-0002.patch, > thrift-tsocket-638-0003.patch, thrift-tsocket-638.patch > > > I wanted to throw this out if any other folks experience this later on. At > Digg we've been using the BufferedTransport + C extension of Thrift in PHP. > Every so often, we will see spikes in latency increases on RPC calls that we > know have acceptable response times (<200ms). This seems to happen based on > how much data is being sent back over the wire. This is more of a PHP > problem, but can be corrected in Thrift's PHP library for folks who don't > want to upgrade PHP. I am still waiting to see if it's corrected in later > versions (we use 5.2.9). > http://bonsai.php.net/bug.php?id=42720 > Replacing the fread statements in TSocket.php with stream_socket_recvfrom > correct this behavior so that calls do not wait until they hit the recv > timeout. -- This message is automatically generated by JIRA. - For more information on JIRA, see: http://www.atlassian.com/software/jira