grpcproxy: invalidate comparison keys after txn
If the txn comparison block makes claims about a key's current state, then it may say a key has been updated. Future range/txn operations may expect this update to eventually be propagated through the cluster and show up in serialized requests. To avoid spinning forever on txn/serialized range loops, invalidate the comparison keys.release-3.1
parent
27459425fa
commit
bf08a6142c
|
@ -89,7 +89,15 @@ func (p *kvProxy) Txn(ctx context.Context, r *pb.TxnRequest) (*pb.TxnResponse, e
|
||||||
}
|
}
|
||||||
|
|
||||||
resp, err := txn.If(cmps...).Then(thenops...).Else(elseops...).Commit()
|
resp, err := txn.If(cmps...).Then(thenops...).Else(elseops...).Commit()
|
||||||
return (*pb.TxnResponse)(resp), err
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// txn may claim an outdated key is updated; be safe and invalidate
|
||||||
|
for _, cmp := range r.Compare {
|
||||||
|
p.cache.Invalidate(cmp.Key, nil)
|
||||||
|
}
|
||||||
|
return (*pb.TxnResponse)(resp), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *kvProxy) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb.CompactionResponse, error) {
|
func (p *kvProxy) Compact(ctx context.Context, r *pb.CompactionRequest) (*pb.CompactionResponse, error) {
|
||||||
|
|
Loading…
Reference in New Issue