mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #9120 from spzala/statusfromerror
StatusFromError: handle return value of the function
This commit is contained in:
commit
bcc5ea6a27
@ -537,18 +537,19 @@ func toErr(ctx context.Context, err error) error {
|
||||
if _, ok := err.(rpctypes.EtcdError); ok {
|
||||
return err
|
||||
}
|
||||
ev, _ := status.FromError(err)
|
||||
code := ev.Code()
|
||||
switch code {
|
||||
case codes.DeadlineExceeded:
|
||||
fallthrough
|
||||
case codes.Canceled:
|
||||
if ctx.Err() != nil {
|
||||
err = ctx.Err()
|
||||
if ev, ok := status.FromError(err); ok {
|
||||
code := ev.Code()
|
||||
switch code {
|
||||
case codes.DeadlineExceeded:
|
||||
fallthrough
|
||||
case codes.Canceled:
|
||||
if ctx.Err() != nil {
|
||||
err = ctx.Err()
|
||||
}
|
||||
case codes.Unavailable:
|
||||
case codes.FailedPrecondition:
|
||||
err = grpc.ErrClientConnClosing
|
||||
}
|
||||
case codes.Unavailable:
|
||||
case codes.FailedPrecondition:
|
||||
err = grpc.ErrClientConnClosing
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
@ -361,7 +361,10 @@ func isServerCtxTimeout(err error) bool {
|
||||
if err == nil {
|
||||
return false
|
||||
}
|
||||
ev, _ := status.FromError(err)
|
||||
ev, ok := status.FromError(err)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
code := ev.Code()
|
||||
return code == codes.DeadlineExceeded && strings.Contains(err.Error(), "context deadline exceeded")
|
||||
}
|
||||
|
@ -285,7 +285,7 @@ func (lkv *leasingKV) acquire(ctx context.Context, key string, op v3.Op) (*v3.Tx
|
||||
if _, ok := err.(rpctypes.EtcdError); ok {
|
||||
return nil, err
|
||||
}
|
||||
if ev, _ := status.FromError(err); ev.Code() != codes.Unavailable {
|
||||
if ev, ok := status.FromError(err); ok && ev.Code() != codes.Unavailable {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
@ -52,7 +52,10 @@ func isRepeatableStopError(err error) bool {
|
||||
return true
|
||||
}
|
||||
// only retry if unavailable
|
||||
ev, _ := status.FromError(err)
|
||||
ev, ok := status.FromError(err)
|
||||
if !ok {
|
||||
return false
|
||||
}
|
||||
return ev.Code() != codes.Unavailable
|
||||
}
|
||||
|
||||
@ -68,8 +71,7 @@ func isRepeatableStopError(err error) bool {
|
||||
// Returning "true" means retry should stop, otherwise it violates
|
||||
// write-at-most-once semantics.
|
||||
func isNonRepeatableStopError(err error) bool {
|
||||
ev, _ := status.FromError(err)
|
||||
if ev.Code() != codes.Unavailable {
|
||||
if ev, ok := status.FromError(err); ok && ev.Code() != codes.Unavailable {
|
||||
return true
|
||||
}
|
||||
desc := rpctypes.ErrorDesc(err)
|
||||
|
@ -29,16 +29,14 @@ func TestConvert(t *testing.T) {
|
||||
if e1.Error() != e2.Error() {
|
||||
t.Fatalf("expected %q == %q", e1.Error(), e2.Error())
|
||||
}
|
||||
ev1, _ := status.FromError(e1)
|
||||
if ev1.Code() != e3.(EtcdError).Code() {
|
||||
if ev1, ok := status.FromError(e1); ok && ev1.Code() != e3.(EtcdError).Code() {
|
||||
t.Fatalf("expected them to be equal, got %v / %v", ev1.Code(), e3.(EtcdError).Code())
|
||||
}
|
||||
|
||||
if e1.Error() == e3.Error() {
|
||||
t.Fatalf("expected %q != %q", e1.Error(), e3.Error())
|
||||
}
|
||||
ev2, _ := status.FromError(e2)
|
||||
if ev2.Code() != e3.(EtcdError).Code() {
|
||||
if ev2, ok := status.FromError(e2); ok && ev2.Code() != e3.(EtcdError).Code() {
|
||||
t.Fatalf("expected them to be equal, got %v / %v", ev2.Code(), e3.(EtcdError).Code())
|
||||
}
|
||||
}
|
||||
|
@ -68,8 +68,7 @@ func runLeaseRenewerFunc(cmd *cobra.Command, args []string) {
|
||||
|
||||
for {
|
||||
lk, err = c.Lease.KeepAliveOnce(ctx, l.ID)
|
||||
ev, _ := status.FromError(err)
|
||||
if ev.Code() == codes.NotFound {
|
||||
if ev, ok := status.FromError(err); ok && ev.Code() == codes.NotFound {
|
||||
if time.Since(expire) < 0 {
|
||||
log.Fatalf("bad renew! exceeded: %v", time.Since(expire))
|
||||
for {
|
||||
|
Loading…
x
Reference in New Issue
Block a user