mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
leasing: don't acquire lease on ttl'd keys
TTL'd keys may expire on cluster without lease holder's consent.
This commit is contained in:
parent
cf0a07be52
commit
5c03ade973
@ -22,6 +22,7 @@ import (
|
|||||||
v3 "github.com/coreos/etcd/clientv3"
|
v3 "github.com/coreos/etcd/clientv3"
|
||||||
"github.com/coreos/etcd/clientv3/concurrency"
|
"github.com/coreos/etcd/clientv3/concurrency"
|
||||||
"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
|
"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
|
||||||
|
pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
|
||||||
"github.com/coreos/etcd/mvcc/mvccpb"
|
"github.com/coreos/etcd/mvcc/mvccpb"
|
||||||
|
|
||||||
"golang.org/x/net/context"
|
"golang.org/x/net/context"
|
||||||
@ -261,8 +262,10 @@ func (lkv *leasingKV) acquire(ctx context.Context, key string, op v3.Op) (*v3.Tx
|
|||||||
if err := lkv.waitSession(ctx); err != nil {
|
if err := lkv.waitSession(ctx); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
lcmp := v3.Cmp{Key: []byte(key), Target: pb.Compare_LEASE}
|
||||||
resp, err := lkv.kv.Txn(ctx).If(
|
resp, err := lkv.kv.Txn(ctx).If(
|
||||||
v3.Compare(v3.CreateRevision(lkv.pfx+key), "=", 0)).
|
v3.Compare(v3.CreateRevision(lkv.pfx+key), "=", 0),
|
||||||
|
v3.Compare(lcmp, "=", 0)).
|
||||||
Then(
|
Then(
|
||||||
op,
|
op,
|
||||||
v3.OpPut(lkv.pfx+key, "", v3.WithLease(lkv.leaseID()))).
|
v3.OpPut(lkv.pfx+key, "", v3.WithLease(lkv.leaseID()))).
|
||||||
@ -274,7 +277,7 @@ func (lkv *leasingKV) acquire(ctx context.Context, key string, op v3.Op) (*v3.Tx
|
|||||||
if !resp.Succeeded {
|
if !resp.Succeeded {
|
||||||
kvs := resp.Responses[1].GetResponseRange().Kvs
|
kvs := resp.Responses[1].GetResponseRange().Kvs
|
||||||
// if txn failed since already owner, lease is acquired
|
// if txn failed since already owner, lease is acquired
|
||||||
resp.Succeeded = v3.LeaseID(kvs[0].Lease) == lkv.leaseID()
|
resp.Succeeded = len(kvs) > 0 && v3.LeaseID(kvs[0].Lease) == lkv.leaseID()
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user