You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Jens Geyer (JIRA)" <ji...@apache.org> on 2014/11/25 22:11:14 UTC

[jira] [Comment Edited] (THRIFT-2854) Go Struct writer and reader looses important error information

    [ https://issues.apache.org/jira/browse/THRIFT-2854?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14225211#comment-14225211 ] 

Jens Geyer edited comment on THRIFT-2854 at 11/25/14 9:10 PM:
--------------------------------------------------------------

The generated code has some known flaws with respect to error handling in general. I absolutely agree that we should do something about it. A good test case would be nice as well.

Actually there are some more places that could need some reviewing. At some occasions returned errors are entirely ignored right now,e.g. the generated {{Process()}} functions. Although these are a bit tricky because of the {{oneway}} stuff. But that's probably a bit outside of the scope of this ticket.


was (Author: jensg):
The generated code has some known flaws with respect to error handling in general. I absolutely agree that we should do something about it. A good test case would be nice.

Actually there are some more places that could need some reviewing. At some occasions returned errors are entirely ignored right now,e.g. the generated {{Process()}} functions. Although these are a bit tricky because of the {{oneway}} stuff. But that's probably a bit outside of the scope of this ticket.

> Go Struct writer and reader looses important error information
> --------------------------------------------------------------
>
>                 Key: THRIFT-2854
>                 URL: https://issues.apache.org/jira/browse/THRIFT-2854
>             Project: Thrift
>          Issue Type: Bug
>          Components: Go - Compiler
>    Affects Versions: 0.9.2
>            Reporter: Chi Vinh Le
>             Fix For: 0.9.3
>
>
> The GO Compiler generates code for a struct so that the following occurs:
> When an error occurs while reading or writing, a new error is created with additional text information using {code}fmt.Errorf{code}.
> By doing this the original error is completely lost. This is a real problem because errors of type TTransportException and TProtocolExceptions which contain additional information are lost. This will cause bad error handling, as the server implementation is dependent on those information.
> In my personal fork, I have a quick'n dirty fix for this, but I'm looking for a better option.
> Maybe instead of {code}fmt.Errorf{code} we could use this:
> {code}
> // Prepends additional information to an error without losing the Thrift interface
> func PrependError(err error, prepend string) error {
>   if t, ok := err.(TTransportException); ok {
>     return NewTTransportException(t.TypeId(), prepend+t.Error())
>   }
>   if t, ok := err.(TProtocolException); ok {
>     return NewTProtocolExceptionWithType(t.TypeId(), errors.New(prepend+err.Error()))
>   }
>   if t, ok := err.(TApplicationException); ok {
>     return NewTApplicationException(t.TypeId(), prepend+t.Error())
>   }
>   return errors.New(prepend + err.Error())
> }
> {code}
> I want to discuss this first here, because making a patch is quiet some work and I don't want major changes after I create a fix.



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