client leases
- FIX max_size!!!!!!!!!
-- IFILE lease vs filelock and caps...
-- IFILE lease vs dirlock...
- - do i need to unify filelock and scatterlock?
+- scatterlock needs to do lease callbacks
- lease length heuristics
- mds lock last_change stamp?
- client: preemptively release lease on dentry we are unlinking, renaming from/to, etc.
if ((lock->get_state() == LOCK_GLOCKS ||
lock->get_state() == LOCK_GLOCKT) &&
!lock->is_gathering() &&
+ lock->get_num_client_lease() == 0 &&
!lock->is_rdlocked()) {
dout(7) << "scatter_eval finished lock gather/un-rdlock on " << *lock
<< " on " << *lock->get_parent() << dendl;
else if ((lock->get_state() == LOCK_GSCATTERT ||
lock->get_state() == LOCK_GSCATTERS) &&
!lock->is_gathering() &&
+ lock->get_num_client_lease() == 0 &&
!lock->is_rdlocked()) {
dout(7) << "scatter_eval finished scatter un-rdlock(/gather) on " << *lock
<< " on " << *lock->get_parent() << dendl;
switch (lock->get_state()) {
case LOCK_SYNC:
if (!lock->is_rdlocked() &&
- !lock->get_parent()->is_replicated())
+ !lock->get_parent()->is_replicated() &&
+ !lock->get_num_client_lease())
break; // do it
if (lock->get_parent()->is_replicated()) {
send_lock_message(lock, LOCK_AC_LOCK);
lock->init_gather();
}
+ revoke_client_leases(lock);
lock->set_state(LOCK_GSCATTERS);
lock->get_parent()->auth_pin();
return;
switch (lock->get_state()) {
case LOCK_SYNC:
if (!lock->is_rdlocked() &&
- !lock->get_parent()->is_replicated())
+ !lock->get_parent()->is_replicated() &&
+ !lock->get_num_client_lease())
break; // do it.
if (lock->get_parent()->is_replicated()) {
send_lock_message(lock, LOCK_AC_LOCK);
lock->init_gather();
}
+ revoke_client_leases(lock);
lock->set_state(LOCK_GLOCKS);
lock->get_parent()->auth_pin();
return;
switch (lock->get_state()) {
case LOCK_SYNC:
- break; // do it.
+ assert(0); // this shouldn't happen
case LOCK_LOCK:
if (lock->is_wrlocked() ||