Browse Source

clientv3: deprecate "grpc.ErrClientConnClosing"

Signed-off-by: Gyuho Lee <leegyuho@amazon.com>
Gyuho Lee 6 years ago
parent
commit
9b385737f5
4 changed files with 17 additions and 17 deletions
  1. 11 8
      clientv3/client.go
  2. 1 1
      clientv3/doc.go
  3. 2 2
      clientv3/integration/kv_test.go
  4. 3 6
      clientv3/integration/lease_test.go

+ 11 - 8
clientv3/client.go

@@ -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)
-	// Unavailable codes mean the system will be right back.
-	// (e.g., can't connect, lost leader)
-	return ev.Code() == codes.Unavailable
+	ev, ok := status.FromError(err)
+	if ok {
+		// Unavailable codes mean the system will be right back.
+		// (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")
 }
 }

+ 1 - 1
clientv3/doc.go

@@ -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

+ 2 - 2
clientv3/integration/kv_test.go

@@ -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)
 	}()
 	}()

+ 3 - 6
clientv3/integration/lease_test.go

@@ -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)
 	}()
 	}()