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

Unify exception handling policy of TProcessor

Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Open
    • Major
    • Resolution: Unresolved
    • None
    • None
    • Wish List
    • None

    Description

      A discussion in THRIFT-1805 uncovered inconsistent error handling behaviors of TProcessors across languages and releases.
      Most outstanding are Java sync and async processors as described there, but others are also subtly different in details.

      I propose unifying the TProcessor behavior by specifying mappings from "uncaught server handler exceptions" to "observable server behaviors" as follows:

      • TApplicationException -> send TApplicationException with the message and the type as thrown
      • TTransportException -> the connection is either already broken or newly broken
      • other exceptions -> send opaque TApplicationException(INTERNAL_ERROR)

      That way users can still arbitrarily disconnect the client by throwing TTransportException.
      (IMO ideally this should have been done by exposing "client context" object to the handler instead)

      The first one can be a bit controversial as it can be regarded as information leak.

      Also some may prefer unifying the TProcessor behavior to catch-all, so that servers never die on handler exceptions.

      Attachments

        Issue Links

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            nsuke Nobuaki Sukegawa

            Dates

              Created:
              Updated:

              Slack

                Issue deployment