Ioannis Efthymiou created THRIFT-5480:
-----------------------------------------

             Summary: Netstd - TThreadPoolAsyncServer using TFramedTransport 
mistakenly drops client
                 Key: THRIFT-5480
                 URL: https://issues.apache.org/jira/browse/THRIFT-5480
             Project: Thrift
          Issue Type: Bug
          Components: netstd - Library
    Affects Versions: 0.15.0
            Reporter: Ioannis Efthymiou
         Attachments: 
0001-Reset-message-size-in-TFramedTransport.ReadFrameAsyn-1.patch

TThreadPoolAsyncServer using TFramedTransport silently drops a client service 
using oneway methods when the second message is bigger than the first one.

I have an application implementing a one way service, depending on it's state. 
I created a TThreadpoolAsync server using the netstd 0.15 version, and I 
noticed that after a point, the notifications stopped coming, but there was no 
error on either side. The methods all worked individually, but some did not 
work after others.

Eliminating all possible causes on my side, I debugged the source code, and 
discovered that a transport exception was thrown from TEndpointTransport when a 
message size was bigger than the proceeding one, because 
TFramedTransport.ReadFrameAsync was not resetting the message size when it was 
done reading it, thus causing TEndpointTransport.UpdateKnownMessageSize to 
throw the exception. The server interpreted the exception as if the client had 
disconnected, so it silently ignored it.

 

I've attached a patch that corrects this behaviour



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to