Chi Vinh Le created THRIFT-2854:
-----------------------------------

             Summary: 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)

Reply via email to