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

Hudson commented on THRIFT-2854:
--------------------------------

SUCCESS: Integrated in Thrift #1377 (See 
[https://builds.apache.org/job/Thrift/1377/])
THRIFT-2854 Go Struct writer and reader looses important error information 
(jensg: rev 527b6d9c86a7e5cde14cbb09a0e3103be0791c3a)
* lib/go/thrift/exception_test.go
* lib/go/test/ErrorTest.thrift
* lib/go/thrift/exception.go
* lib/go/test/tests/client_error_test.go
* lib/go/test/Makefile.am
* compiler/cpp/src/generate/t_go_generator.cc


> 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
>            Assignee: Jens Geyer
>             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)

Reply via email to