Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-2975

Graceful handing of unexpected errors

    XMLWordPrintableJSON

    Details

    • Type: Improvement
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 0.9.2
    • Fix Version/s: None
    • Component/s: Python - Compiler
    • Labels:
      None

      Description

      Currently, the Python compiler generate Processor.process_* methods that look something like,

      def process_myMethod(...):
        myArg = ...
        try:
          result.success = self._handler.myMethod(myArg)
        except ExpectedException, e:
          result.exc = ...
      

      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,

      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
      

      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.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                Unassigned
                Reporter:
                abg Abhinav Gupta
              • Votes:
                1 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated: