From 90e9652f700877aa8e64deda0b2b31a229ab01cf Mon Sep 17 00:00:00 2001 From: Hitoshi Mitake Date: Mon, 23 May 2016 19:10:01 -0700 Subject: [PATCH] etcdserver: return error of apply result without touching response Current etcdserver tries to return result.resp even if result.err is not nil. A situation of result.resp == nil and result.err != nil can happen and it results an error like below: 18:49:57 etcd1 | interface conversion: proto.Message is nil, not *etcdserverpb.PutResponse This commit lets the functions return result.err if it is not nil. --- etcdserver/v3_server.go | 85 ++++++++++++++++++++++++++++++++--------- 1 file changed, 68 insertions(+), 17 deletions(-) diff --git a/etcdserver/v3_server.go b/etcdserver/v3_server.go index 3b7bf1eb3..08e5da483 100644 --- a/etcdserver/v3_server.go +++ b/etcdserver/v3_server.go @@ -75,7 +75,10 @@ func (s *EtcdServer) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeRe if err != nil { return nil, err } - return result.resp.(*pb.RangeResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.RangeResponse), nil } func (s *EtcdServer) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, error) { @@ -83,7 +86,10 @@ func (s *EtcdServer) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse if err != nil { return nil, err } - return result.resp.(*pb.PutResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.PutResponse), nil } func (s *EtcdServer) DeleteRange(ctx context.Context, r *pb.DeleteRangeRequest) (*pb.DeleteRangeResponse, error) { @@ -91,7 +97,10 @@ func (s *EtcdServer) DeleteRange(ctx context.Context, r *pb.DeleteRangeRequest) if err != nil { return nil, err } - return result.resp.(*pb.DeleteRangeResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.DeleteRangeResponse), nil } func (s *EtcdServer) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse, error) { @@ -103,7 +112,10 @@ func (s *EtcdServer) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse if err != nil { return nil, err } - return result.resp.(*pb.TxnResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.TxnResponse), nil } func isTxnSerializable(r *pb.TxnRequest) bool { @@ -134,6 +146,9 @@ func (s *EtcdServer) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb. if err != nil { return nil, err } + if result.err != nil { + return nil, result.err + } resp := result.resp.(*pb.CompactionResponse) if resp == nil { resp = &pb.CompactionResponse{} @@ -142,7 +157,7 @@ func (s *EtcdServer) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb. resp.Header = &pb.ResponseHeader{} } resp.Header.Revision = s.kv.Rev() - return resp, result.err + return resp, nil } func (s *EtcdServer) LeaseGrant(ctx context.Context, r *pb.LeaseGrantRequest) (*pb.LeaseGrantResponse, error) { @@ -155,7 +170,10 @@ func (s *EtcdServer) LeaseGrant(ctx context.Context, r *pb.LeaseGrantRequest) (* if err != nil { return nil, err } - return result.resp.(*pb.LeaseGrantResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.LeaseGrantResponse), nil } func (s *EtcdServer) LeaseRevoke(ctx context.Context, r *pb.LeaseRevokeRequest) (*pb.LeaseRevokeResponse, error) { @@ -163,7 +181,10 @@ func (s *EtcdServer) LeaseRevoke(ctx context.Context, r *pb.LeaseRevokeRequest) if err != nil { return nil, err } - return result.resp.(*pb.LeaseRevokeResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.LeaseRevokeResponse), nil } func (s *EtcdServer) LeaseRenew(id lease.LeaseID) (int64, error) { @@ -206,7 +227,10 @@ func (s *EtcdServer) Alarm(ctx context.Context, r *pb.AlarmRequest) (*pb.AlarmRe if err != nil { return nil, err } - return result.resp.(*pb.AlarmResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.AlarmResponse), nil } func (s *EtcdServer) AuthEnable(ctx context.Context, r *pb.AuthEnableRequest) (*pb.AuthEnableResponse, error) { @@ -214,7 +238,10 @@ func (s *EtcdServer) AuthEnable(ctx context.Context, r *pb.AuthEnableRequest) (* if err != nil { return nil, err } - return result.resp.(*pb.AuthEnableResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.AuthEnableResponse), nil } func (s *EtcdServer) AuthDisable(ctx context.Context, r *pb.AuthDisableRequest) (*pb.AuthDisableResponse, error) { @@ -222,7 +249,10 @@ func (s *EtcdServer) AuthDisable(ctx context.Context, r *pb.AuthDisableRequest) if err != nil { return nil, err } - return result.resp.(*pb.AuthDisableResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.AuthDisableResponse), nil } func (s *EtcdServer) Authenticate(ctx context.Context, r *pb.AuthenticateRequest) (*pb.AuthenticateResponse, error) { @@ -230,7 +260,10 @@ func (s *EtcdServer) Authenticate(ctx context.Context, r *pb.AuthenticateRequest if err != nil { return nil, err } - return result.resp.(*pb.AuthenticateResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.AuthenticateResponse), nil } func (s *EtcdServer) UserAdd(ctx context.Context, r *pb.AuthUserAddRequest) (*pb.AuthUserAddResponse, error) { @@ -238,7 +271,10 @@ func (s *EtcdServer) UserAdd(ctx context.Context, r *pb.AuthUserAddRequest) (*pb if err != nil { return nil, err } - return result.resp.(*pb.AuthUserAddResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.AuthUserAddResponse), nil } func (s *EtcdServer) UserDelete(ctx context.Context, r *pb.AuthUserDeleteRequest) (*pb.AuthUserDeleteResponse, error) { @@ -246,7 +282,10 @@ func (s *EtcdServer) UserDelete(ctx context.Context, r *pb.AuthUserDeleteRequest if err != nil { return nil, err } - return result.resp.(*pb.AuthUserDeleteResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.AuthUserDeleteResponse), nil } func (s *EtcdServer) UserChangePassword(ctx context.Context, r *pb.AuthUserChangePasswordRequest) (*pb.AuthUserChangePasswordResponse, error) { @@ -254,7 +293,10 @@ func (s *EtcdServer) UserChangePassword(ctx context.Context, r *pb.AuthUserChang if err != nil { return nil, err } - return result.resp.(*pb.AuthUserChangePasswordResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.AuthUserChangePasswordResponse), nil } func (s *EtcdServer) UserGrant(ctx context.Context, r *pb.AuthUserGrantRequest) (*pb.AuthUserGrantResponse, error) { @@ -262,7 +304,10 @@ func (s *EtcdServer) UserGrant(ctx context.Context, r *pb.AuthUserGrantRequest) if err != nil { return nil, err } - return result.resp.(*pb.AuthUserGrantResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.AuthUserGrantResponse), nil } func (s *EtcdServer) RoleAdd(ctx context.Context, r *pb.AuthRoleAddRequest) (*pb.AuthRoleAddResponse, error) { @@ -270,7 +315,10 @@ func (s *EtcdServer) RoleAdd(ctx context.Context, r *pb.AuthRoleAddRequest) (*pb if err != nil { return nil, err } - return result.resp.(*pb.AuthRoleAddResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.AuthRoleAddResponse), nil } func (s *EtcdServer) RoleGrant(ctx context.Context, r *pb.AuthRoleGrantRequest) (*pb.AuthRoleGrantResponse, error) { @@ -278,7 +326,10 @@ func (s *EtcdServer) RoleGrant(ctx context.Context, r *pb.AuthRoleGrantRequest) if err != nil { return nil, err } - return result.resp.(*pb.AuthRoleGrantResponse), result.err + if result.err != nil { + return nil, result.err + } + return result.resp.(*pb.AuthRoleGrantResponse), nil } func (s *EtcdServer) processInternalRaftRequest(ctx context.Context, r pb.InternalRaftRequest) (*applyResult, error) {