You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "James E. King, III (JIRA)" <ji...@apache.org> on 2015/07/07 18:57:05 UTC

[jira] [Reopened] (THRIFT-727) support native C++ language specific exception message

     [ https://issues.apache.org/jira/browse/THRIFT-727?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

James E. King, III reopened THRIFT-727:
---------------------------------------

I have to reject this fix based on the impact it has with backwards compatibility.  The thrift tutorial used to use "what" as the name of a field in an exception.  This change broke the tutorial.  In other projects I am affiliated with that use Thrift, some of them followed the tutorial.  With this change the tutorial failed to compile, and the projects fail to compile.  The only recourse is to change the IDL so that it does not use "what", which breaks backwards compatibility.

I would like to recommend this change be reverted form the project until a backwards-compatible friendly solution is made.  For example, if an exception already has a field called what, it should not break compilation or require an IDL change.


> support native C++ language specific exception message
> ------------------------------------------------------
>
>                 Key: THRIFT-727
>                 URL: https://issues.apache.org/jira/browse/THRIFT-727
>             Project: Thrift
>          Issue Type: Improvement
>          Components: C++ - Compiler
>    Affects Versions: 0.2
>         Environment: all
>            Reporter: Ping Li
>            Assignee: Anna Dymek
>            Priority: Minor
>             Fix For: 0.9.3
>
>         Attachments: THRIFT-727-AddOn-Fix-GoTutorial-broken.patch
>
>
> The current exception implement requires the error message to be declared and referenced explicitly, especially when it's sent from server to the client. On client side, this error message cannot be accessed via a native API like exception::what() in C++.
> Example,
> {code}
> exception MyException {
>   1: i32   code;
>   2: string message;
> }
> {code}
> On client side, it can only be accessed like this,
> {code}
> try {
>   server->someMethod();
> } catch (MyException &e) {
>   cout << "MyException: " << e.message << endl;     // this will print the exception message
>   cout << "MyException: " << e.what() << endl;      // this will print TException::Default
> }
> {code}
> At the same time, if TException::message_ is initialized, exception::what() does work when the exception is caught locally.
> It's a little confusing when to use the native method, and when to use Thrift exception message data member.
> It'll be really nice if all exception messages can be accessed the same way thru the navtive language on client side.



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