ttrpc: correctly propagate error from response

Signed-off-by: Stephen J Day <stephen.day@docker.com>
This commit is contained in:
Stephen J Day 2017-11-22 12:06:18 -08:00
parent a763db9d1f
commit 07cd4de2f2
No known key found for this signature in database
GPG Key ID: 67B3DED84EDC823F
2 changed files with 17 additions and 4 deletions

View File

@ -42,6 +42,9 @@ Very new. YMMV.
TODO:
- [ ] Plumb error codes and GRPC status
- [ ] Remove use of any type and dependency on typeurl package
- [ ] Ensure that protocol can support streaming in the future
- [X] Plumb error codes and GRPC status
- [X] Remove use of any type and dependency on typeurl package
- [X] Ensure that protocol can support streaming in the future
- [ ] Document protocol layout
- [ ] Add testing under concurrent load to ensure
- [ ] Verify connection error handling

View File

@ -7,6 +7,8 @@ import (
"sync/atomic"
"github.com/gogo/protobuf/proto"
"github.com/pkg/errors"
"google.golang.org/grpc/status"
)
type Client struct {
@ -58,7 +60,15 @@ func (c *Client) Call(ctx context.Context, service, method string, req, resp int
return err
}
return c.codec.Unmarshal(response.Payload, resp)
if err := c.codec.Unmarshal(response.Payload, resp); err != nil {
return err
}
if response.Status == nil {
return errors.New("no status provided on response")
}
return status.ErrorProto(response.Status)
}
func (c *Client) Close() error {