[ 
https://issues.apache.org/jira/browse/THRIFT-1805?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15033849#comment-15033849
 ] 

Keith Turner commented on THRIFT-1805:
--------------------------------------

Just want to chime in and explain Accumulo's use case.  Accumulo relied on 
TApplicationException in the following way.

 * When Accumulo client code saw a TApplicationException it assumed an 
unexpected server side error had occurred and propogated this to the user by 
throwing an AccumuloServerException.
 * When Accumulo client code saw a TTransportException, it assumed some sort of 
network problem occurred or a tablet server died.  In this case Accumulo client 
code will automatically retry w/o the user ever being aware.  

This change in behavior was very disruptive for Accumulo.  We worked around it, 
but just ran into an issue with our work around for the one-way method case. 
See ACCUMULO-4065 if interested and a [proposed work 
around|https://github.com/apache/accumulo/pull/56].  

> Thrift should not swallow ALL exceptions
> ----------------------------------------
>
>                 Key: THRIFT-1805
>                 URL: https://issues.apache.org/jira/browse/THRIFT-1805
>             Project: Thrift
>          Issue Type: Bug
>          Components: Java - Compiler, Java - Library
>    Affects Versions: 0.9
>            Reporter: Diwaker Gupta
>            Assignee: Diwaker Gupta
>         Attachments: THRIFT-1805.patch
>
>
> In Thrift 0.8.0, Thrift generated Java code did not swallow application 
> exceptions. As a result of THRIFT-1658, this behavior changed in 0.9.0 and 
> now the generated code swallows ALL application exceptions (via 
> ProcessFunction). Apparently this was the behavior in Thrift 0.6.0 and while 
> I see the rationale, it is breaking our applications.
> Our code relies on the fact that exceptions can propagate outside of Thrift 
> for certain things (e.g., to aggressively drop connections for clients that 
> send invalid/malformed requests). ProcessFunction makes it near impossible to 
> do this -- not only does it swallow the exception, it also loses all 
> information about the original exception and just writes out a generic 
> TApplicationException.
> IMO ProcessFunction should only catch TException. If the application code 
> wants to use other exceptions for some reason (in particular, Errors and 
> RuntimeExceptions), Thrift shouldn't prevent that.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to