You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Abhinav Gupta (JIRA)" <ji...@apache.org> on 2015/02/03 23:20:35 UTC

[jira] [Created] (THRIFT-2975) Graceful handing of unexpected errors

Abhinav Gupta created THRIFT-2975:
-------------------------------------

             Summary: 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)