|
@@ -161,7 +161,7 @@ func (a *applierV3backend) Put(txnID int64, p *pb.PutRequest) (*pb.PutResponse,
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
var rr *mvcc.RangeResult
|
|
var rr *mvcc.RangeResult
|
|
|
- if p.PrevKv || p.IgnoreValue {
|
|
|
|
|
|
|
+ if p.PrevKv || p.IgnoreValue || p.IgnoreLease {
|
|
|
if txnID != noTxn {
|
|
if txnID != noTxn {
|
|
|
rr, err = a.s.KV().TxnRange(txnID, p.Key, nil, mvcc.RangeOptions{})
|
|
rr, err = a.s.KV().TxnRange(txnID, p.Key, nil, mvcc.RangeOptions{})
|
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -183,6 +183,14 @@ func (a *applierV3backend) Put(txnID int64, p *pb.PutRequest) (*pb.PutResponse,
|
|
|
p.Value = rr.KVs[0].Value
|
|
p.Value = rr.KVs[0].Value
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ if p.IgnoreLease {
|
|
|
|
|
+ if rr == nil || len(rr.KVs) == 0 {
|
|
|
|
|
+ // ignore_lease flag expects previous key-value pair
|
|
|
|
|
+ return nil, ErrKeyNotFound
|
|
|
|
|
+ }
|
|
|
|
|
+ p.Lease = rr.KVs[0].Lease
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
if txnID != noTxn {
|
|
if txnID != noTxn {
|
|
|
rev, err = a.s.KV().TxnPut(txnID, p.Key, p.Value, lease.LeaseID(p.Lease))
|
|
rev, err = a.s.KV().TxnPut(txnID, p.Key, p.Value, lease.LeaseID(p.Lease))
|
|
|
if err != nil {
|
|
if err != nil {
|
|
@@ -767,7 +775,7 @@ func (a *applierV3backend) checkRequestPut(reqs []*pb.RequestOp) error {
|
|
|
if preq == nil {
|
|
if preq == nil {
|
|
|
continue
|
|
continue
|
|
|
}
|
|
}
|
|
|
- if preq.IgnoreValue {
|
|
|
|
|
|
|
+ if preq.IgnoreValue || preq.IgnoreLease {
|
|
|
// expects previous key-value, error if not exist
|
|
// expects previous key-value, error if not exist
|
|
|
rr, err := a.s.KV().Range(preq.Key, nil, mvcc.RangeOptions{})
|
|
rr, err := a.s.KV().Range(preq.Key, nil, mvcc.RangeOptions{})
|
|
|
if err != nil {
|
|
if err != nil {
|