Browse Source

etcdserver/api/v3rpc: fill in KV ResponseHeader

Gyu-Ho Lee 10 years ago
parent
commit
5842177172
1 changed files with 43 additions and 2 deletions
  1. 43 2
      etcdserver/api/v3rpc/key.go

+ 43 - 2
etcdserver/api/v3rpc/key.go

@@ -16,6 +16,7 @@
 package v3rpc
 package v3rpc
 
 
 import (
 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/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"
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc/codes"
 	"github.com/coreos/etcd/Godeps/_workspace/src/google.golang.org/grpc/codes"
@@ -24,12 +25,25 @@ import (
 	"github.com/coreos/etcd/storage"
 	"github.com/coreos/etcd/storage"
 )
 )
 
 
+var (
+	plog = capnslog.NewPackageLogger("github.com/coreos/etcd/etcdserver/api", "v3rpc")
+)
+
 type kvServer struct {
 type kvServer struct {
+	clusterID int64
+	memberID  int64
+	raftTimer etcdserver.RaftTimer
+
 	kv etcdserver.RaftKV
 	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) {
 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)
 		return nil, togRPCError(err)
 	}
 	}
 
 
+	if resp.Header == nil {
+		plog.Panic("unexpected nil resp.Header")
+	}
+	s.fillInHeader(resp.Header)
 	return resp, err
 	return resp, err
 }
 }
 
 
@@ -55,6 +73,10 @@ func (s *kvServer) Put(ctx context.Context, r *pb.PutRequest) (*pb.PutResponse,
 		return nil, togRPCError(err)
 		return nil, togRPCError(err)
 	}
 	}
 
 
+	if resp.Header == nil {
+		plog.Panic("unexpected nil resp.Header")
+	}
+	s.fillInHeader(resp.Header)
 	return resp, err
 	return resp, err
 }
 }
 
 
@@ -68,6 +90,10 @@ func (s *kvServer) DeleteRange(ctx context.Context, r *pb.DeleteRangeRequest) (*
 		return nil, togRPCError(err)
 		return nil, togRPCError(err)
 	}
 	}
 
 
+	if resp.Header == nil {
+		plog.Panic("unexpected nil resp.Header")
+	}
+	s.fillInHeader(resp.Header)
 	return resp, err
 	return resp, err
 }
 }
 
 
@@ -81,6 +107,10 @@ func (s *kvServer) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse,
 		return nil, togRPCError(err)
 		return nil, togRPCError(err)
 	}
 	}
 
 
+	if resp.Header == nil {
+		plog.Panic("unexpected nil resp.Header")
+	}
+	s.fillInHeader(resp.Header)
 	return resp, err
 	return resp, err
 }
 }
 
 
@@ -90,9 +120,20 @@ func (s *kvServer) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb.Co
 		return nil, togRPCError(err)
 		return nil, togRPCError(err)
 	}
 	}
 
 
+	if resp.Header == nil {
+		plog.Panic("unexpected nil resp.Header")
+	}
+	s.fillInHeader(resp.Header)
 	return resp, nil
 	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 {
 func checkRangeRequest(r *pb.RangeRequest) error {
 	if len(r.Key) == 0 {
 	if len(r.Key) == 0 {
 		return ErrEmptyKey
 		return ErrEmptyKey