This class accommodates the changes in THRIFT-1805, which appeared in Thrift 0.9.1 and restricts client-side notification of server-side errors to
TException
only, by wrapping
RuntimeException
and
Error
as
TException
, so it doesn't just close the connection and look like
a network issue, but informs the client that a
TApplicationException
had occurred, as it did in Thrift 0.9.0. This performs similar functions as
TraceWrap
, but with the additional action of translating exceptions. See also ACCUMULO-1691 and ACCUMULO-2950.
ACCUMULO-4065 found that the above exception-wrapping is not appropriate for Thrift's implementation of oneway methods. Oneway methods are defined as a
method which the client does not wait for it to return. Normally, this is acceptable as these methods are void. Therefore, if another client reuses the
connection to send a new RPC, there is no "extra" data sitting on the InputStream from the Socket (that the server sent). However, the implementation of a
oneway method
does send a response to the client when the implementation throws a
TException
. This message showing up on the client's
InputStream causes future use of the Thrift Connection to become unusable. As long as the Thrift implementation sends a message back when oneway methods
throw a
TException
, we much make sure that we don't re-wrap-and-throw any exceptions as
TException
s.