diff --git a/clientv3/kv.go b/clientv3/kv.go index 3cdf0ae40..2c6a3ff84 100644 --- a/clientv3/kv.go +++ b/clientv3/kv.go @@ -122,21 +122,18 @@ func (kv *kv) Delete(key string) (*DeleteResponse, error) { } func (kv *kv) Compact(rev int64) error { - for { - r := &pb.CompactionRequest{Revision: rev} - _, err := kv.getRemote().Compact(context.TODO(), r) - if err == nil { - return nil - } - - if isRPCError(err) { - return err - } - - if nerr := kv.switchRemote(err); nerr != nil { - return nerr - } + r := &pb.CompactionRequest{Revision: rev} + _, err := kv.getRemote().Compact(context.TODO(), r) + if err == nil { + return nil } + + if isRPCError(err) { + return err + } + + go kv.switchRemote(err) + return nil } func (kv *kv) Txn() Txn { @@ -187,6 +184,12 @@ func (kv *kv) do(op Op) (*pb.ResponseUnion, error) { return nil, err } + // do not retry on modifications + if op.t != tRange { + go kv.switchRemote(err) + return nil, err + } + if nerr := kv.switchRemote(err); nerr != nil { return nil, nerr }