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)