|
|
@@ -18,6 +18,8 @@ import (
|
|
|
"context"
|
|
|
|
|
|
pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
|
|
|
+
|
|
|
+ "google.golang.org/grpc"
|
|
|
)
|
|
|
|
|
|
type (
|
|
|
@@ -88,15 +90,24 @@ func (resp *TxnResponse) OpResponse() OpResponse {
|
|
|
}
|
|
|
|
|
|
type kv struct {
|
|
|
- remote pb.KVClient
|
|
|
+ remote pb.KVClient
|
|
|
+ callOpts []grpc.CallOption
|
|
|
}
|
|
|
|
|
|
func NewKV(c *Client) KV {
|
|
|
- return &kv{remote: RetryKVClient(c)}
|
|
|
+ api := &kv{remote: RetryKVClient(c)}
|
|
|
+ if c != nil {
|
|
|
+ api.callOpts = c.callOpts
|
|
|
+ }
|
|
|
+ return api
|
|
|
}
|
|
|
|
|
|
-func NewKVFromKVClient(remote pb.KVClient) KV {
|
|
|
- return &kv{remote: remote}
|
|
|
+func NewKVFromKVClient(remote pb.KVClient, c *Client) KV {
|
|
|
+ api := &kv{remote: remote}
|
|
|
+ if c != nil {
|
|
|
+ api.callOpts = c.callOpts
|
|
|
+ }
|
|
|
+ return api
|
|
|
}
|
|
|
|
|
|
func (kv *kv) Put(ctx context.Context, key, val string, opts ...OpOption) (*PutResponse, error) {
|
|
|
@@ -115,7 +126,7 @@ func (kv *kv) Delete(ctx context.Context, key string, opts ...OpOption) (*Delete
|
|
|
}
|
|
|
|
|
|
func (kv *kv) Compact(ctx context.Context, rev int64, opts ...CompactOption) (*CompactResponse, error) {
|
|
|
- resp, err := kv.remote.Compact(ctx, OpCompact(rev, opts...).toRequest())
|
|
|
+ resp, err := kv.remote.Compact(ctx, OpCompact(rev, opts...).toRequest(), kv.callOpts...)
|
|
|
if err != nil {
|
|
|
return nil, toErr(ctx, err)
|
|
|
}
|
|
|
@@ -124,8 +135,9 @@ func (kv *kv) Compact(ctx context.Context, rev int64, opts ...CompactOption) (*C
|
|
|
|
|
|
func (kv *kv) Txn(ctx context.Context) Txn {
|
|
|
return &txn{
|
|
|
- kv: kv,
|
|
|
- ctx: ctx,
|
|
|
+ kv: kv,
|
|
|
+ ctx: ctx,
|
|
|
+ callOpts: kv.callOpts,
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -134,27 +146,27 @@ func (kv *kv) Do(ctx context.Context, op Op) (OpResponse, error) {
|
|
|
switch op.t {
|
|
|
case tRange:
|
|
|
var resp *pb.RangeResponse
|
|
|
- resp, err = kv.remote.Range(ctx, op.toRangeRequest())
|
|
|
+ resp, err = kv.remote.Range(ctx, op.toRangeRequest(), kv.callOpts...)
|
|
|
if err == nil {
|
|
|
return OpResponse{get: (*GetResponse)(resp)}, nil
|
|
|
}
|
|
|
case tPut:
|
|
|
var resp *pb.PutResponse
|
|
|
r := &pb.PutRequest{Key: op.key, Value: op.val, Lease: int64(op.leaseID), PrevKv: op.prevKV, IgnoreValue: op.ignoreValue, IgnoreLease: op.ignoreLease}
|
|
|
- resp, err = kv.remote.Put(ctx, r)
|
|
|
+ resp, err = kv.remote.Put(ctx, r, kv.callOpts...)
|
|
|
if err == nil {
|
|
|
return OpResponse{put: (*PutResponse)(resp)}, nil
|
|
|
}
|
|
|
case tDeleteRange:
|
|
|
var resp *pb.DeleteRangeResponse
|
|
|
r := &pb.DeleteRangeRequest{Key: op.key, RangeEnd: op.end, PrevKv: op.prevKV}
|
|
|
- resp, err = kv.remote.DeleteRange(ctx, r)
|
|
|
+ resp, err = kv.remote.DeleteRange(ctx, r, kv.callOpts...)
|
|
|
if err == nil {
|
|
|
return OpResponse{del: (*DeleteResponse)(resp)}, nil
|
|
|
}
|
|
|
case tTxn:
|
|
|
var resp *pb.TxnResponse
|
|
|
- resp, err = kv.remote.Txn(ctx, op.toTxnRequest())
|
|
|
+ resp, err = kv.remote.Txn(ctx, op.toTxnRequest(), kv.callOpts...)
|
|
|
if err == nil {
|
|
|
return OpResponse{txn: (*TxnResponse)(resp)}, nil
|
|
|
}
|