From 5842177172e009597ee9e46866c2cfb259415f62 Mon Sep 17 00:00:00 2001 From: Gyu-Ho Lee Date: Thu, 7 Jan 2016 04:09:58 -0800 Subject: [PATCH] etcdserver/api/v3rpc: fill in KV ResponseHeader --- etcdserver/api/v3rpc/key.go | 45 +++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) diff --git a/etcdserver/api/v3rpc/key.go b/etcdserver/api/v3rpc/key.go index 449182ccc..21daae181 100644 --- a/etcdserver/api/v3rpc/key.go +++ b/etcdserver/api/v3rpc/key.go @@ -16,6 +16,7 @@ package v3rpc import ( + "github.com/coreos/etcd/Godeps/_workspace/src/github.com/coreos/pkg/capnslog" "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/Godeps/_workspace/src/google.golang.org/grpc/codes" @@ -24,12 +25,25 @@ import ( "github.com/coreos/etcd/storage" ) +var ( + plog = capnslog.NewPackageLogger("github.com/coreos/etcd/etcdserver/api", "v3rpc") +) + type kvServer struct { + clusterID int64 + memberID int64 + raftTimer etcdserver.RaftTimer + kv etcdserver.RaftKV } -func NewKVServer(s etcdserver.RaftKV) pb.KVServer { - return &kvServer{s} +func NewKVServer(s *etcdserver.EtcdServer) pb.KVServer { + return &kvServer{ + clusterID: int64(s.Cluster().ID()), + memberID: int64(s.ID()), + raftTimer: s, + kv: s, + } } func (s *kvServer) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeResponse, error) { @@ -42,6 +56,10 @@ func (s *kvServer) Range(ctx context.Context, r *pb.RangeRequest) (*pb.RangeResp return nil, togRPCError(err) } + if resp.Header == nil { + plog.Panic("unexpected nil resp.Header") + } + s.fillInHeader(resp.Header) return resp, err } @@ -55,6 +73,10 @@ func (s *kvServer) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse, return nil, togRPCError(err) } + if resp.Header == nil { + plog.Panic("unexpected nil resp.Header") + } + s.fillInHeader(resp.Header) return resp, err } @@ -68,6 +90,10 @@ func (s *kvServer) DeleteRange(ctx context.Context, r *pb.DeleteRangeRequest) (* return nil, togRPCError(err) } + if resp.Header == nil { + plog.Panic("unexpected nil resp.Header") + } + s.fillInHeader(resp.Header) return resp, err } @@ -81,6 +107,10 @@ func (s *kvServer) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse, return nil, togRPCError(err) } + if resp.Header == nil { + plog.Panic("unexpected nil resp.Header") + } + s.fillInHeader(resp.Header) return resp, err } @@ -90,9 +120,20 @@ func (s *kvServer) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb.Co return nil, togRPCError(err) } + if resp.Header == nil { + plog.Panic("unexpected nil resp.Header") + } + s.fillInHeader(resp.Header) return resp, nil } +// fillInHeader populates pb.ResponseHeader from kvServer, except Revision. +func (s *kvServer) fillInHeader(h *pb.ResponseHeader) { + h.ClusterId = uint64(s.clusterID) + h.MemberId = uint64(s.memberID) + h.RaftTerm = s.raftTimer.Term() +} + func checkRangeRequest(r *pb.RangeRequest) error { if len(r.Key) == 0 { return ErrEmptyKey