Sfoglia il codice sorgente

v3rpc: move errors to v3rpc/rpctypes

Fixes #4771
Anthony Romano 9 anni fa
parent
commit
44753594ec

+ 5 - 5
clientv3/integration/kv_test.go

@@ -22,7 +22,7 @@ import (
 
 	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
 	"github.com/coreos/etcd/clientv3"
-	"github.com/coreos/etcd/etcdserver/api/v3rpc"
+	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	"github.com/coreos/etcd/integration"
 	"github.com/coreos/etcd/lease"
 	"github.com/coreos/etcd/pkg/testutil"
@@ -344,8 +344,8 @@ func TestKVCompact(t *testing.T) {
 		t.Fatalf("couldn't compact kv space (%v)", err)
 	}
 	err = kv.Compact(ctx, 7)
-	if err == nil || err != v3rpc.ErrCompacted {
-		t.Fatalf("error got %v, want %v", err, v3rpc.ErrFutureRev)
+	if err == nil || err != rpctypes.ErrCompacted {
+		t.Fatalf("error got %v, want %v", err, rpctypes.ErrFutureRev)
 	}
 
 	wc := clientv3.NewWatcher(clus.RandClient())
@@ -360,8 +360,8 @@ func TestKVCompact(t *testing.T) {
 	}
 
 	err = kv.Compact(ctx, 1000)
-	if err == nil || err != v3rpc.ErrFutureRev {
-		t.Fatalf("error got %v, want %v", err, v3rpc.ErrFutureRev)
+	if err == nil || err != rpctypes.ErrFutureRev {
+		t.Fatalf("error got %v, want %v", err, rpctypes.ErrFutureRev)
 	}
 }
 

+ 3 - 3
clientv3/integration/lease_test.go

@@ -20,7 +20,7 @@ import (
 
 	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
 	"github.com/coreos/etcd/clientv3"
-	"github.com/coreos/etcd/etcdserver/api/v3rpc"
+	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	"github.com/coreos/etcd/integration"
 	"github.com/coreos/etcd/lease"
 	"github.com/coreos/etcd/pkg/testutil"
@@ -70,8 +70,8 @@ func TestLeaseRevoke(t *testing.T) {
 	}
 
 	_, err = kv.Put(context.TODO(), "foo", "bar", clientv3.WithLease(lease.LeaseID(resp.ID)))
-	if err != v3rpc.ErrLeaseNotFound {
-		t.Fatalf("err = %v, want %v", err, v3rpc.ErrLeaseNotFound)
+	if err != rpctypes.ErrLeaseNotFound {
+		t.Fatalf("err = %v, want %v", err, rpctypes.ErrLeaseNotFound)
 	}
 }
 

+ 2 - 1
clientv3/integration/watch_test.go

@@ -24,6 +24,7 @@ import (
 	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
 	"github.com/coreos/etcd/clientv3"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc"
+	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	"github.com/coreos/etcd/integration"
 	"github.com/coreos/etcd/pkg/testutil"
 	storagepb "github.com/coreos/etcd/storage/storagepb"
@@ -362,7 +363,7 @@ func TestWatchCompactRevision(t *testing.T) {
 	if !ok {
 		t.Fatalf("expected wresp, but got closed channel")
 	}
-	if wresp.Err() != v3rpc.ErrCompacted {
+	if wresp.Err() != rpctypes.ErrCompacted {
 		t.Fatalf("wresp.Err() expected ErrCompacteed, but got %v", wresp.Err())
 	}
 

+ 1 - 1
clientv3/watch.go

@@ -20,7 +20,7 @@ import (
 
 	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc"
-	"github.com/coreos/etcd/etcdserver/api/v3rpc"
+	v3rpc "github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 	storagepb "github.com/coreos/etcd/storage/storagepb"
 )

+ 2 - 2
etcdctlv3/command/make_mirror_command.go

@@ -24,7 +24,7 @@ import (
 	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
 	"github.com/coreos/etcd/clientv3"
 	"github.com/coreos/etcd/clientv3/mirror"
-	"github.com/coreos/etcd/etcdserver/api/v3rpc"
+	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	"github.com/coreos/etcd/storage/storagepb"
 )
 
@@ -98,7 +98,7 @@ func makeMirror(ctx context.Context, c *clientv3.Client, dc *clientv3.Client) er
 
 	for wr := range wc {
 		if wr.CompactRevision != 0 {
-			return v3rpc.ErrCompacted
+			return rpctypes.ErrCompacted
 		}
 
 		var rev int64

+ 2 - 2
etcdctlv3/command/snapshot_command.go

@@ -23,7 +23,7 @@ import (
 	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
 	"github.com/coreos/etcd/clientv3"
 	"github.com/coreos/etcd/clientv3/mirror"
-	"github.com/coreos/etcd/etcdserver/api/v3rpc"
+	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 )
 
 // NewSnapshotCommand returns the cobra command for "snapshot".
@@ -100,7 +100,7 @@ func snapshot(w io.Writer, c *clientv3.Client, rev int64) int64 {
 
 	err := <-errc
 	if err != nil {
-		if err == v3rpc.ErrCompacted {
+		if err == rpctypes.ErrCompacted {
 			// will get correct compact revision on retry
 			return rev + 1
 		}

+ 14 - 13
etcdserver/api/v3rpc/key.go

@@ -23,6 +23,7 @@ import (
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc"
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc/codes"
 	"github.com/coreos/etcd/etcdserver"
+	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/lease"
 	"github.com/coreos/etcd/storage"
@@ -152,33 +153,33 @@ func (s *kvServer) fillInHeader(h *pb.ResponseHeader) {
 
 func checkRangeRequest(r *pb.RangeRequest) error {
 	if len(r.Key) == 0 {
-		return ErrEmptyKey
+		return rpctypes.ErrEmptyKey
 	}
 	return nil
 }
 
 func checkPutRequest(r *pb.PutRequest) error {
 	if len(r.Key) == 0 {
-		return ErrEmptyKey
+		return rpctypes.ErrEmptyKey
 	}
 	return nil
 }
 
 func checkDeleteRequest(r *pb.DeleteRangeRequest) error {
 	if len(r.Key) == 0 {
-		return ErrEmptyKey
+		return rpctypes.ErrEmptyKey
 	}
 	return nil
 }
 
 func checkTxnRequest(r *pb.TxnRequest) error {
 	if len(r.Compare) > MaxOpsPerTxn || len(r.Success) > MaxOpsPerTxn || len(r.Failure) > MaxOpsPerTxn {
-		return ErrTooManyOps
+		return rpctypes.ErrTooManyOps
 	}
 
 	for _, c := range r.Compare {
 		if len(c.Key) == 0 {
-			return ErrEmptyKey
+			return rpctypes.ErrEmptyKey
 		}
 	}
 
@@ -203,7 +204,7 @@ func checkTxnRequest(r *pb.TxnRequest) error {
 	return nil
 }
 
-// checkRequestDupKeys gives ErrDuplicateKey if the same key is modified twice
+// checkRequestDupKeys gives rpctypes.ErrDuplicateKey if the same key is modified twice
 func checkRequestDupKeys(reqs []*pb.RequestUnion) error {
 	// check put overlap
 	keys := make(map[string]struct{})
@@ -218,7 +219,7 @@ func checkRequestDupKeys(reqs []*pb.RequestUnion) error {
 		}
 		key := string(preq.Key)
 		if _, ok := keys[key]; ok {
-			return ErrDuplicateKey
+			return rpctypes.ErrDuplicateKey
 		}
 		keys[key] = struct{}{}
 	}
@@ -248,14 +249,14 @@ func checkRequestDupKeys(reqs []*pb.RequestUnion) error {
 		key := string(dreq.Key)
 		if dreq.RangeEnd == nil {
 			if _, found := keys[key]; found {
-				return ErrDuplicateKey
+				return rpctypes.ErrDuplicateKey
 			}
 		} else {
 			lo := sort.SearchStrings(sortedKeys, key)
 			hi := sort.SearchStrings(sortedKeys, string(dreq.RangeEnd))
 			if lo != hi {
 				// element between lo and hi => overlap
-				return ErrDuplicateKey
+				return rpctypes.ErrDuplicateKey
 			}
 		}
 	}
@@ -288,14 +289,14 @@ func checkRequestUnion(u *pb.RequestUnion) error {
 func togRPCError(err error) error {
 	switch err {
 	case storage.ErrCompacted:
-		return ErrCompacted
+		return rpctypes.ErrCompacted
 	case storage.ErrFutureRev:
-		return ErrFutureRev
+		return rpctypes.ErrFutureRev
 	case lease.ErrLeaseNotFound:
-		return ErrLeaseNotFound
+		return rpctypes.ErrLeaseNotFound
 	// TODO: handle error from raft and timeout
 	case etcdserver.ErrRequestTooLarge:
-		return ErrRequestTooLarge
+		return rpctypes.ErrRequestTooLarge
 	default:
 		return grpc.Errorf(codes.Internal, err.Error())
 	}

+ 4 - 3
etcdserver/api/v3rpc/lease.go

@@ -19,6 +19,7 @@ import (
 
 	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
 	"github.com/coreos/etcd/etcdserver"
+	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/lease"
 )
@@ -34,7 +35,7 @@ func NewLeaseServer(le etcdserver.Lessor) pb.LeaseServer {
 func (ls *LeaseServer) LeaseCreate(ctx context.Context, cr *pb.LeaseCreateRequest) (*pb.LeaseCreateResponse, error) {
 	resp, err := ls.le.LeaseCreate(ctx, cr)
 	if err == lease.ErrLeaseExists {
-		return nil, ErrLeaseExist
+		return nil, rpctypes.ErrLeaseExist
 	}
 	return resp, err
 }
@@ -42,7 +43,7 @@ func (ls *LeaseServer) LeaseCreate(ctx context.Context, cr *pb.LeaseCreateReques
 func (ls *LeaseServer) LeaseRevoke(ctx context.Context, rr *pb.LeaseRevokeRequest) (*pb.LeaseRevokeResponse, error) {
 	r, err := ls.le.LeaseRevoke(ctx, rr)
 	if err != nil {
-		return nil, ErrLeaseNotFound
+		return nil, rpctypes.ErrLeaseNotFound
 	}
 	return r, nil
 }
@@ -59,7 +60,7 @@ func (ls *LeaseServer) LeaseKeepAlive(stream pb.Lease_LeaseKeepAliveServer) erro
 
 		ttl, err := ls.le.LeaseRenew(lease.LeaseID(req.ID))
 		if err == lease.ErrLeaseNotFound {
-			return ErrLeaseNotFound
+			return rpctypes.ErrLeaseNotFound
 		}
 
 		if err != nil && err != lease.ErrLeaseNotFound {

+ 7 - 6
etcdserver/api/v3rpc/member.go

@@ -21,6 +21,7 @@ import (
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc"
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc/codes"
 	"github.com/coreos/etcd/etcdserver"
+	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/pkg/types"
 )
@@ -42,7 +43,7 @@ func NewClusterServer(s *etcdserver.EtcdServer) *ClusterServer {
 func (cs *ClusterServer) MemberAdd(ctx context.Context, r *pb.MemberAddRequest) (*pb.MemberAddResponse, error) {
 	urls, err := types.NewURLs(r.PeerURLs)
 	if err != nil {
-		return nil, ErrMemberBadURLs
+		return nil, rpctypes.ErrMemberBadURLs
 	}
 
 	now := time.Now()
@@ -50,9 +51,9 @@ func (cs *ClusterServer) MemberAdd(ctx context.Context, r *pb.MemberAddRequest)
 	err = cs.server.AddMember(ctx, *m)
 	switch {
 	case err == etcdserver.ErrIDExists:
-		return nil, ErrMemberExist
+		return nil, rpctypes.ErrMemberExist
 	case err == etcdserver.ErrPeerURLexists:
-		return nil, ErrPeerURLExist
+		return nil, rpctypes.ErrPeerURLExist
 	case err != nil:
 		return nil, grpc.Errorf(codes.Internal, err.Error())
 	}
@@ -69,7 +70,7 @@ func (cs *ClusterServer) MemberRemove(ctx context.Context, r *pb.MemberRemoveReq
 	case err == etcdserver.ErrIDRemoved:
 		fallthrough
 	case err == etcdserver.ErrIDNotFound:
-		return nil, ErrMemberNotFound
+		return nil, rpctypes.ErrMemberNotFound
 	case err != nil:
 		return nil, grpc.Errorf(codes.Internal, err.Error())
 	}
@@ -85,9 +86,9 @@ func (cs *ClusterServer) MemberUpdate(ctx context.Context, r *pb.MemberUpdateReq
 	err := cs.server.UpdateMember(ctx, m)
 	switch {
 	case err == etcdserver.ErrPeerURLexists:
-		return nil, ErrPeerURLExist
+		return nil, rpctypes.ErrPeerURLExist
 	case err == etcdserver.ErrIDNotFound:
-		return nil, ErrMemberNotFound
+		return nil, rpctypes.ErrMemberNotFound
 	case err != nil:
 		return nil, grpc.Errorf(codes.Internal, err.Error())
 	}

+ 3 - 4
etcdserver/api/v3rpc/error.go → etcdserver/api/v3rpc/rpctypes/error.go

@@ -12,20 +12,19 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package v3rpc
+package rpctypes
 
 import (
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc"
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc/codes"
-	"github.com/coreos/etcd/storage"
 )
 
 var (
 	ErrEmptyKey     = grpc.Errorf(codes.InvalidArgument, "etcdserver: key is not provided")
 	ErrTooManyOps   = grpc.Errorf(codes.InvalidArgument, "etcdserver: too many operations in txn request")
 	ErrDuplicateKey = grpc.Errorf(codes.InvalidArgument, "etcdserver: duplicate key given in txn request")
-	ErrCompacted    = grpc.Errorf(codes.OutOfRange, "etcdserver: "+storage.ErrCompacted.Error())
-	ErrFutureRev    = grpc.Errorf(codes.OutOfRange, "etcdserver: "+storage.ErrFutureRev.Error())
+	ErrCompacted    = grpc.Errorf(codes.OutOfRange, "etcdserver: storage: required revision has been compacted")
+	ErrFutureRev    = grpc.Errorf(codes.OutOfRange, "etcdserver: storage: required revision is a future revision")
 
 	ErrLeaseNotFound = grpc.Errorf(codes.NotFound, "etcdserver: requested lease not found")
 	ErrLeaseExist    = grpc.Errorf(codes.FailedPrecondition, "etcdserver: lease already exists")

+ 12 - 11
integration/v3_grpc_test.go

@@ -22,6 +22,7 @@ import (
 	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc"
 	"github.com/coreos/etcd/etcdserver/api/v3rpc"
+	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/pkg/testutil"
 )
@@ -130,8 +131,8 @@ func TestV3TxnTooManyOps(t *testing.T) {
 		}
 
 		_, err := kvc.Txn(context.Background(), txn)
-		if err != v3rpc.ErrTooManyOps {
-			t.Errorf("#%d: err = %v, want %v", i, err, v3rpc.ErrTooManyOps)
+		if err != rpctypes.ErrTooManyOps {
+			t.Errorf("#%d: err = %v, want %v", i, err, rpctypes.ErrTooManyOps)
 		}
 	}
 }
@@ -170,17 +171,17 @@ func TestV3TxnDuplicateKeys(t *testing.T) {
 		{
 			txnSuccess: []*pb.RequestUnion{putreq, putreq},
 
-			werr: v3rpc.ErrDuplicateKey,
+			werr: rpctypes.ErrDuplicateKey,
 		},
 		{
 			txnSuccess: []*pb.RequestUnion{putreq, delKeyReq},
 
-			werr: v3rpc.ErrDuplicateKey,
+			werr: rpctypes.ErrDuplicateKey,
 		},
 		{
 			txnSuccess: []*pb.RequestUnion{putreq, delInRangeReq},
 
-			werr: v3rpc.ErrDuplicateKey,
+			werr: rpctypes.ErrDuplicateKey,
 		},
 		{
 			txnSuccess: []*pb.RequestUnion{delKeyReq, delInRangeReq, delKeyReq, delInRangeReq},
@@ -401,15 +402,15 @@ func TestV3TxnInvaildRange(t *testing.T) {
 		Request: &pb.RequestUnion_RequestRange{
 			RequestRange: rreq}})
 
-	if _, err := kvc.Txn(context.TODO(), txn); err != v3rpc.ErrFutureRev {
-		t.Errorf("err = %v, want %v", err, v3rpc.ErrFutureRev)
+	if _, err := kvc.Txn(context.TODO(), txn); err != rpctypes.ErrFutureRev {
+		t.Errorf("err = %v, want %v", err, rpctypes.ErrFutureRev)
 	}
 
 	// compacted rev
 	tv, _ := txn.Success[1].Request.(*pb.RequestUnion_RequestRange)
 	tv.RequestRange.Revision = 1
-	if _, err := kvc.Txn(context.TODO(), txn); err != v3rpc.ErrCompacted {
-		t.Errorf("err = %v, want %v", err, v3rpc.ErrCompacted)
+	if _, err := kvc.Txn(context.TODO(), txn); err != rpctypes.ErrCompacted {
+		t.Errorf("err = %v, want %v", err, rpctypes.ErrCompacted)
 	}
 }
 
@@ -426,8 +427,8 @@ func TestV3TooLargeRequest(t *testing.T) {
 	preq := &pb.PutRequest{Key: []byte("foo"), Value: largeV}
 
 	_, err := kvc.Put(context.Background(), preq)
-	if err != v3rpc.ErrRequestTooLarge {
-		t.Errorf("err = %v, want %v", err, v3rpc.ErrRequestTooLarge)
+	if err != rpctypes.ErrRequestTooLarge {
+		t.Errorf("err = %v, want %v", err, rpctypes.ErrRequestTooLarge)
 	}
 }
 

+ 5 - 5
integration/v3_lease_test.go

@@ -19,7 +19,7 @@ import (
 	"time"
 
 	"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
-	"github.com/coreos/etcd/etcdserver/api/v3rpc"
+	"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
 	pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
 	"github.com/coreos/etcd/pkg/testutil"
 	"github.com/coreos/etcd/storage/storagepb"
@@ -105,7 +105,7 @@ func TestV3LeaseCreateByID(t *testing.T) {
 	lresp, err = toGRPC(clus.RandClient()).Lease.LeaseCreate(
 		context.TODO(),
 		&pb.LeaseCreateRequest{ID: 1, TTL: 1})
-	if err != v3rpc.ErrLeaseExist {
+	if err != rpctypes.ErrLeaseExist {
 		t.Error(err)
 	}
 
@@ -241,8 +241,8 @@ func TestV3PutOnNonExistLease(t *testing.T) {
 	badLeaseID := int64(0x12345678)
 	putr := &pb.PutRequest{Key: []byte("foo"), Value: []byte("bar"), Lease: badLeaseID}
 	_, err := toGRPC(clus.RandClient()).KV.Put(ctx, putr)
-	if err != v3rpc.ErrLeaseNotFound {
-		t.Errorf("err = %v, want %v", err, v3rpc.ErrCompacted)
+	if err != rpctypes.ErrLeaseNotFound {
+		t.Errorf("err = %v, want %v", err, rpctypes.ErrCompacted)
 	}
 }
 
@@ -364,7 +364,7 @@ func leaseExist(t *testing.T, clus *ClusterV3, leaseID int64) bool {
 		return false
 	}
 
-	if err == v3rpc.ErrLeaseExist {
+	if err == rpctypes.ErrLeaseExist {
 		return true
 	}
 	t.Fatalf("unexpecter error %v", err)