improve grpc error handling

This commit is contained in:
Brad Rydzewski 2017-06-29 17:27:06 -04:00
parent 438d5081dc
commit ba23d05231
2 changed files with 54 additions and 69 deletions

View file

@ -9,8 +9,11 @@ import (
"github.com/cncd/pipeline/pipeline/rpc/proto"
"google.golang.org/grpc"
"google.golang.org/grpc/codes"
)
var backoff = time.Second
type client struct {
client proto.DroneClient
conn *grpc.ClientConn
@ -38,17 +41,13 @@ func (c *client) Next(ctx context.Context, f Filter) (*Pipeline, error) {
req.Filter.Labels = f.Labels
for {
res, err = c.client.Next(ctx, req)
//
// TODO error type
//
if err == nil {
break
}
println("error getting next execution. retry. " + err.Error())
select {
case <-time.After(1 * time.Second):
if grpc.Code(err) == codes.Unknown {
return nil, err
}
<-time.After(backoff)
}
if res.GetPipeline() == nil {
@ -69,15 +68,13 @@ func (c *client) Wait(ctx context.Context, id string) (err error) {
req.Id = id
for {
_, err = c.client.Wait(ctx, req)
//
// TODO error type
//
if err == nil {
break
}
select {
case <-time.After(1 * time.Second):
if grpc.Code(err) == codes.Unknown {
return err
}
<-time.After(backoff)
}
return nil
}
@ -95,15 +92,13 @@ func (c *client) Init(ctx context.Context, id string, state State) (err error) {
req.State.Name = state.Proc
for {
_, err = c.client.Init(ctx, req)
//
// TODO error type
//
if err == nil {
break
}
select {
case <-time.After(1 * time.Second):
if grpc.Code(err) == codes.Unknown {
return err
}
<-time.After(backoff)
}
return nil
}
@ -121,15 +116,13 @@ func (c *client) Done(ctx context.Context, id string, state State) (err error) {
req.State.Name = state.Proc
for {
_, err = c.client.Done(ctx, req)
//
// TODO error type
//
if err == nil {
break
}
select {
case <-time.After(1 * time.Second):
if grpc.Code(err) == codes.Unknown {
return err
}
<-time.After(backoff)
}
return nil
}
@ -140,15 +133,13 @@ func (c *client) Extend(ctx context.Context, id string) (err error) {
req.Id = id
for {
_, err = c.client.Extend(ctx, req)
//
// TODO error type
//
if err == nil {
break
}
select {
case <-time.After(1 * time.Second):
if grpc.Code(err) == codes.Unknown {
return err
}
<-time.After(backoff)
}
return nil
}
@ -166,15 +157,13 @@ func (c *client) Update(ctx context.Context, id string, state State) (err error)
req.State.Name = state.Proc
for {
_, err = c.client.Update(ctx, req)
//
// TODO error type
//
if err == nil {
break
}
select {
case <-time.After(1 * time.Second):
if grpc.Code(err) == codes.Unknown {
return err
}
<-time.After(backoff)
}
return nil
}
@ -192,15 +181,13 @@ func (c *client) Upload(ctx context.Context, id string, file *File) (err error)
req.File.Data = file.Data
for {
_, err = c.client.Upload(ctx, req)
//
// TODO error type
//
if err == nil {
break
}
select {
case <-time.After(1 * time.Second):
if grpc.Code(err) == codes.Unknown {
return err
}
<-time.After(backoff)
}
return nil
}
@ -216,15 +203,13 @@ func (c *client) Log(ctx context.Context, id string, line *Line) (err error) {
req.Line.Time = line.Time
for {
_, err = c.client.Log(ctx, req)
//
// TODO error type
//
if err == nil {
break
}
select {
case <-time.After(1 * time.Second):
if grpc.Code(err) == codes.Unknown {
return err
}
<-time.After(backoff)
}
return nil
}

54
vendor/vendor.json vendored
View file

@ -39,80 +39,80 @@
{
"checksumSHA1": "W3AuK8ocqHwlUajGmQLFvnRhTZE=",
"path": "github.com/cncd/pipeline/pipeline",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "rO+djTfB4LrT+FBbpotyUUobOtU=",
"path": "github.com/cncd/pipeline/pipeline/backend",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "DzP4c915B+gJTE5RCKQHzxwrUg4=",
"path": "github.com/cncd/pipeline/pipeline/backend/docker",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "8Hj/OZnYZyz5N2hqENCTTaGtkNQ=",
"path": "github.com/cncd/pipeline/pipeline/frontend",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "9KYIsY8WlWbrRAP7caEpWT70P9c=",
"path": "github.com/cncd/pipeline/pipeline/frontend/yaml",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "1saqrg1gk6F2N0x2rOCTnSfwBAY=",
"path": "github.com/cncd/pipeline/pipeline/frontend/yaml/compiler",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "Q0GkNUFamVYIA1Fd8r0A5M6Gx54=",
"path": "github.com/cncd/pipeline/pipeline/frontend/yaml/linter",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "kx2sPUIMozPC/g6E4w48h3FfH3k=",
"path": "github.com/cncd/pipeline/pipeline/frontend/yaml/matrix",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "L7Q5qJmPITNmvFEEaj5MPwCWFRk=",
"path": "github.com/cncd/pipeline/pipeline/frontend/yaml/types",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "2/3f3oNmxXy5kcrRLCFa24Oc9O4=",
"path": "github.com/cncd/pipeline/pipeline/interrupt",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "uOjTfke7Qxosrivgz/nVTHeIP5g=",
"path": "github.com/cncd/pipeline/pipeline/multipart",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "LAuWwrS1JoqxTJnXvVYMAlauyp4=",
"checksumSHA1": "ndDase2wF8bWu83aDT8PFxVNSiU=",
"path": "github.com/cncd/pipeline/pipeline/rpc",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "WAQJYKWUIFBnL1s8AnY4fePnzJ8=",
"path": "github.com/cncd/pipeline/pipeline/rpc/proto",
"revision": "9685a43aa7e8f509e9e3ce14db5e014406d0ab8d",
"revisionTime": "2017-06-28T17:01:38Z"
"revision": "edd4cdaa4846a7bd7778533230597c1b28159a47",
"revisionTime": "2017-06-29T21:17:09Z"
},
{
"checksumSHA1": "7Qj1DK0ceAXkYztW0l3+L6sn+V8=",