Chris Bannister created THRIFT-2488:
---------------------------------------

             Summary: Timeouts can leave client in unrecoverable state
                 Key: THRIFT-2488
                 URL: https://issues.apache.org/jira/browse/THRIFT-2488
             Project: Thrift
          Issue Type: Bug
          Components: Go - Library
            Reporter: Chris Bannister
         Attachments: testcase.go, timeout.thrift

If you set the timeout on a TSocket and experience a timeout the client will 
stop reading the struct and return the error as expected.

But if you use the TSocket again after the remote system has sent the timedout 
data and the client has received it the client will be unusable because it ends 
up in a state with incorrect sequence-ids and unexpected data in its buffer.

This means that the TSocket should be closed if there is any network level 
error when reading/writing.

This can also be fixed by making more attempts to read/write when the error is 
a net.Error and err.Temporary() is true. Could also do something where the 
client is persistently reading from the socket and discards out of order 
messages or handle out of order sequences.

Test case to show the failures attached



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to