Allows specify a lease TTL for lock.
Signed-off-by: Tao He <linzhu.ht@alibaba-inc.com>
This commit is contained in:
parent
2aec773d72
commit
c9f82b46d4
|
|
@ -269,12 +269,20 @@ namespace etcd
|
|||
pplx::task<Response> leasetimetolive(int64_t lease_id);
|
||||
|
||||
/**
|
||||
* Gains a lock at a key, using a default created lease, using the default lease (60 seconds), with
|
||||
* Gains a lock at a key, using a default created lease, using the default lease (10 seconds), with
|
||||
* keeping alive has already been taken care of by the library.
|
||||
* @param key is the key to be used to request the lock.
|
||||
*/
|
||||
pplx::task<Response> lock(std::string const &key);
|
||||
|
||||
/**
|
||||
* Gains a lock at a key, using a default created lease, using the specified lease TTL (in seconds), with
|
||||
* keeping alive has already been taken care of by the library.
|
||||
* @param key is the key to be used to request the lock.
|
||||
* @param lease_ttl is the TTL used to create a lease for the key.
|
||||
*/
|
||||
pplx::task<Response> lock(std::string const &key, int lease_ttl);
|
||||
|
||||
/**
|
||||
* Gains a lock at a key, using a user-provided lease, the lifetime of the lease won't be taken care
|
||||
* of by the library.
|
||||
|
|
|
|||
|
|
@ -598,20 +598,23 @@ pplx::task<etcd::Response> etcd::Client::leasetimetolive(int64_t lease_id)
|
|||
}
|
||||
|
||||
pplx::task<etcd::Response> etcd::Client::lock(std::string const &key) {
|
||||
etcdv3::ActionParameters params;
|
||||
params.auth_token.assign(this->auth_token);
|
||||
|
||||
static const int DEFAULT_LEASE_TTL_FOR_LOCK = 10;
|
||||
|
||||
// routines in lock usually will be fast, less than 10 seconds.
|
||||
//
|
||||
// (base on our experiences in vineyard and GraphScope).
|
||||
auto resp = this->leasegrant(DEFAULT_LEASE_TTL_FOR_LOCK).get();
|
||||
static const int DEFAULT_LEASE_TTL_FOR_LOCK = 10;
|
||||
return this->lock(key, DEFAULT_LEASE_TTL_FOR_LOCK);
|
||||
}
|
||||
|
||||
pplx::task<etcd::Response> etcd::Client::lock(std::string const &key, int lease_ttl) {
|
||||
etcdv3::ActionParameters params;
|
||||
params.auth_token.assign(this->auth_token);
|
||||
|
||||
auto resp = this->leasegrant(lease_ttl).get();
|
||||
int64_t lease_id = resp.value().lease();
|
||||
{
|
||||
std::lock_guard<std::mutex> lexical_scope_lock(mutex_for_keepalives);
|
||||
this->keep_alive_for_locks[lease_id].reset(
|
||||
new KeepAlive(*this, DEFAULT_LEASE_TTL_FOR_LOCK, lease_id));
|
||||
new KeepAlive(*this, lease_ttl, lease_id));
|
||||
}
|
||||
params.key = key;
|
||||
params.lease_id = lease_id;
|
||||
|
|
|
|||
Loading…
Reference in New Issue