From ba23d05231f7aee9506cf617bf2fa1007656fd08 Mon Sep 17 00:00:00 2001 From: Brad Rydzewski Date: Thu, 29 Jun 2017 17:27:06 -0400 Subject: [PATCH] improve grpc error handling --- .../cncd/pipeline/pipeline/rpc/client_grpc.go | 69 ++++++++----------- vendor/vendor.json | 54 +++++++-------- 2 files changed, 54 insertions(+), 69 deletions(-) diff --git a/vendor/github.com/cncd/pipeline/pipeline/rpc/client_grpc.go b/vendor/github.com/cncd/pipeline/pipeline/rpc/client_grpc.go index 78e0cdda..f612c435 100644 --- a/vendor/github.com/cncd/pipeline/pipeline/rpc/client_grpc.go +++ b/vendor/github.com/cncd/pipeline/pipeline/rpc/client_grpc.go @@ -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 } diff --git a/vendor/vendor.json b/vendor/vendor.json index fc5a4a0b..45556931 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -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=",