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 21:50:12 UTC
[jira] [Updated] (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:all-tabpanel ]
Jens Geyer updated THRIFT-2854:
-------------------------------
Summary: Go Struct writer and reader looses important error information (was: GO Struct writer and reader looses important error information)
> 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)