[
https://issues.apache.org/jira/browse/THRIFT-2975?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14355782#comment-14355782
]
ASF GitHub Bot commented on THRIFT-2975:
----------------------------------------
Github user abhinav closed the pull request at:
https://github.com/apache/thrift/pull/370
> Graceful handing of unexpected errors
> -------------------------------------
>
> Key: THRIFT-2975
> URL: https://issues.apache.org/jira/browse/THRIFT-2975
> Project: Thrift
> Issue Type: Improvement
> Components: Python - Compiler
> Affects Versions: 0.9.2
> Reporter: Abhinav Gupta
>
> Currently, the Python compiler generate {{Processor.process_*}} methods that
> look something like,
> {code}
> def process_myMethod(...):
> myArg = ...
> try:
> result.success = self._handler.myMethod(myArg)
> except ExpectedException, e:
> result.exc = ...
> {code}
> If {{handler.myMethod}} throws an exception that was not defined in the
> service interface (due to a bug, for example), the client connection is
> terminated without any extra information being sent down. This is unideal
> because the client dos not know whether the issue was a networking error or a
> server-side problem.
> A possibly better behavior would be,
> {code}
> def process_myMethod(...):
> myArg = ...
> try:
> self._handler.myMethod(myArg)
> except ExpectedException, e:
> ...
> except Exception:
> exc = TApplicationException(INTERNAL_ERROR)
> # write exc to output protocol as an exception
> {code}
> The generated clients already expect {{TApplicationException}} in the
> response and know how to parse and handle them, so this won't require any
> change on the client side.
> Note that this will leave the connection open for further requests. My
> understanding is that there are some security concerns around that. So
> perhaps the behavior could be that {{process_*}} throws a
> {{TApplicationException}} and {{Processor.process}} catches it, sends it to
> the client and terminates the connection.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)