v3rpc: move errors to v3rpc/rpctypes

Fixes #4771
This commit is contained in:
Anthony Romano 2016-03-17 10:08:16 -07:00
parent f491110c5b
commit 44753594ec
12 changed files with 60 additions and 56 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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