mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
clientv3: deprecate "grpc.ErrClientConnClosing"
Signed-off-by: Gyuho Lee <leegyuho@amazon.com>
This commit is contained in:
parent
1c312cefbd
commit
ab1db0dfd8
@ -587,10 +587,13 @@ func isUnavailableErr(ctx context.Context, err error) bool {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
ev, _ := status.FromError(err)
|
ev, ok := status.FromError(err)
|
||||||
// Unavailable codes mean the system will be right back.
|
if ok {
|
||||||
// (e.g., can't connect, lost leader)
|
// Unavailable codes mean the system will be right back.
|
||||||
return ev.Code() == codes.Unavailable
|
// (e.g., can't connect, lost leader)
|
||||||
|
return ev.Code() == codes.Unavailable
|
||||||
|
}
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
func toErr(ctx context.Context, err error) error {
|
func toErr(ctx context.Context, err error) error {
|
||||||
@ -610,9 +613,6 @@ func toErr(ctx context.Context, err error) error {
|
|||||||
if ctx.Err() != nil {
|
if ctx.Err() != nil {
|
||||||
err = ctx.Err()
|
err = ctx.Err()
|
||||||
}
|
}
|
||||||
case codes.Unavailable:
|
|
||||||
case codes.FailedPrecondition:
|
|
||||||
err = grpc.ErrClientConnClosing
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
@ -632,16 +632,19 @@ func IsConnCanceled(err error) bool {
|
|||||||
if err == nil {
|
if err == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
// >= gRPC v1.10.x
|
|
||||||
|
// >= gRPC v1.23.x
|
||||||
s, ok := status.FromError(err)
|
s, ok := status.FromError(err)
|
||||||
if ok {
|
if ok {
|
||||||
// connection is canceled or server has already closed the connection
|
// connection is canceled or server has already closed the connection
|
||||||
return s.Code() == codes.Canceled || s.Message() == "transport is closing"
|
return s.Code() == codes.Canceled || s.Message() == "transport is closing"
|
||||||
}
|
}
|
||||||
|
|
||||||
// >= gRPC v1.10.x
|
// >= gRPC v1.10.x
|
||||||
if err == context.Canceled {
|
if err == context.Canceled {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
// <= gRPC v1.7.x returns 'errors.New("grpc: the client connection is closing")'
|
// <= gRPC v1.7.x returns 'errors.New("grpc: the client connection is closing")'
|
||||||
return strings.Contains(err.Error(), "grpc: the client connection is closing")
|
return strings.Contains(err.Error(), "grpc: the client connection is closing")
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@
|
|||||||
// // with etcd clientv3 <= v3.3
|
// // with etcd clientv3 <= v3.3
|
||||||
// if err == context.Canceled {
|
// if err == context.Canceled {
|
||||||
// // grpc balancer calls 'Get' with an inflight client.Close
|
// // grpc balancer calls 'Get' with an inflight client.Close
|
||||||
// } else if err == grpc.ErrClientConnClosing {
|
// } else if err == grpc.ErrClientConnClosing { // <= gRCP v1.7.x
|
||||||
// // grpc balancer calls 'Get' after client.Close.
|
// // grpc balancer calls 'Get' after client.Close.
|
||||||
// }
|
// }
|
||||||
// // with etcd clientv3 >= v3.4
|
// // with etcd clientv3 >= v3.4
|
||||||
|
@ -463,7 +463,7 @@ func TestKVGetErrConnClosed(t *testing.T) {
|
|||||||
defer close(donec)
|
defer close(donec)
|
||||||
_, err := cli.Get(context.TODO(), "foo")
|
_, err := cli.Get(context.TODO(), "foo")
|
||||||
if !clientv3.IsConnCanceled(err) {
|
if !clientv3.IsConnCanceled(err) {
|
||||||
t.Errorf("expected %v or %v, got %v", context.Canceled, grpc.ErrClientConnClosing, err)
|
t.Errorf("expected %v, got %v", context.Canceled, err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -490,7 +490,7 @@ func TestKVNewAfterClose(t *testing.T) {
|
|||||||
go func() {
|
go func() {
|
||||||
_, err := cli.Get(context.TODO(), "foo")
|
_, err := cli.Get(context.TODO(), "foo")
|
||||||
if !clientv3.IsConnCanceled(err) {
|
if !clientv3.IsConnCanceled(err) {
|
||||||
t.Errorf("expected %v or %v, got %v", context.Canceled, grpc.ErrClientConnClosing, err)
|
t.Errorf("expected %v, got %v", context.Canceled, err)
|
||||||
}
|
}
|
||||||
close(donec)
|
close(donec)
|
||||||
}()
|
}()
|
||||||
|
@ -27,8 +27,6 @@ import (
|
|||||||
"go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes"
|
"go.etcd.io/etcd/etcdserver/api/v3rpc/rpctypes"
|
||||||
"go.etcd.io/etcd/integration"
|
"go.etcd.io/etcd/integration"
|
||||||
"go.etcd.io/etcd/pkg/testutil"
|
"go.etcd.io/etcd/pkg/testutil"
|
||||||
|
|
||||||
"google.golang.org/grpc"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestLeaseNotFoundError(t *testing.T) {
|
func TestLeaseNotFoundError(t *testing.T) {
|
||||||
@ -300,9 +298,8 @@ func TestLeaseGrantErrConnClosed(t *testing.T) {
|
|||||||
defer close(donec)
|
defer close(donec)
|
||||||
_, err := cli.Grant(context.TODO(), 5)
|
_, err := cli.Grant(context.TODO(), 5)
|
||||||
if !clientv3.IsConnCanceled(err) {
|
if !clientv3.IsConnCanceled(err) {
|
||||||
// grpc.ErrClientConnClosing if grpc-go balancer calls 'Get' after client.Close.
|
|
||||||
// context.Canceled if grpc-go balancer calls 'Get' with an inflight client.Close.
|
// context.Canceled if grpc-go balancer calls 'Get' with an inflight client.Close.
|
||||||
t.Errorf("expected %v, %v or server unavailable, got %v", err != context.Canceled, grpc.ErrClientConnClosing, err)
|
t.Errorf("expected %v, or server unavailable, got %v", context.Canceled, err)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -372,7 +369,7 @@ func TestLeaseGrantNewAfterClose(t *testing.T) {
|
|||||||
go func() {
|
go func() {
|
||||||
_, err := cli.Grant(context.TODO(), 5)
|
_, err := cli.Grant(context.TODO(), 5)
|
||||||
if !clientv3.IsConnCanceled(err) {
|
if !clientv3.IsConnCanceled(err) {
|
||||||
t.Errorf("expected %v, %v or server unavailable, got %v", err != context.Canceled, grpc.ErrClientConnClosing, err)
|
t.Errorf("expected %v or server unavailable, got %v", context.Canceled, err)
|
||||||
}
|
}
|
||||||
close(donec)
|
close(donec)
|
||||||
}()
|
}()
|
||||||
@ -405,7 +402,7 @@ func TestLeaseRevokeNewAfterClose(t *testing.T) {
|
|||||||
go func() {
|
go func() {
|
||||||
_, err := cli.Revoke(context.TODO(), leaseID)
|
_, err := cli.Revoke(context.TODO(), leaseID)
|
||||||
if !clientv3.IsConnCanceled(err) {
|
if !clientv3.IsConnCanceled(err) {
|
||||||
t.Fatalf("expected %v, %v or server unavailable, got %v", err != context.Canceled, grpc.ErrClientConnClosing, err)
|
t.Fatalf("expected %v or server unavailable, got %v", context.Canceled, err)
|
||||||
}
|
}
|
||||||
close(donec)
|
close(donec)
|
||||||
}()
|
}()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user